IDOC的处理函数IDOC_INPUT_ORDERS的增强点的分析

来源:互联网 发布:lte中mr优化案例 编辑:程序博客网 时间:2024/06/14 13:46

sap系统会根据we20的配置读取,读取IDOC的处理函数IDOC_INPUT_ORDERS,( Basic type:ORDERS05:Purchasing/Sales)

在IDOC_INPUT_ORDERS的函数中共有以下几个增强点:

1、每个段数据读取时的增强,对应出口函数是EXIT_SAPLVEDA_001 / ZXVEDU03,可用于填写特殊数据和数据的转换,这是我们经常会用到的增强点;

2、SD EDI: Incoming Orders: Create Customer Number/Sales Area;对应函数:EXIT_SAPLVEDA_007  /ZXVEDU14

3、SD EDI Incoming Orders: Changing Internal Table Configurable Materials,对应函数:EXIT_SAPLVEDA_012  /ZXVEDU09

4、SD EDI Incoming Orders: Manipulation of Error Tables in Processing,对应函数:EXIT_SAPLVEDA_008  /ZXVEDU10

5、SD EDI Incoming Orders: Final Processing of Internal Error Tables,对应函数:EXIT_SAPLVEDA_011  /ZXVEDU13

6、SD EDI Incoming Orders: Manipulation of Status Table,对应函数:EXIT_SAPLVEDA_010  /ZXVEDU12

7、SD EDI Incoming Orders: Additional Sales Activities Call Transaction VA01,对应函数:EXIT_SAPLVEDA_003  /ZXVEDU05

8、SD EDI Incoming Orders: Final Sales Activities per Sales Order,对应函数:EXIT_SAPLVEDA_004  /ZXVEDU06

9、SD EDI Incoming Orders: Final Sales Activities (Mass Processing),对应函数:EXIT_SAPLVEDA_005  /ZXVEDU07


FUNCTION idoc_input_orders.
*"----------------------------------------------------------------------
*"*"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
*"     VALUE(DOCUMENT_NUMBER) LIKE  VBAK-VBELN
*"  TABLES
*"      IDOC_CONTRL STRUCTURE  EDIDC
*"      IDOC_DATA STRUCTURE  EDIDD
*"      IDOC_STATUS STRUCTURE  BDIDOCSTAT
*"      RETURN_VARIABLES STRUCTURE  BDWFRETVAR
*"      SERIALIZATION_INFO STRUCTURE  BDI_SER
*"      EDI_TEXT STRUCTURE  EDIORDTXT1 OPTIONAL
*"      EDI_TEXT_LINES STRUCTURE  EDIORDTXT2 OPTIONAL
*"----------------------------------------------------------------------
ENHANCEMENT-POINT IDOC_INPUT_ORDERS_G1 SPOTS ES_SAPLVEDA.
*$*$-Start: IDOC_INPUT_ORDERS_G1----------------------------------------------------------------$*$*
ENHANCEMENT 1  MGV_GENERATED_SAPLVEDA.    "active version
*{ALE Begin} generation http://intranet.sap.com/materialversion
 CALL FUNCTION 'MGV_ALE_ADD_INTERNAL_MATNR'
      TABLES
           idoc_data       idoc_data
           idoc_contrl     idoc_contrl
      EXCEPTIONS
           NUMBER_MISMATCH 1
           OTHERS          2.
*{ALE End} generation
ENDENHANCEMENT.
*$*$-End:   IDOC_INPUT_ORDERS_G1----------------------------------------------------------------$*$*

* initialize incoterms_versions_switch base on business switch
  PERFORM incoterms_ver_switch_check.

  LOOP AT idoc_contrl.
* SET/GET Parameter und interne Tabellen neu initialisieren
* initialize SET/GET Parameter and internal tables
    PERFORM initialize_organizational_data.
* IDOC-Segmente in die entsprechenden Anwendungsdaten übernehmen
* Move IDOC to internal tables
    PERFORM interpret_idoc_orders.  "第一个增强点
* Prüfen ob gewisse Segmente gefüllt sind
* check IDOC-Segments
    PERFORM check_idoc_segments.   
* Prüfen und Ermitteln von Organisationsdaten
* check internal tables and determine organization data
    PERFORM check_idoc_orders   "第二个增强点
* Prüfen und Ermitteln von Konfigurationsdaten
* check internal tables and determine configuration order data
    PERFORM check_configuration.  "第三个增强点
