Advertising:

Step-by-step for creating custom IDoc

From SAP Knowledge Base
Revision as of 00:37, 24 December 2024 by Unirab (talk | contribs) (Created page with "category: IDoc == Schritt-für-Schritt Anleitung == * WE31 - Create segment ==== Don't forget to release the latest version. ==== WE30 - Create basic type ==== Don't forget to release the base type. ==== WE81 - Create message type ==== ==== WE82 - Assign basis type to message type ==== ==== SE80 - Funktionsgruppe erstellen ==== ==== SE37 - Create custom IDoc processing function module ==== <div class="toccolours mw-collapsible mw-collapsed">Code snippet <di...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


Schritt-für-Schritt Anleitung

  • WE31 - Create segment ====

Don't forget to release the latest version.

WE30 - Create basic type

Don't forget to release the base type.

WE81 - Create message type

WE82 - Assign basis type to message type

SE80 - Funktionsgruppe erstellen

SE37 - Create custom IDoc processing function module

Code snippet
  DATA: eid            TYPE bdwfretvar-wf_param VALUE 'Error_IDOCs',
        pid            TYPE bdwfretvar-wf_param VALUE 'Processed_IDOCs',
        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',
        xyz_struc_seg   TYPE xyz_seg_structure,
        error_occurend TYPE char1,
        msgv1          TYPE edids-stapa1,
        msgv2          TYPE edids-stapa2,
        msgv3          TYPE edids-stapa3,
        msgv4          TYPE edids-stapa4,
        message        TYPE bapiret2-message,
        error_log      TYPE bal_t_msg.

  CONSTANTS: status_51_failed     TYPE edidc-status VALUE '51',
             status_53_successful TYPE edidc-status VALUE '53',
             segnam_xyz TYPE String VALUE 'XYZ',
             mestyp_xyz  TYPE String VALUE 'XYZ'.

  IF idoc_contrl-mestyp <> mestyp_xyz.
    RAISE wrong_function_called.
  ENDIF.

  LOOP AT idoc_contrl.
    error_occurend = ''.

    TRY.
* Have a look for ZCL_BAL here: https://wiki.m1ch3l.de/ZCL_BAL
        DATA(bal) = NEW zcl_bal(
          object    = zcl_bal=>cs_object-idoc
          subobject = zcl_bal=>cs_subobject-idoc_xyz
          extnumber = |IDoc_{ idoc_contrl-mestyp }_{ idoc_contrl-docnum }|
        ).
      CATCH zcx_basic INTO DATA(zcx_basic).
        RAISE bal_creating_failed.
    ENDTRY.

    LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum.

      CASE idoc_data-segnam.

        WHEN segnam_xyz.

      ENDCASE.

    ENDLOOP.

    IF error_occurend = abap_true. "Error

      IF lines( bal->get_all_msgs_bapiret2( ) ) > 0.
       bal->store_and_free( ).
      ENDIF.

      idoc_status-docnum = idoc_contrl-docnum.
      idoc_status-status = 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 = 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   = eid.
      return_variables-doc_number = idoc_contrl-docnum.
      APPEND return_variables.
    ELSE.
      workflow_result             = c_wf_result_ok.
      return_variables-wf_param   = pid.
      return_variables-doc_number = idoc_contrl-docnum.
      APPEND return_variables.
      return_variables-wf_param   = apo.
      return_variables-doc_number = idoc_contrl-docnum.
      APPEND return_variables.
    ENDIF.
  ENDLOOP.

WE57 - Nachrichtentyp zu FuBa zuordnen

Hinweis: SAP weist darauf hin, dass es evtl. nicht transportiert wird. Sollte man in jedem System prüfen.

BD51 - Eintrag für Z FuBa erstellen

WE41/42 - Vorgangscode erstellen

Wenn das AusgangsIDoc z.B. nicht über die Nachrichtensteuerung mit einem Vorgangscode im Ausgang(hinter diesem einem Funktionsbaustein steckt) erstellt wird, dann ist das AusgangsIDoc selber zu erzeugen.

Hier könnte die Z-Klasse "ZCL_IDOC_UTILITIES" direkt verwendet oder sich am Code orientiert werden. Wesentlich wird für die Erstellung der Fuba "MASTER_IDOC_DISTRIBUTE" verwendet.

BD54 - Logisches System erstellen

SM59 - Konfiguaration der RFC-Verbindung

WE20 - Partnervereinbarung


This is a wiki created in the spare time of a private person working in the SAP ERP area. The aim is to collect knowledge for the own use. The wiki is maintained to the best of knowledge and belief.
All products shown, including in form of screenshots, belong to SAP SE. Their trademarks are, among others: SAP®,ABAP®,SAP Fiori®,SAP HANA®,SAP NetWeaver®,SAP® R/3®,SAP S/4HANA®,SAP S/4HANA® Cloud