adesso business consulting Stellenangebote
Software Engineer Trainee · Senior
| (Senior) Cloud Software Engineer BTP
| (Senior) Consultant Technologie
Werkstudent Softwareentwicklung · Fiori / UI5 · Consulting
Muster für ZIDoc EingangsverarbeitungsFuBa: Unterschied zwischen den Versionen
Aus SAP Wiki ツ
Keine Bearbeitungszusammenfassung |
|||
Zeile 129: | Zeile 129: | ||
ENDLOOP. | ENDLOOP. | ||
COMMIT WORK. | COMMIT WORK. | ||
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_bapiret2 TYPE bapiret2, | |||
ls_edidd TYPE edidd, | |||
ls_edid4 TYPE edid4, | |||
lt_edid4 TYPE tab_edidd, | |||
lv_error_occurend TYPE char1, | |||
lv_docnum TYPE edid4-docnum, | |||
lv_sndprn TYPE edidc-sndprn, | |||
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. | |||
CONSTANTS: lc_status_51_failed TYPE edidc-status VALUE '51', | |||
lc_status_53_successful TYPE edidc-status VALUE '53'. | |||
LOOP AT idoc_contrl. | |||
lv_docnum = idoc_contrl-docnum. | |||
lv_sndprn = idoc_contrl-sndprn. | |||
LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum. | |||
ENDLOOP. | |||
IF lv_error_occurend = abap_true. "Error | |||
idoc_status-docnum = idoc_contrl-docnum. | |||
idoc_status-status = lc_status_51_failed. | |||
idoc_status-msgty = 'E'. | |||
idoc_status-msgid = 'ZABC'. | |||
idoc_status-msgno = '004'. | |||
idoc_status-msgv1 = ls_bapiret2-message_v1. | |||
idoc_status-msgv2 = ls_bapiret2-message_v2. | |||
idoc_status-msgv3 = ls_bapiret2-message_v3. | |||
idoc_status-msgv4 = ls_bapiret2-message_v4. | |||
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 = 'ZABC'. | |||
idoc_status-msgno = '012'. | |||
idoc_status-repid = sy-repid. | |||
idoc_status-msgv1 = ''. | |||
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. | |||
ENDFUNCTION. |
Version vom 31. August 2021, 12:37 Uhr
Kopie eines Standard FuBas
Kopie von "idoc_input_fidcc2" und dann Anpassung wie unten beschrieben.
Parameters
"Globale Schnittstelle: " IMPORTING " VALUE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD " VALUE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC " EXPORTING " VALUE(WORKFLOW_RESULT) LIKE BDWFAP_PAR-RESULT " VALUE(APPLICATION_VARIABLE) LIKE BDWFAP_PAR-APPL_VAR " VALUE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK " VALUE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS " TABLES " IDOC_CONTRL STRUCTURE EDIDC " IDOC_DATA STRUCTURE EDIDD " IDOC_STATUS STRUCTURE BDIDOCSTAT " RETURN_VARIABLES STRUCTURE BDWFRETVAR " SERIALIZATION_INFO STRUCTURE BDI_SER " EXCEPTIONS " WRONG_FUNCTION_CALLED " OTHERS
Codeschnipsel
INCLUDE mbdconwf. DATA: cv_mestyp TYPE edidc-mestyp VALUE 'ZGGL_PAYMENTS', 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 'ZGGL_PAYMENTS'. 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.
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_bapiret2 TYPE bapiret2, ls_edidd TYPE edidd, ls_edid4 TYPE edid4, lt_edid4 TYPE tab_edidd, lv_error_occurend TYPE char1, lv_docnum TYPE edid4-docnum, lv_sndprn TYPE edidc-sndprn, 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.
CONSTANTS: lc_status_51_failed TYPE edidc-status VALUE '51', lc_status_53_successful TYPE edidc-status VALUE '53'.
LOOP AT idoc_contrl. lv_docnum = idoc_contrl-docnum. lv_sndprn = idoc_contrl-sndprn.
LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum.
ENDLOOP.
IF lv_error_occurend = abap_true. "Error idoc_status-docnum = idoc_contrl-docnum. idoc_status-status = lc_status_51_failed. idoc_status-msgty = 'E'. idoc_status-msgid = 'ZABC'. idoc_status-msgno = '004'. idoc_status-msgv1 = ls_bapiret2-message_v1. idoc_status-msgv2 = ls_bapiret2-message_v2. idoc_status-msgv3 = ls_bapiret2-message_v3. idoc_status-msgv4 = ls_bapiret2-message_v4. 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 = 'ZABC'. idoc_status-msgno = '012'. idoc_status-repid = sy-repid. idoc_status-msgv1 = . 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.
ENDFUNCTION.