How to use the BAPI_BUPA_ADDRESS_CHANGE

BAPI_BUPA_ADDRESS_CHANGE


This BAPI is used to update the address information of business partner(更新业务合作伙伴地址). The update action usually includes three actions: insert, delete, and update.(新增,删除,更新)


For example, the telephone number. At first there is only one telephone number, then you delete, update, create the number.


First is to get all the addresses. As a business partner ( bp )  can have several addresses. Function Module: BUA_BUT020_SELECT_WITH_PARTNER. The address number is stored in the table BUT020.


Second is to get the details for every address. use the function module BAPI_BUPA_ADDRESS_GETDETAIL.


Third is to compare the existing data and the updated data.

When you compare the details, you'd better sort the data by sequence number. You can create a subroutine to compare the data. As all the data structure is similar.

for example: 

SORT lt_tel BY consnumber.
SORT pt_tel BY consnumber.
FORM deal_address USING pt_addr_old  TYPE INDEX TABLE
               CHANGING pt_addr_new  TYPE INDEX TABLE
                        pt_addr_flag TYPE INDEX TABLE.
  DATA: lv_count01 LIKE sy-index,
        lv_count02 LIKE sy-index,
        lv_tabix   LIKE sy-index,
        lv_index   LIKE sy-index.

  FIELD-SYMBOLS: <fs_address01> TYPE any,
                 <fs_address02> TYPE any,
                 <fs_consnumber_v1> TYPE any,
                 <fs_consnumber_v2> TYPE any,
                 <fs_addr_flag>   TYPE any,
                 <fs_updateflag_v>  TYPE any.

*  SORT pt_addr_old BY consnumber.
*  SORT pt_addr_new BY consnumber.
  DESCRIBE TABLE pt_addr_old LINES lv_count01.
  DESCRIBE TABLE pt_addr_new LINES lv_count02.
  IF lv_count02 >= lv_count01."insert and update
    LOOP AT pt_addr_old ASSIGNING <fs_address01>."update
      lv_index = sy-tabix.
      ASSIGN COMPONENT 'CONSNUMBER' OF STRUCTURE <fs_address01> TO <fs_consnumber_v1>.
      READ TABLE pt_addr_new ASSIGNING <fs_address02> INDEX lv_index.
      ASSIGN COMPONENT 'CONSNUMBER' OF STRUCTURE <fs_address02> TO <fs_consnumber_v2>.
      <fs_consnumber_v2> = <fs_consnumber_v1>.
*      append <fs_addr_flag> to pt_addr_flag.
      APPEND INITIAL LINE TO pt_addr_flag ASSIGNING <fs_addr_flag>.
      DO.
        ASSIGN COMPONENT sy-index OF STRUCTURE <fs_addr_flag> TO <fs_updateflag_v>.
        IF sy-subrc = AND <fs_updateflag_v> IS ASSIGNED.
          <fs_updateflag_v> = abap_true.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      ASSIGN COMPONENT 'UPDATEFLAG' OF STRUCTURE <fs_addr_flag> TO <fs_updateflag_v>.
      <fs_updateflag_v> = 'U'.
    ENDLOOP.

    LOOP AT pt_addr_new ASSIGNING <fs_address02> FROM ( lv_index + )."insert
      ASSIGN COMPONENT 'CONSNUMBER' OF STRUCTURE <fs_address02> TO <fs_consnumber_v2>.
      lv_tabix = lv_tabix + 1.
      IF <fs_consnumber_v1> IS ASSIGNED.
        <fs_consnumber_v2> = <fs_consnumber_v1> + lv_tabix.
      ENDIF.

      APPEND INITIAL LINE TO pt_addr_flag ASSIGNING <fs_addr_flag>.
      DO.
        ASSIGN COMPONENT sy-index OF STRUCTURE <fs_addr_flag> TO <fs_updateflag_v>.
        IF sy-subrc = AND <fs_updateflag_v> IS ASSIGNED.
          <fs_updateflag_v> = abap_true.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      ASSIGN COMPONENT 'UPDATEFLAG' OF STRUCTURE <fs_addr_flag> TO <fs_updateflag_v>.
      <fs_updateflag_v> = 'I'.
    ENDLOOP.
    CLEAR: lv_index.
  ELSEIF lv_count02 < lv_count01."delete and update
    LOOP AT pt_addr_new ASSIGNING <fs_address02>."update
      lv_index = sy-tabix.
      ASSIGN COMPONENT 'CONSNUMBER' OF STRUCTURE <fs_address02> TO <fs_consnumber_v2>.
      READ TABLE pt_addr_old ASSIGNING <fs_address01> INDEX lv_index.
      ASSIGN COMPONENT 'CONSNUMBER' OF STRUCTURE <fs_address01> TO <fs_consnumber_v1>.
      <fs_consnumber_v2> = <fs_consnumber_v1>.
      APPEND INITIAL LINE TO pt_addr_flag ASSIGNING <fs_addr_flag>.
      DO.
        ASSIGN COMPONENT sy-index OF STRUCTURE <fs_addr_flag> TO <fs_updateflag_v>.
        IF sy-subrc = AND <fs_updateflag_v> IS ASSIGNED.
          <fs_updateflag_v> = abap_true.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      ASSIGN COMPONENT 'UPDATEFLAG' OF STRUCTURE <fs_addr_flag> TO <fs_updateflag_v>.
      <fs_updateflag_v> = 'U'.
    ENDLOOP.

    LOOP AT pt_addr_old ASSIGNING <fs_address01> FROM ( lv_index + )."delete
      APPEND <fs_address01> TO pt_addr_new.

      APPEND INITIAL LINE TO pt_addr_flag ASSIGNING <fs_addr_flag>.
      DO.
        ASSIGN COMPONENT sy-index OF STRUCTURE <fs_addr_flag> TO <fs_updateflag_v>.
        IF sy-subrc = AND <fs_updateflag_v> IS ASSIGNED.
          <fs_updateflag_v> = abap_true.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      ASSIGN COMPONENT 'UPDATEFLAG' OF STRUCTURE <fs_addr_flag> TO <fs_updateflag_v>.
      <fs_updateflag_v> = 'D'.
    ENDLOOP.
  ENDIF.
  CLEAR: lv_tabix, lv_index.

