IDOC的處理函式IDOC_INPUT_ORDERS的增強點的分析
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 0 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.
相關文章
- 處理中英文的函式函式
- JavaScript 非同步函式的 Promisification 處理JavaScript非同步函式
- main函式返回值的處理AI函式
- OnWndMsg函式的處理過程函式
- SQL中的常用的字串處理函式大全SQL字串函式
- 常用的圖象處理函式的整理 (轉)函式
- 影象處理之影象增強
- 5 個處理狀態列的函式函式
- asp 中常用的檔案處理函式函式
- mListView.setOnItemClickListener的函式失效的處理辦法。View函式
- 飄逸的python - 增強的格式化字串format函式Python字串ORM函式
- 磁碟處理函式函式
- 字元處理函式字元函式
- oracle函式大全-字串處理函式Oracle函式字串
- 豪傑選單處理函式分析和研究函式
- js在函式中未定義的變數的處理JS函式變數
- c語言是如何處理函式呼叫的?C語言函式
- javascript如何移除註冊的事件處理函式JavaScript事件函式
- js刪除註冊的事件處理函式JS事件函式
- 002——php字串中的處理函式(一)PHP字串函式
- 函式訪問引數受限的處理方法函式
- 處理PHP中字串的常用操作及函式PHP字串函式
- 故障分析 | MySQL convert 函式導致的字符集報錯處理MySql函式
- 混合事務分析處理“HTAP”的技術要點分析
- Oracle Database 19c 中的 JSON_OBJECT 函式的增強功能OracleDatabaseJSONObject函式
- 陣列處理函式陣列函式
- SqlServer——字串處理函式SQLServer字串函式
- Oracle函式-->字元處理Oracle函式字元
- 安全字串處理函式字串函式
- 檔案處理函式函式
- 時間處理函式函式
- 【封裝小技巧】列表處理函式的封裝封裝函式
- jQuery如何解綁註冊的事件處理函式jQuery事件函式
- onerror事件處理函式返回false或者true的作用Error事件函式False
- 如何為新增的元素註冊事件處理函式事件函式
- C#中Main函式後引數的處理C#AI函式
- C#中含有多個Main函式的處理C#AI函式
- 數學分析 連續函式的孤立零點函式