adesso business consulting Stellenangebote
Software Engineer Trainee · Senior
| (Senior) Cloud Software Engineer BTP | Senior Frontend Software Engineer SAP BTP
| (Senior) Consultant Technologie
Werkstudent Softwareentwicklung · 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, 11: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.