ENDFORM.                    "deal_address


注意每个动作的flag不同:update - U, delete - D, insert - I.

而且要保证sequence number 相同。

关于usage的表,处理方式不太相同,可以另写代码处理。

  DESCRIBE TABLE lt_use LINES lv_count01.
  DESCRIBE TABLE pt_use LINES lv_count02.
  IF lv_count02 >= lv_count01."insert and update
    DO lv_count01 TIMES.
*      ls_aduse_x-updateflag = 'U'.
      APPEND ls_aduse_x TO pt_aduse_x.
    ENDDO.

    DO ( lv_count02 - lv_count01 ) TIMES.
      ls_aduse_x-updateflag = 'I'.
      APPEND ls_aduse_x TO pt_aduse_x.
    ENDDO.
  ELSEIF lv_count02 < lv_count01."delete and update
    DO lv_count02 TIMES.
*      ls_aduse_x-updateflag = 'U'.
      APPEND ls_aduse_x TO pt_aduse_x.
    ENDDO.

    DO ( lv_count01 - lv_count02 ) TIMES.
      ls_aduse_x-updateflag = 'D'.
      APPEND ls_aduse_x TO pt_aduse_x.
    ENDDO.
  ENDIF.

After the compare, you can call the function BAPI_BUPA_ADDRESS_CHANGE to update the data.

If there is no error, you can call the function BAPI_TRANSACTION_COMMIT to modify the database.

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用BAPI_ROUTING_CHANGE进行SAP工艺路线的修改,需要按照以下步骤进行: 1. 准备数据:需要准备工艺路线的版本号、工厂代码、物料号等必要的信息,同时需要准备修改参数的数据。修改参数需要按照BAPI_ROUTING_CHANGE的输入参数格式进行组织。 2. 调用BAPI_ROUTING_CHANGE:使用SAP的RFC函数模块来调用BAPI_ROUTING_CHANGE,将准备好的数据作为输入参数传递给BAPI_ROUTING_CHANGE。BAPI_ROUTING_CHANGE会根据输入参数来修改工艺路线。 3. 处理返回值:BAPI_ROUTING_CHANGE会返回修改后的工艺路线的版本号等信息,需要对返回值进行处理,判断是否修改成功。 以下是一个简单的示例代码,用于使用BAPI_ROUTING_CHANGE修改SAP工艺路线: ``` DATA: lt_routing TYPE STANDARD TABLE OF bapi_routing_operation, ls_routing LIKE LINE OF lt_routing. * 准备工艺路线数据 ls_routing-operation = '0010'. ls_routing-work_center = 'WC001'. ls_routing-component = 'MAT001'. ls_routing.component_qty = '1.0'. APPEND ls_routing TO lt_routing. * 准备修改参数 DATA: lt_change TYPE STANDARD TABLE OF bapi_routing_change, ls_change LIKE LINE OF lt_change. ls_change-operation = '0010'. ls_change-change_flag = 'U'. ls_change-operation_longtext = '这是一条测试的长文本。'. APPEND ls_change TO lt_change. * 调用BAPI_ROUTING_CHANGE CALL FUNCTION 'BAPI_ROUTING_CHANGE' EXPORTING routing_header = ls_routing_header client = sy-mandt TABLES routing_operation = lt_routing change_operation = lt_change EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ``` 在这个示例代码中,我们首先准备了工艺路线的数据,然后准备修改参数,最后调用BAPI_ROUTING_CHANGE进行修改。请注意,在实际使用中,需要根据具体情况对代码进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值