* ermitteln Partner für Auftrag
* determine partner
    PERFORM determine_partner.
* ermitteln Positionstyp
* determine item type
    PERFORM determine_postyp.
* ermitteln Texte
* determine texts
    PERFORM check_text.
* exportieren Posguid ins globale Memory
* export posguid to global memory
    PERFORM check_posguid.
* vergleichen errtab mit Ausnahmetabelle WFMCMSGENQ
* compare ERRTAB with message table WFMCMSGENQ
    PERFORM errorhandling TABLES errtab.  "第四个增强点
* abschliessendes Bearbeiten der internen Fehlertabelle.
* final coding to change the internal ERRTAB
    CALL CUSTOMER-FUNCTION '011'          "第五个增强点
         EXPORTING
              dxvbak  xvbak
              docnum  idoc_contrl-docnum
         TABLES
              derrtab errtab
              dxvbap  xvbap
              dxvbep  xvbep
              dxvbadr xvbadr
              dxvbpa  xvbpa
              dxvbuv  xvbuv
              dedidc  idoc_contrl
              dedidd  idoc_data
              dxkomv  xkomv
              dxvekp  xvekp
              dyvekp  yvekp.
    DESCRIBE TABLE errtab LINES anzahl.

    IF anzahl GT AND input_method 'X'.
      EXPORT errtab TO MEMORY ID 'idoc_test_errtab'.
    ENDIF.

    IF anzahl GT  0  AND
       xaprau EQ 'D'.
* Bei der Anlage von Auslieferungsaufträgen dienen Meldungen bzgl.
* Lieferplänen mit Absagegrund nur der Information: Sie dürfen
* nicht zum Abbruch der IDoc-Verarbeitung führen.
*                When creating delivery orders messages regarding
* scheduling agreement with 'reason for rejection' are only for
* information: They must not force the idoc integration to fail.
      LOOP AT errtab WHERE arbgb EQ 'VG' AND
                           msgnr EQ '219'.
        anzahl anzahl 1.
      ENDLOOP.
      IF anzahl EQ 0.
        REFRESH errtab.
      ENDIF.
    ENDIF.
    IF anzahl NE 0
     AND input_method IS INITIAL.
      PERFORM determine_user.
      PERFORM statusrecord TABLES errtab.
* Userexit zum Ändern der Statustabelle
* User exit to change the status table
      CALL CUSTOMER-FUNCTION '010'          "第6个增强点
           EXPORTING
                docnum      idoc_contrl-docnum
           TABLES
                derrtab     errtab
                xbdidocstat idoc_status.
    ELSE.
      IF check_orga IS INITIAL.

* EDI Kennzeichen für Sonderprüfungen innerhalb anderer Anwendungen als
* Folge der Auftragsbearbeitung.
* EDI checkmark for other applications processed during order creation.
        PERFORM edi_mode_to_mem.
************************************************************************
* Aufruf Transaktion Auftragerfassung VA01                             *
* call transaction Order Entry VA01                                    *
************************************************************************
ENHANCEMENT-POINT SAPLVEDA_A9 SPOTS ES_SAPLVEDA .
        CASE xaprau.
          WHEN ' '.
            PERFORM call_va01_new_orders USING ok.
          WHEN 'Q'.
* Aufruf Transaktion Auftragerfassung VA01 mit Bezug auf Angebot
* call transaction Order Entry VA01 with refer to quote number.
            PERFORM call_va01_new_orders_angbt USING ok.
          WHEN 'C'.
* Aufruf Transaktion Auftragerfassung VA01 mit Bezug auf Kontrakt
* call transaction Order Entry VA01 with refer to contract number
            PERFORM call_va01_new_orders_contk USING ok.
          WHEN 'L'.
* Aufruf Transaktion Auftragerfassung für Auftragsarten mit Vertiebs-
* belegtypen D,G,K,L
* call transaction Order Entry VA01 for order types with
* SD document category D,G,K,L
            PERFORM call_va01_new_orders_cremo USING ok.
          WHEN 'R'.
* Aufruf Transaktion Auftragerfassung für Auftragsarten mit Vertiebs-
* belegtypen H (z.B. Konsigantionsretoure)
* call transaction Order Entry VA01 for order types with
* SD document category H (for example consingment return)
            PERFORM call_va01_new_orders_return USING ok.
          WHEN 'D'.
* Aufruf Transaktion Auftragerfassung für Auslieferungsauftrag
* call transaction Order Entry VA01 for delivery order
            PERFORM call_va01_new_orders_delord USING ok.
          WHEN 'K'.
