Muster für ZIDoc EingangsverarbeitungsFuBa
Aus SAP Wiki ツ
(Weitergeleitet von Muster für ZIDoc VerarbeitungsFuBa)
Kopie eines Standard FuBas
Kopie von "idoc_input_fidcc2" erstellen.
Codeschnipsel
Neu hinzugefügte Variante
DATA: lv_eid TYPE bdwfretvar-wf_param VALUE 'Error_IDOCs',
lv_pid TYPE bdwfretvar-wf_param VALUE 'Processed_IDOCs',
lv_apo TYPE bdwfretvar-wf_param VALUE 'Appl_Objects',
c_wf_result_error TYPE bdwfap_par-result VALUE '99999',
c_wf_result_ok TYPE bdwfap_par-result VALUE '0',
ls_xyz_struc_seg TYPE xyz_seg_structure,
lv_error_occurend TYPE char1,
lv_msgv1 TYPE edids-stapa1,
lv_msgv2 TYPE edids-stapa2,
lv_msgv3 TYPE edids-stapa3,
lv_msgv4 TYPE edids-stapa4,
lv_message TYPE bapiret2-message,
lt_error_log TYPE bal_t_msg.
CONSTANTS: lc_status_51_failed TYPE edidc-status VALUE '51',
lc_status_53_successful TYPE edidc-status VALUE '53',
lc_segnam_xyz TYPE String VALUE 'XYZ',
lc_mestyp_xyz TYPE String VALUE 'XYZ'.
IF idoc_contrl-mestyp <> lc_mestyp_xyz.
RAISE wrong_function_called.
ENDIF.
LOOP AT idoc_contrl.
lv_error_occurend = ''.
TRY.
* Have a look for ZCL_BAL here: https://wiki.m1ch3l.de/ZCL_BAL
DATA(lo_bal) = NEW zcl_bal(
iv_object = zcl_bal=>cs_object-idoc
iv_subobject = zcl_bal=>cs_subobject-idoc_xyz
iv_extnumber = |IDoc_{ idoc_contrl-mestyp }_{ idoc_contrl-docnum }|
).
CATCH zcx_basic INTO DATA(lo_zcx_basic).
RAISE bal_creating_failed.
ENDTRY.
LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum.
CASE idoc_data-segnam.
WHEN lc_segnam_xyz.
ENDCASE.
ENDLOOP.
IF lv_error_occurend = abap_true. "Error
IF lines( lo_bal->get_all_msgs_bapiret2( ) ) > 0.
lo_bal->store_and_free( ).
ENDIF.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = lc_status_51_failed.
idoc_status-msgty = 'E'.
idoc_status-msgid = 'ZMC_XYZ'.
idoc_status-msgno = '004'.
idoc_status-msgv1 = |TCODE: SLG1|.
idoc_status-msgv2 = zcl_bal=>cs_object-idoc.
idoc_status-msgv3 = zcl_bal=>cs_subobject-idoc_xyz.
idoc_status-msgv4 = |IDoc_{ idoc_contrl-mestyp }_{ idoc_contrl-docnum }|.
APPEND idoc_status.
ELSE. "OK
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = lc_status_53_successful.
idoc_status-msgty = 'S'.
idoc_status-msgid = 'ZMC_XYZ'.
idoc_status-msgno = '012'.
idoc_status-repid = sy-repid.
idoc_status-msgv1 = 'XYZ'.
idoc_status-msgv2 = 'XYZ'.
APPEND idoc_status.
ENDIF.
* set workflow output parameters
* Allocate IDOC numbers to Workflow output parameters
IF lv_error_occurend = abap_true.
workflow_result = c_wf_result_error.
return_variables-wf_param = lv_eid.
return_variables-doc_number = idoc_contrl-docnum.
APPEND return_variables.
ELSE.
workflow_result = c_wf_result_ok.
return_variables-wf_param = lv_pid.
return_variables-doc_number = idoc_contrl-docnum.
APPEND return_variables.
return_variables-wf_param = lv_apo.
return_variables-doc_number = idoc_contrl-docnum.
APPEND return_variables.
ENDIF.
ENDLOOP.
Ältere hinzugefügte Variante
INCLUDE mbdconwf.
DATA:
cv_mestyp TYPE edidc-mestyp VALUE 'ZIDOC',
cv_wf_par_error_idocs TYPE bdwfretvar-wf_param VALUE 'Error_IDOCs',
cv_wf_result_ok TYPE bdwf_param-result VALUE '0 ' ##NEEDED,
cv_wf_result_error TYPE bdwf_param-result VALUE '99999',
ls_data TYPE zgglpay,
lv_error TYPE char01,
ls_lmess TYPE lmess,
lt_xreturn TYPE TABLE OF bdwfretvar.
lt_return TYPE bapiret2_t.
FIELD-SYMBOLS: <ls_xreturn> TYPE bdwfretvar.
READ TABLE idoc_contrl INDEX 1.
IF idoc_contrl-mestyp NE cv_mestyp.
RAISE wrong_function_called.
ENDIF.
LOOP AT idoc_contrl.
LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum. "#EC CI_NESTED
ls_data = idoc_data-sdata.
lv_compcode = ls_data-header_company.
lv_refdoc = ls_data-ref_doc_number.
ENDLOOP.
ENDLOOP.
IF lt_return IS NOT INITIAL.
READ TABLE lt_return INTO DATA(ls_return) INDEX 1.
IF ls_return-type = 'E'.
ls_lmess-msgid = ls_return-id.
ls_lmess-msgno = ls_return-number.
ls_lmess-msgty = ls_return-type.
ls_lmess-msgv1 = ls_return-message_v1.
ls_lmess-msgv2 = ls_return-message_v2.
ls_lmess-msgv3 = ls_return-message_v3.
ls_lmess-msgv4 = ls_return-message_v4.
lv_error = abap_true.
ENDIF.
ENDIF.
***************************************************
CLEAR in_update_task.
CLEAR call_transaction_done.
IF lv_error EQ abap_true.
CALL FUNCTION 'L_IDOC_ERROR_SAVE'
EXPORTING
i_docnum = idoc_contrl-docnum
i_mestyp = cv_mestyp
i_lmess = ls_lmess
i_categorie = cv_wf_par_error_idocs
i_result = cv_wf_result_error
EXCEPTIONS
OTHERS = 1. "#EC CI_SUBRC
MOVE cv_wf_result_error TO workflow_result.
ELSE. "lDoc processed successfully
CALL FUNCTION 'L_IDOC_OK_SAVE'
EXPORTING
i_docnum = idoc_contrl-docnum
i_mestyp = cv_mestyp
EXCEPTIONS
OTHERS = 1. "#EC CI_SUBRC
MOVE c_wf_result_ok TO workflow_result.
ENDIF.
"Write status of IDOC
LOOP AT idoc_contrl.
CLEAR idoc_status.
"Determine and create status of IDOC
CALL FUNCTION 'L_IDOC_STATUS_CREATE'
EXPORTING
i_iheader = idoc_contrl
i_mass_processing = mass_processing
IMPORTING
o_istatus = idoc_status
EXCEPTIONS
OTHERS = 1. "#EC CI_SUBRC
IF idoc_status-status IS INITIAL.
MESSAGE e010(lk) WITH idoc_contrl-docnum RAISING others.
ENDIF.
APPEND idoc_status.
ENDLOOP.
"Define table for further workflow process.
LOOP AT idoc_contrl.
"Determine and create status of IDOC
CLEAR lt_xreturn. REFRESH lt_xreturn.
CALL FUNCTION 'L_IDOC_RETURN_CREATE'
EXPORTING
i_iheader = idoc_contrl
i_mass_processing = mass_processing
TABLES
treturn = lt_xreturn
EXCEPTIONS
OTHERS = 1. "#EC CI_SUBRC
LOOP AT lt_xreturn ASSIGNING <ls_xreturn>.
MOVE-CORRESPONDING <ls_xreturn> TO return_variables.
APPEND return_variables.
ENDLOOP.
IF sy-subrc NE 0.
MESSAGE e011(lk) WITH idoc_contrl-docnum RAISING others.
ENDIF.
ENDLOOP.
COMMIT WORK.
Dieses Wiki wird privat in Freizeit nach bestem Wissen und Gewissen gepflegt und dient primär als eigene Wissenssammlung für die tägliche Arbeit im SAP-ERP-Umfeld.
Alle dargestellten Softwareprodukte, auch in Form von Screenshots, sind Eigentum der SAP SE. Ihre Marken, vgl. Link, sind u.a.: SAP®, ABAP®, SAP Fiori®, SAP HANA®, SAP S/4HANA®, SAP S/4HANA® Cloud