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

Aus SAP Wiki ツ


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.


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