• 如何使用BADI修改PO (processing to ME21N )


    Requirement:

    Populate EVERS [ Shipping Point ] at the time of purchase order ceration. Shipping point should be derivated from the shipping point on sales order [ if PO created from in reference to a sales order ].


    Processing:

    This is an example to show - how to achieve post-processing [ follow-on processing ] functionality using BADIs [ Business Add-inn ] or user-exits.

    • Find the relevant BADI using transaction SE18. In this case BADI ME_PURCHDOC_POSTED is used.
    • Further, implement the BADI using transaction SE19.
    • In Attributes section of BADI, define a STATIC attribute as PO_NUMBER. Static means the attribute will keep its value between the calls. This will be checked to ensure that same PO will not be processed twice. Also these kind of user-exits and BADIs might get called recursively and get caught into an infinite loop, if not coded properly. Rememeber that this BADI is at the time of PO save and then you are again trying to change & save the Purchase Order from within the BADI.
    • BAPI to change Purchase Order 'BAPI_PO_CHANGE' will be called IN BACKGROUND TASK to ensure that it will be called when COMMIT WORK is encountered.
    • Don't forget to activate the BADI implementation in SE19.


    method IF_EX_ME_PURCHDOC_POSTED~POSTED .

    DATA: wa_ekpo like line of IM_EKPO,
          lt_po_item type standard table of BAPIMEPOITEM,
          lt_po_itemx type standard table of BAPIMEPOITEMX,
          wa_po_item type BAPIMEPOITEM,
          wa_po_itemx type BAPIMEPOITEMX,
          lt_return type standard table of BAPIRET2.


    *data: ls_ebeln type BAPIMEPOHEADER-PO_NUMBER.

    check im_ekko-ebeln ne PO_NUMBER.

    PO_NUMBER = im_ekko-ebeln.

    LOOP AT IM_EKPO into wa_ekpo.

      wa_po_item-PO_ITEM = wa_ekpo-ebelp.
    * EVERS to be derived
      wa_po_item-SHIPPING = 'C'.
      APPEND wa_po_item to lt_po_item .

      wa_po_itemx-PO_ITEM = wa_ekpo-ebelp.
      wa_po_itemx-SHIPPING = 'X'.
      APPEND wa_po_itemx to lt_po_itemx.
    ENDLOOP.

     CALL FUNCTION 'BAPI_PO_CHANGE' IN BACKGROUND TASK
       EXPORTING
         purchaseorder                = PO_NUMBER
    *    POHEADER                     =
    *    POHEADERX                    =
    *    POADDRVENDOR                 =
    *    TESTRUN                      =
    *    MEMORY_UNCOMPLETE            =
    *    MEMORY_COMPLETE              =
    *    POEXPIMPHEADER               =
    *    POEXPIMPHEADERX              =
    *    VERSIONS                     =
        NO_MESSAGING                 = 'X'
        NO_MESSAGE_REQ               = 'X'
        NO_AUTHORITY                 = 'X'
        NO_PRICE_FROM_PO             = 'X'
    *  IMPORTING
    *    EXPHEADER                    =
    *    EXPPOEXPIMPHEADER            =
       TABLES
         RETURN                       = lt_return
         POITEM                       = lt_po_item
         POITEMX                      = lt_po_itemx
    *    POADDRDELIVERY               =
    *    POSCHEDULE                   =
    *    POSCHEDULEX                  =
    *    POACCOUNT                    =
    *    POACCOUNTPROFITSEGMENT       =
    *    POACCOUNTX                   =
    *    POCONDHEADER                 =
    *    POCONDHEADERX                =
    *    POCOND                       =
    *    POCONDX                      =
    *    POLIMITS                     =
    *    POCONTRACTLIMITS             =
    *    POSERVICES                   =
    *    POSRVACCESSVALUES            =
    *    POSERVICESTEXT               =
    *    EXTENSIONIN                  =
    *    EXTENSIONOUT                 =
    *    POEXPIMPITEM                 =
    *    POEXPIMPITEMX                =
    *    POTEXTHEADER                 =
    *    POTEXTITEM                   =
    *    ALLVERSIONS                  =
    *    POPARTNER                    =
               .

    endmethod.
    来源:http://www.geocities.com/rmtiwari/main.html?http://www.geocities.com/rmtiwari/Resources/MySolutions/Dev/ABAP_nsFAQ.html

  • 相关阅读:
    从数据到代码—通过代码生成机制实现强类型编程
    .NET中oledb访问access含子查询的语句的参数置换顺序
    Android开发入门学习
    Shell脚本初步学习鸟哥Linux私房菜基础学习篇
    rpm打包学习
    关于计算机工作方向的几点想法
    source insight中文注释乱码问题的解决方案
    makefilerpm编译软件,输出依赖软件包的编译顺序
    在android中资源文件夹中添加一个新的图片资源
    Linux批量替换某种类型文件中的字符串sed和grep命令使用
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157488.html
Copyright © 2020-2023  润新知