* Aufruf Transaktion Auftragerfassung für Anlegen mit Bezug auf
* Positionsebene (Anlegen mit Bezug zum Angebot/Kontrakt)
* call transaction Order Entry VA01 for delivery order
            PERFORM call_va01_new_orders_refer USING ok.
        ENDCASE.
* Zusätzliche Aktionen nach call transaction VA01
* additional checks after call transaction VA01
        CALL CUSTOMER-FUNCTION '003'             "第7个增强点
          EXPORTING
            sales_document belegnummer
            docnum         idoc_contrl-docnum
          TABLES
            didoc_data      idoc_data
            dbdcmsgcoll     xbdcmsgcoll
          CHANGING
            status         ok.

* Löschen des EDI-Kennzeichens im Memory / delete EDI-checkmark from
* memory
        PERFORM edi_mode_delete_mem.

      ENDIF.

* füllen IDOC_Status
* fill IDOC_Status
      IF ok space.
        idoc_status-docnum idoc_contrl-docnum.
        idoc_status-status beleg_nicht_gebucht.
        IF check_orga 'X'.
          idoc_status-msgty  'E'.
          idoc_status-msgid  'VG'.
          idoc_status-msgno  '204'.
          idoc_status-msgv1  xvbak-kunnr.
          idoc_status-msgv2  lieferant.
          APPEND idoc_status.
        ELSE.
          idoc_status-msgty  sy-msgty.
          idoc_status-msgid  sy-msgid.
          idoc_status-msgno  sy-msgno.
          idoc_status-msgv1  msgv1.
          idoc_status-msgv2  msgv2.
          idoc_status-msgv3  msgv3.
          idoc_status-msgv4  msgv4.
          APPEND idoc_status.
        ENDIF.
      ELSE.
        call_transaction_done 'X'.

*- Übergabe  BUS für Verknüpfungssätze --------------------------------*
*- set object type for the link ---------------------------------------*
*       if not object_type is initial.
*        return_variables-doc_number = object_type.
*        append return_variables.
*       endif.
*- Wenn Texte geschrieben werden muss nochmals ein Commit abgesetzt ---*
*- werden. Das Hilfsfeld CALL-TRANSACTION_DONE bewirkt, dass dieser ---*
*- Commit nicht von der ALE-Schicht abgesetzt wird, da der Commit von -*
*- Transaktion abgesetzt wurde ----------------------------------------*
        IF xe1edkt2 NE space OR
           xe1edpt2 NE space.
          COMMIT WORK.
        ENDIF.
* Belegnummer in die Schnittstelle zurückgeben für Textworkflow
* send document number back for textworkflow
        document_number belegnummer.
      ENDIF.
      CLEAR msgv1.
      CLEAR msgv2.
      CLEAR msgv3.
      CLEAR msgv4.
    ENDIF.

* setzen Workflow Ausgangsparameter
* Allocate IDOC numbers to Workflow output parameters
    IF ok space.
      return_variables-wf_param eid.
      return_variables-doc_number idoc_contrl-docnum.
      APPEND return_variables.
      workflow_result c_wf_result_error.
    ENDIF.
* Abschließende Aktionen pro Auftrag
* final checks per order
    CALL CUSTOMER-FUNCTION '004'           "第8个增强点
      EXPORTING
        sales_document belegnummer
        docnum         idoc_contrl-docnum
      TABLES
        didoc_data      idoc_data
        didoc_status    idoc_status
        didoc_cntrl     idoc_contrl.

  ENDLOOP.                             "End loop at idoc_contrl.

*- Clear auf APPLICATION_VARIABLE - nur für Auslieferungsaufträge -----*
*- Clear APPLICATION_VARIABLE  - only for delivery-orders -------------*
  PERFORM clear_appl_variable.
*-potentiellen Mailempfänger ermitteln - nur für Auslieferungsaufträge *
*- determine mail receiver - only for delivery-orders -----------------*
  PERFORM determine_mail_receiver.

* Abschließende Aktionen (Massenverarbeitung)
* final checks (mass processing)
  CALL CUSTOMER-FUNCTION '005'            "第9个增强点
    TABLES
      didoc_data        idoc_data
      didoc_status      idoc_status
      didoc_cntrl       idoc_contrl
      dreturn_variables return_variables.

ENDFUNCTION.



0 0
原创粉丝点击