PS组件相关BAPI

一、新增组件BAPI

  DATA:lv_number                   LIKE  bapi_network_list-network,
       lv_return                   LIKE  bapiret2,
       lt_components               TYPE TABLE OF bapi_network_comp_add,
       ls_components               TYPE bapi_network_comp_add,
       lt_message_table            TYPE TABLE OF  bapi_meth_message WITH HEADER LINE,
       ls_message_table            TYPE bapi_meth_message,
       lt_activity                 TYPE TABLE OF  bapi_network_comp_act_rng WITH HEADER LINE,
       lt_components_list          TYPE TABLE OF  bapi_network_comp_list WITH HEADER LINE,
       lt_components_id            TYPE TABLE OF  bapi_network_comp_id WITH HEADER LINE,
       lt_components_detail        TYPE TABLE OF  bapi_network_comp_detail,
       ls_components_detail        TYPE bapi_network_comp_detail,
       lt_components_remove        TYPE TABLE OF  bapi_network_comp_id WITH HEADER LINE,
       lt_components_change        TYPE TABLE OF  bapi_network_comp_change WITH HEADER LINE,
       lt_components_change_update TYPE TABLE OF bapi_network_comp_cng_upd WITH HEADER LINE.

    CALL FUNCTION 'BAPI_PS_INITIALIZATION'.

    "------------------------ADD----------------------------
    LOOP AT lt_zin INTO ls_in.
      lv_number = ls_in-aufnr."网络编号

      CLEAR:ls_components.
      ls_components-activity = ls_in-vornr."活动编号
      ls_components-material = ls_in-matnr."物料编码
      ls_components-plant = ls_in-werks."工厂
      ls_components-entry_quantity = ls_in-bdmng."需求数量
*  ls_components-base_uom = ls_in-VORNR."工厂
      ls_components-req_date = ls_in-bdter."需求日期
      ls_components-cost_relevant = 'X'."与成本核算相关标识

      ls_components-item_cat = 'L'."项目类别
      CASE ls_in-zqdlx.
        WHEN 'G1'.
          ls_components-type_of_pur_resv = '7'."生成WBS元素的初步采购需求
        WHEN 'G2'.
          READ TABLE lt_marc INTO DATA(ls_marc) WITH KEY matnr = ls_in-matnr werks = ls_in-werks.
          IF ls_marc-sbdkz = '' OR ls_marc-sbdkz = '1'.
            ls_components-type_of_pur_resv = '8'."生成WBS预留
          ELSEIF ls_marc-sbdkz = '2'.
            ls_components-type_of_pur_resv = '3'."生成网络预留
          ENDIF.
        WHEN 'G3'.
          ls_components-type_of_pur_resv = '1'."网络的采购需求
          ls_components-item_cat = 'N'."项目类别
        WHEN OTHERS.
      ENDCASE.

      ls_components-mrp_relevant = '3'."预留相关性/生成采购申请(立即)
      ls_components-item_text = ls_in-zbz."长文本
      APPEND ls_components TO lt_components.

      MOVE-CORRESPONDING ls_in TO ls_out.
      APPEND ls_out TO lt_zout.
    ENDLOOP.

    CALL FUNCTION 'BAPI_NETWORK_COMP_ADD'
      EXPORTING
        number           = lv_number
      IMPORTING
        return           = lv_return
      TABLES
        i_components_add = lt_components
        e_message_table  = lt_message_table.

二、获取组件列表

    lv_number = ls_in-aufnr.

    CLEAR:lt_components_list[],lv_return.
    CALL FUNCTION 'BAPI_NETWORK_COMP_GETLIST'
      EXPORTING
        number            = lv_number
*       MAX_ROWS          = 0
      IMPORTING
        return            = lv_return
      TABLES
        i_activity_range  = lt_activity
        e_components_list = lt_components_list.

三、获取组件详细信息

   lv_number = ls_in-aufnr.
   "获取详细信息
    CLEAR:lv_return,lt_components_detail[].
    CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL'
      EXPORTING
        number              = lv_number
*       MAX_ROWS            = 0
      IMPORTING
        return              = lv_return
      TABLES
        i_activity_range    = lt_activity
        i_components_id     = lt_components_id
        e_components_detail = lt_components_detail.

四、修改组件信息

"修改组件数量
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.

lt_components_change-component = ls_list-component."详细信息BAPI获取到的组件唯一标识
lt_components_change-entry_quantity = lv_syxqsl.
lt_components_change-item_text = ls_in-zbz.
APPEND lt_components_change.

lt_components_change_update-component = ls_list-component.
lt_components_change_update-entry_quantity = 'X'.
lt_components_change_update-item_text = 'X'.
APPEND lt_components_change_update.

IF lt_components_change[] IS NOT INITIAL.
        CLEAR:lv_return,lt_message_table[].
        CALL FUNCTION 'BAPI_NETWORK_COMP_CHANGE'
          EXPORTING
            number                     = lv_number
          IMPORTING
            return                     = lv_return
          TABLES
            i_components_change        = lt_components_change
            i_components_change_update = lt_components_change_update
            e_message_table            = lt_message_table.

CLEAR:lv_message.
LOOP AT lt_message_table WHERE message_type CA 'EAX'.
   lv_check = 'E'.
   lv_message = lv_message && lt_message_table-message_text.
ENDLOOP.
ENDIF.

五、移除组件

lt_components_remove-component = ls_list-component."添加到移除内表
APPEND lt_components_remove.

IF lt_components_remove[] IS NOT INITIAL.
          CLEAR:lv_return,lt_message_table[].
          CALL FUNCTION 'BAPI_NETWORK_COMP_REMOVE'
            EXPORTING
              number              = lv_number
            IMPORTING
              return              = lv_return
            TABLES
              i_components_remove = lt_components_remove
              e_message_table     = lt_message_table.
ENDIF.

六、同时提交修改和移除BAPI,删除采购申请失败

业务场景中需要保证修改和移除操作同时成功和失败,需要同时COMMIT提交,这就会导致一下情况:

1.先修改后移除,COMMIT,修改成功,移除成功,删除组件对应的采购申请失败

2.先移除后修改,COMMIT,修改失败,移除成功,删除组件对应的采购申请成功

综合考虑,采用第一种方式,对于删除采购申请失败,则调用同步程序RLORD035,同步删除采购申请。

因为该程序修改会弹出文本界面,在接口中会导致接口中断,所以复制为ZRLORD035,将WRITE的文本全部注释,测试满足需求。

REFRESH:s_banfn.
LOOP AT lt_eban.
   s_banfn-sign = 'I'.
   s_banfn-option = 'EQ'.
   s_banfn-low = lt_eban-banfn.
   APPEND s_banfn.
 ENDLOOP.

 SUBMIT zrlord035"调用采购申请不符项,将删除数据同步到采购申请,这样采购申请就会被打上删除标识
    WITH p_reqs IN s_banfn
    WITH sim = ''
    WITH set_del = 'X'
    AND RETURN.
原文地址:https://www.cnblogs.com/BinGeneral/p/15474457.html