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.



IDOC的处理函数IDOC_INPUT_ORDERS的增强点的分析相关推荐

  1. C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)

    2019独角兽企业重金招聘Python工程师标准>>> C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) 首先,让我们来看看以&方式进行变量捕获,同样没有参 ...

  2. 【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | Class.cpp#findClassNoInit 函数 | DexFile.cpp#dexFindClass 函数分析 )

    文章目录 前言 一.Class.cpp#dvmDefineClass 函数分析 二.Class.cpp#findClassNoInit 函数分析 三.DexFile.cpp#dexFindClass ...

  3. 【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | native 函数查询 | dalvik_system_DexFile.cpp#defineClassNative 函数 )

    文章目录 前言 一.查询 defineClassNative 函数 二.dalvik_system_DexFile.cpp#Dalvik_dalvik_system_DexFile_defineCla ...

  4. 【Android 逆向】Dalvik 函数抽取加壳 ( 类加载流程分析 | DexPathList#findClass 函数分析 | DexFile#loadClassBinaryName 函数 )

    文章目录 前言 一.DexPathList.java#findClass 类加载函数源码分析 二.DexFile.java#loadClassBinaryName 函数源码分析 前言 上一篇博客 [A ...

  5. python基于pingouin包进行统计分析:使用pairwise_tukey函数执行Tukey检验进行事后分析(Pairwise Tukey post-hocs)

    python基于pingouin包进行统计分析:使用pairwise_tukey函数执行Tukey检验进行事后分析(Pairwise Tukey post-hocs) 目录

  6. OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析

    OpenCV这么简单为啥不学--1.12.使用ssim函数对两张照片进行相似度分析 目录 OpenCV这么简单为啥不学--1.12.使用ssim函数对两张照片进行相似度分析 前言 ssim函数 图像相 ...

  7. R语言使用OptimalCutpoints包的optimal.cutpoints函数对单变量进行ROC分析、计算约登值、寻找最佳阈值、使用plot函数可视化ROC曲线、PROC曲线并在曲线中添加最佳阈

    R语言使用OptimalCutpoints包的optimal.cutpoints函数对单变量进行ROC分析.计算约登值.寻找最佳阈值(threshold.cutoff).使用plot函数可视化ROC曲 ...

  8. 关于onscroll函数兼容各浏览器的方法分析

    关于window.onscroll函数兼容各浏览器的方法分析 1.当前文档的渲染模式是决定onscroll函数兼容性根本原因 目前浏览器的排版引擎有三种模式:怪异模式(Quirks mode).接近标 ...

  9. VL31N创建内向交货函数GN_DELIVERY_CREATE及增强字段

    VL31N创建内向交货函数及增强字段 LIPS字段增强 结构KOMDLGN新增字段 在下面结构中新增字段,则两个都有了. 创建BADI: LE_SHP_GN_DLV_CREATE METHOD if_ ...

  10. gookit/goutil - Go一些常用的工具函数实现、增强、收集和整理

    gookit/goutil Go 常用的一些工具函数,数字,字符串,数组,Map,文件,错误,时间日期,特殊处理,格式化,常用信息获取等等 工具包 arrutil array/slice 相关操作的函 ...

最新文章

  1. 布道微服务_06微服务调用的监控
  2. 【Android】自定义环形菜单View
  3. 热点分析图_通过分析功率MOSFET管的工作特性,判断其损坏原因
  4. mysql炸包_炸裂!MySQL 82 张图带你飞
  5. Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini和my.ini文件以及服务无法启动的解决办法以及修改初始密码的方法
  6. STM32CUBEF4 实现USB 虚拟串口
  7. tcpdf中增加微软雅黑的正确方式
  8. mysql 没有三级模式两级映像_数据库三级模式/两级映像
  9. unity数组或链表需要空间很大赋值与调用
  10. 博弈论——威佐夫博弈 Wythoff Game
  11. 最新CISP模拟考试题库及答案(二)
  12. html图片轮播15个自动,15个超强的jQuery/HTML5图片轮播插件
  13. #2.生活小妙招-实现没有加速选项的视频加速操作
  14. Android 开发笔记___图像按钮__imageButton
  15. IOS应用内购买App开发完整流程
  16. 书写历史的甲骨文--ORACLE公司传奇
  17. 数风流人物,还看今朝
  18. 苹果掉出全球手机市场前三
  19. 神奇的水滴效果导航栏-BezierIndicator
  20. 计算机教师年终考核,2019小学教师年度考核个人总结

热门文章

  1. python编写安装脚本_ido-Python 安装脚本包
  2. BZOJ5294 BJOI2018 二进制 线段树
  3. 如何使用一个手机号注册两个微信号!
  4. java静态代码块,构造代码块,构造函数,mian()代码执行顺序详细分析
  5. 如何打开RAR文件?
  6. 转:echarts图表x,y轴的设置
  7. FusionCharts学习总结
  8. js中reduce()方法使用
  9. c语言水仙花数作业,c语言水仙花数(c语言水仙花数的编程)
  10. 圣经中真的藏有密码吗?