S4 HANA BP-客商共用编码处理(示例:已存在的供应商编码扩展客户数据)详解编程语言

BP经常遇到 客户和供应商使用相同编码情况,以已存在的供应商编码扩展客户数据为例

   DATA: CS_BPDATA TYPE CVIS_EI_EXTERN. 
 
    cs_bpdata-partner-header-object_instance-bpartner = is_data-partner. 
 
    cs_bpdata-partner-header-object_task   = 'M'. 
 
    SELECT SINGLE * 
      INTO @DATA(ls_but000) 
      FROM but000 
      WHERE partner = @is_data-partner. 
    IF sy-subrc NE 0 . 
      ls_but000-partner_guid = cl_system_uuid=>create_uuid_x16_static( ). 
    ENDIF. 
 
    cs_bpdata-partner-header-object_instance-bpartnerguid = ls_but000-partner_guid. 
 
    cs_bpdata-customer-header-object_instance-kunnr = is_data-partner. 
 
    SELECT COUNT(*) 
      FROM kna1 
      WHERE kunnr = is_data-partner. 
    IF sy-subrc NE 0. 
      cs_bpdata-customer-header-object_task = 'I'. 
      cs_bpdata-ensure_create-create_customer = 'X'. 
    ELSE. 
      cs_bpdata-customer-header-object_task = 'U'. 
    ENDIF. 
 
 
"扩展客户角色 
    "检查角色是否已经存在 
    SELECT COUNT(*) 
      FROM but100 
      WHERE partner = is_data-partner 
      AND   rltyp   = cn_role_flcu00. 
    IF sy-subrc NE 0. 
      CLEAR ls_role. 
      ls_role-task            = 'I'. 
      ls_role-data_key        = 'FLCU00'. 
      ls_role-data-valid_from = sy-datum. 
      ls_role-data-valid_to   = '99991231'. 
      APPEND ls_role TO cs_bpdata-partner-central_data-role-roles. 
    ENDIF. 
 
    SELECT COUNT(*) 
      FROM but100 
      WHERE partner = is_data-partner 
      AND   rltyp   = cn_role_flcu01. 
    IF sy-subrc NE 0. 
      CLEAR ls_role. 
      ls_role-task            = 'I'. 
      ls_role-data_key        = 'FLCU01'. 
      ls_role-data-valid_from = sy-datum. 
      ls_role-data-valid_to   = '99991231'. 
      APPEND ls_role TO cs_bpdata-partner-central_data-role-roles. 
    ENDIF. 
 
 
 
    "CALL BP CLASS 
 
    DATA: lt_msgmap  TYPE mdg_bs_bp_msgmap_t, 
          ls_output  TYPE zmddt_vender_rsp_ztable_return, 
          lt_bpdata  TYPE STANDARD TABLE OF cvis_ei_extern, 
          lt_bpret   TYPE bapiretm, 
          lv_message TYPE string. 
 
    APPEND is_bpdata TO lt_bpdata. 
    CALL METHOD cl_md_bp_maintain=>maintain 
      EXPORTING 
        i_data   = lt_bpdata 
      IMPORTING 
        e_return = lt_bpret. 
 
    CLEAR: lv_message. 
    LOOP AT lt_bpret INTO DATA(ls_bpret). 
      LOOP AT ls_bpret-object_msg INTO DATA(ls_msg) WHERE type CA 'AEX'. 
        lv_message = COND #( WHEN lv_message IS INITIAL THEN ls_msg-message 
                             ELSE |{ lv_message }/{ ls_msg-message }| ). 
      ENDLOOP. 
    ENDLOOP. 
 
 
 

根据KNA1中是否存在编码对应的值,确定对参数赋值

 cs_bpdata-customer-header-object_task = ‘I’.
 cs_bpdata-ensure_create-create_customer = ‘X’.

根据but100中是否存在编码对应的角色,确定是否创建角色

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17899.html

(0)
上一篇 2021年7月19日 20:36
下一篇 2021年7月19日 20:36

相关推荐

发表回复

登录后才能评论