CRM函数CRM_ORDER_MAINTAIN封装

Posted ^ω^SAp傻X^o^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRM函数CRM_ORDER_MAINTAIN封装相关的知识,希望对你有一定的参考价值。

抬头结构:ZCRM_MAINTAIN_H

 

flag header:

 

 

项目表:ZCRM_MAINTAIN_I

 

合作伙伴:ZCRM_MAINTAIN_P

 

 

price:ZCRM_MAINTAIN_PR

 

FUNCTION zcrm_order_maintain_bk.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(HEAD) TYPE  ZCRM_MAINTAIN_H OPTIONAL
*"     VALUE(HEADX) TYPE  ZCRM_MAINTAIN_HX OPTIONAL
*"  EXPORTING
*"     REFERENCE(ERROR_TYPE) TYPE  STRING
*"     REFERENCE(ERROR_LOG) TYPE  STRING
*"     REFERENCE(OBJECT_O) TYPE  CRMT_OBJECT_ID
*"  TABLES
*"      ITEM STRUCTURE  ZCRM_MAINTAIN_I OPTIONAL
*"      ITEMX STRUCTURE  ZCRM_MAINTAIN_IX OPTIONAL
*"      PARTNER STRUCTURE  ZCRM_MAINTAIN_P OPTIONAL
*"      PARTNERX STRUCTURE  ZCRM_MAINTAIN_PX OPTIONAL
*"      PRICE STRUCTURE  ZCRM_MAINTAIN_PR OPTIONAL
*"      PRICEX STRUCTURE  ZCRM_MAINTAIN_PRX OPTIONAL
*"----------------------------------------------------------------------

  DATA : lv_text(800) TYPE c.
  DATA:
    wk_orderadm_h     TYPE crmt_orderadm_h_wrk,
    tk_orderadm_h     TYPE crmt_orderadm_h_wrkt,
    wk_schedlin       TYPE crmt_schedlin_wrk,
    tk_schedlin       TYPE crmt_schedlin_wrkt,
    wk_status         TYPE crmt_status_wrk,
    tk_status         TYPE crmt_status_wrkt,
    ls_service_os     TYPE crmt_srv_osset_com,
    lt_service_os     TYPE crmt_srv_osset_comt,
    wk_osset          TYPE crmt_srv_osset_wrk1,
    tk_osset          TYPE crmt_srv_osset_wrkt1,
    ls_text           TYPE crmt_text_com,
    lt_text           TYPE crmt_text_comt,
    ls_sales          TYPE crmt_sales_com,
    lt_sales          TYPE crmt_sales_comt,
    ls_partner        TYPE crmt_partner_com,
    lt_partner        TYPE crmt_partner_comt,
    gt_partner        TYPE crmt_partner_comt,
    ls_appointment    TYPE crmt_appointment_com,
    lt_appointment    TYPE crmt_appointment_comt,
    wk_refobject      TYPE crmt_srv_refobj_wrk,
    tk_refobject      TYPE crmt_srv_refobj_wrkt,
    wk_srv_subject    TYPE crmt_srv_subject_wrk,
    tk_srv_subject    TYPE crmt_srv_subject_wrkt,
    ls_osset          TYPE crmt_srv_osset_com1,
    lt_osset          TYPE crmt_srv_osset_comt1,
    ls_refobject      TYPE crmt_srv_refobj_com,
    lt_refobject      TYPE crmt_srv_refobj_comt,
    ls_service_h      TYPE crmt_service_h_com,
    lt_service_h      TYPE crmt_service_h_comt,
    ls_customer_h     TYPE crmt_customer_h_com,
    lt_customer_h     TYPE crmt_customer_h_comt,
    ls_service_i      TYPE crmt_service_i_com,
    lt_service_i      TYPE crmt_service_i_comt,
    ls_pricing        TYPE crmt_pricing_com,
    lt_pricing        TYPE crmt_pricing_comt,
    ls_schedlin_extdt TYPE crmt_schedlin_extd,
    lt_schedlin_extdt TYPE crmt_schedlin_extdt,
    ls_orderadm_i     TYPE crmt_orderadm_i_com,
    lt_orderadm_i     TYPE crmt_orderadm_i_comt,
    ls_product_i      TYPE crmt_product_i_com,
    lt_product_i      TYPE crmt_product_i_comt,
    ls_schedlin_i     TYPE crmt_schedlin_i_com,
    lt_schedlin_i     TYPE crmt_schedlin_i_comt,
    ls_pric_cond      TYPE prct_cond_external_input,
    lt_pric_cond      TYPE prct_cond_external_input_t,
    lt_pric_chag      TYPE prct_cond_external_change_t, "add by ly 20180124
    ls_pric_chag      TYPE prct_cond_external_change,
    ls_pridoc         TYPE crmt_pridoc_com,
    lt_pridoc         TYPE crmt_pridoc_comt.
  DATA: wk_header             TYPE  crmt_object_guid_tab.
  DATA: ls_orderadm_h TYPE crmt_orderadm_h_com,
        lt_orderadm_h TYPE crmt_orderadm_h_comt,
        vs_orderadm_h TYPE crmt_orderadm_h_com,
        vt_orderadm_h TYPE crmt_orderadm_h_comt,
        ls_doc_flow   TYPE crmt_doc_flow_com,
        lt_doc_flow   TYPE crmt_doc_flow_comt,
        ls_orgman     TYPE crmt_orgman_com,
        lt_orgman     TYPE crmt_orgman_comt,
        ls_status     TYPE crmt_status_com,
        lt_status     TYPE crmt_status_comt,
        lt_error_log  TYPE zerror_log_tab,
        ls_error_log  TYPE zerror_log.
  DATA: w_orderadm_h          TYPE crmd_orderadm_h.
  "定义全局时区,根据销售组织来判断
  DATA:gv_zonlo TYPE syst_zonlo.
  DATA:gv_date  TYPE datum,
       gv_time  TYPE uzeit,
       gv_timez TYPE comt_created_at_usr.

  DATA: l_len               TYPE i,
        l_start             TYPE i,
        l_char_tmp(130)     TYPE c,
        l_handle            TYPE crmt_handle,
        ls_ztakg_num_upload TYPE ztakg_num_upload,
        l_ref_guid(16)      TYPE c,
        l_mode              TYPE crmt_mode,
        l_partner           TYPE bu_partner.

  DATA: ls_input_field  TYPE crmt_input_field.
  DATA: lt_input_field  TYPE crmt_input_field_tab.
  DATA: gt_input_field  TYPE crmt_input_field_tab.
  DATA: lt_field_names  TYPE crmt_input_field_names_tab.
  DATA: ls_field_names  TYPE crmt_input_field_names.

  DATA: lt_exception         TYPE crmt_exception_t,
        it_objects_to_save   TYPE crmt_object_guid_tab,
        is_objects_to_save   TYPE LINE OF crmt_object_guid_tab,
        lt_saved_objects     TYPE crmt_return_objects,
        ls_saved_objects     TYPE crmt_return_objects_struc,
        lt_objects_not_saved TYPE crmt_object_guid_tab,
        ls_objects_not_saved TYPE crmt_object_guid.
  DATA: gt_ltxts TYPE STANDARD TABLE OF tline .
  DATA: lw_ltxt  TYPE tline .

  CLEAR: ls_input_field, lt_input_field,
         ls_field_names, lt_field_names.

  DATA:gt_tj30t   TYPE TABLE OF tj30t,
       gw_tj30t   LIKE LINE OF gt_tj30t,
       gw_profile TYPE crmc_proc_type,
       gw_index   TYPE zhsb_order_index,
       gw_sale    TYPE zhsb_sales_index.
  DATA: lv_productguid TYPE comt_product_guid.
  DATA: ls_hierarchy   TYPE comm_hierarchy.
  DATA: ls_prprdcatr   TYPE comm_prprdcatr.
  DATA: lt_pr_frg_rel  TYPE TABLE OF comm_pr_frg_rel.
  DATA: ls_addsettype  TYPE zaddsettype.
  DATA: lt_addsettype  TYPE TABLE OF zaddsettype.
  DATA:gw_zbp_sales TYPE zbp_sales,
       gw_item      TYPE zcrm_maintain_i,
       gv_item      TYPE zcrm_maintain_i,
       gw_itemx     TYPE zcrm_maintain_ix,
       gw_partner   TYPE zcrm_maintain_p,
       gw_partnerx  TYPE zcrm_maintain_px,
       gw_price     TYPE zcrm_maintain_pr,
       gw_pricex    TYPE zcrm_maintain_prx,
       gt_dd03l     TYPE TABLE OF dd03l,
       gw_dd03l     LIKE LINE OF gt_dd03l.
  DATA:lt_guid_init TYPE crmt_object_guid_tab,
       ls_guid_init LIKE LINE OF lt_guid_init.
  DATA:
    lv_sum_crmt_schedlin_quan TYPE crmt_schedlin_quan,
    lv_sum_prct_cond_rate     TYPE  prct_cond_rate,
    lv_zsrv_mileage_fee       TYPE flag,
    lt_zsrvt_mil_rule02       TYPE TABLE OF zsrvt_mil_rule02,
    ls_zsrvt_mil_rule02       TYPE zsrvt_mil_rule02,
    ls_zsrvt_mil_rule01       TYPE zsrvt_mil_rule01.

  "取order数据定义
  DATA:ot_header   TYPE  crmt_object_guid_tab,
       ow_header   TYPE crmt_object_guid,
       ot_order_h  TYPE crmt_orderadm_h_wrkt,
       ot_schedlin TYPE crmt_schedlin_wrkt,
       ow_schedlin TYPE crmt_schedlin_wrk,
       ot_cond     TYPE crmt_pric_cond_t,
       ow_cond     TYPE crmt_pric_cond,
       ot_price    TYPE prct_cond_du_tab,
       ow_price    TYPE prct_cond_du,
       ot_partner  TYPE crmt_partner_external_wrkt,
       ow_partner  TYPE crmt_partner_external_wrk,
       ow_text     TYPE crmt_text_wrk,
       ot_text     TYPE crmt_text_wrkt.
  FIELD-SYMBOLS:<fs>      TYPE any,
                <fsx>     TYPE any,
                <partner> TYPE any.


  CHECK head-guid IS NOT INITIAL.
  REFRESH:lt_guid_init.
  ls_guid_init = head-guid.
  APPEND ls_guid_init TO lt_guid_init.

  SELECT SINGLE * INTO gw_index FROM zhsb_order_index WHERE guid = head-guid.
  IF sy-subrc = 0.
    SELECT SINGLE * INTO gw_profile FROM crmc_proc_type WHERE process_type = gw_index-process_type.
  ELSE.
    SELECT SINGLE * INTO gw_sale FROM zhsb_sales_index WHERE guid = head-guid.
    IF sy-subrc = 0.
      SELECT SINGLE * INTO gw_profile FROM crmc_proc_type WHERE process_type = gw_sale-process_type.
    ELSE.
      SELECT SINGLE * INTO gw_profile FROM crmc_proc_type WHERE process_type = head-order_type.
    ENDIF.
  ENDIF.

  SELECT * INTO TABLE gt_tj30t FROM tj30t WHERE stsma = gw_profile-user_stat_proc AND spras = \'E\'.


  ls_orderadm_h-guid              = head-guid.
  "******************************HEAD*************************BEGIN
  "CUSTOMER_MODEL
  IF headx-customer_model = \'X\'.
*    CONCATENATE head-factory_model head-customer_model INTO ls_orderadm_h-zzzmodeno SEPARATED BY \'.\'.
    ls_orderadm_h-zzzmodeno = head-customer_model.
    ls_field_names-fieldname = \'ZZZMODENO\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "FACTORY_MODEL
  IF headx-factory_model = \'X\'.
    ls_orderadm_h-zzfld00000h = head-factory_model.
    ls_field_names-fieldname = \'ZZFLD00000H\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "DELAYREASONCODE
  IF headx-delayreasoncode = \'X\'.
    ls_orderadm_h-zzafld000002 = head-delayreasoncode.
    ls_field_names-fieldname = \'ZZAFLD000002\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "UNSOLVEDCODE
  IF headx-unsolvedcode = \'X\'.
    ls_orderadm_h-zzafld000003 = head-unsolvedcode.
    ls_field_names-fieldname = \'ZZAFLD000003\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "WARRANTY
  IF headx-warrantype = \'X\'.
    ls_orderadm_h-zzwarranty = head-warrantype.
    ls_field_names-fieldname = \'ZZWARRANTY\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "SERIALNO
  IF headx-serialno = \'X\'.
    ls_orderadm_h-zzzserialno = head-serialno.
    ls_field_names-fieldname = \'ZZZSERIALNO\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "SERIALNO1
  IF headx-zzzserialno1 = \'X\'.
    ls_orderadm_h-zzzserialno1 = head-zzzserialno1.
    ls_field_names-fieldname = \'ZZZSERIALNO1\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "SERIALNO2
  IF headx-zzzserialno2 = \'X\'.
    ls_orderadm_h-zzzserialno2 = head-zzzserialno2.
    ls_field_names-fieldname = \'ZZZSERIALNO2\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "SYMPTOMS_CODE
  IF headx-symptoms_code = \'X\'.
    ls_orderadm_h-zzzsymptomscode = head-symptoms_code.
    ls_field_names-fieldname = \'ZZZSYMPTOMSCODE\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "SYMPTOMS_CODE_G
  IF headx-symptoms_code_g = \'X\'.
    ls_orderadm_h-zzzsymptomsgroup = head-symptoms_code_g.
    ls_field_names-fieldname = \'ZZZSYMPTOMSGROUP\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "DEFECT_CODE
  IF headx-defect_code = \'X\'.
    ls_orderadm_h-zzzdefectcode = head-defect_code.
    ls_field_names-fieldname = \'ZZZDEFECTCODE\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "DEFECT_CODE_G
  IF headx-defect_code_g = \'X\'.
    ls_orderadm_h-zzzdefectgroup = head-defect_code_g.
    ls_field_names-fieldname = \'ZZZDEFECTGROUP\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "REPAIR_CODE
  IF headx-repair_code = \'X\'.
    ls_orderadm_h-zzzrepaircode = head-repair_code.
    ls_field_names-fieldname = \'ZZZREPAIRCODE\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "REPAIR_CODE_G
  IF headx-repair_code_g = \'X\'.
    ls_orderadm_h-zzzrepairgroup = head-repair_code_g.
    ls_field_names-fieldname = \'ZZZREPAIRGROUP\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "HEAD DESCRIPTION
  IF headx-problem_des = \'X\'.
    ls_orderadm_h-description = head-problem_des.
    ls_field_names-fieldname = \'DESCRIPTION\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "ORDER TYPE
  IF headx-order_type = \'X\'.
    ls_orderadm_h-process_type = head-order_type.
    ls_field_names-fieldname = \'PROCESS_TYPE\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "CREATE USER
  IF headx-create_user = \'X\'.
    ls_orderadm_h-created_by = head-create_user.
    ls_field_names-fieldname = \'CREATED_BY\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "POSTING DATE
  IF headx-create_date = \'X\'.
    ls_orderadm_h-posting_date = sy-datum.
    ls_field_names-fieldname = \'POSTING_DATE\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ELSE.
    IF headx-posting_date = \'X\'.
      ls_orderadm_h-posting_date = head-posting_date.
      ls_field_names-fieldname = \'POSTING_DATE\'.
      INSERT ls_field_names INTO TABLE lt_field_names.
    ENDIF.
  ENDIF.

  "PRODUCT ID->group brand
  IF headx-product_id = \'X\'.
    SELECT SINGLE product_guid INTO  lv_productguid
      FROM comm_product
      WHERE product_id = head-product_id.
    SELECT SINGLE *
      FROM comm_hierarchy
      INTO ls_hierarchy
      WHERE hierarchy_id = \'R3PRODHIER\'.
    IF sy-subrc = 0.
      CLEAR ls_prprdcatr.
      SELECT SINGLE  * INTO CORRESPONDING FIELDS OF  ls_prprdcatr
        FROM comm_prprdcatr
        WHERE product_guid = lv_productguid
        AND hierarchy_guid = ls_hierarchy-hierarchy_guid.
      ls_orderadm_h-zzzgroup    = ls_prprdcatr-category_id+0(1).
      ls_orderadm_h-zzzbrand    = ls_prprdcatr-category_id+1(2).
    ENDIF.

    ls_field_names-fieldname = \'ZZZGROUP\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
    ls_field_names-fieldname = \'ZZZBRAND\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  IF headx-zzzgroup = \'X\'.
    DELETE lt_field_names WHERE fieldname = \'ZZZGROUP\'.
    ls_orderadm_h-zzzgroup = head-zzzgroup.
    ls_field_names-fieldname = \'ZZZGROUP\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  IF headx-zzzbrand = \'X\'.
    DELETE lt_field_names WHERE fieldname = \'ZZZBRAND\'.
    ls_orderadm_h-zzzbrand = head-zzzbrand.
    ls_field_names-fieldname = \'ZZZBRAND\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.

  "SERVICE_TYPE
  IF headx-service_type = \'X\'.
    ls_orderadm_h-zzfld00000n = head-service_type.
    ls_field_names-fieldname = \'ZZFLD00000N\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "IN_PROGRESS
  IF headx-in_progress = \'X\'.
    ls_orderadm_h-zzdlyrsn = head-in_progress.
    ls_field_names-fieldname = \'ZZDLYRSN\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "ZZIMEI
  IF headx-zzimei = \'X\'.
    ls_orderadm_h-zzimei = head-zzimei.
    ls_field_names-fieldname = \'ZZIMEI\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "ZZIMEI1
  IF headx-zzimei1 = \'X\'.
    ls_orderadm_h-zzimei1 = head-zzimei1.
    ls_field_names-fieldname = \'ZZIMEI1\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "COLLECT_POINT
  IF headx-collect_point = \'X\'.
    ls_orderadm_h-zzafld000008 = head-collect_point.
    ls_field_names-fieldname = \'ZZAFLD000008\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "TRACKING_NO_FR_COM
  IF headx-tracking_no_fr_com = \'X\'.
    ls_orderadm_h-zzafld000000 = head-tracking_no_fr_com.
    ls_field_names-fieldname = \'ZZAFLD000000\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "TRACKING_NO_FR
  IF headx-tracking_no_fr = \'X\'.
    ls_orderadm_h-zzztracksent = head-tracking_no_fr.
    ls_field_names-fieldname = \'ZZZTRACKSENT\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "TRACKING_NO_TO_COM
  IF headx-tracking_no_to_com = \'X\'.
    ls_orderadm_h-zzafld000001 = head-tracking_no_to_com.
    ls_field_names-fieldname = \'ZZAFLD000001\'.
    INSERT ls_field_names INTO TABLE lt_field_names.
  ENDIF.
  "TRACKING_NO_TO
  IF headx-tracking_no_to = \'X以上是关于CRM函数CRM_ORDER_MAINTAIN封装的主要内容,如果未能解决你的问题,请参考以下文章

为什么S/4HANA的销售订单创建会触发生产订单的创建

SAP Commerce(原Hybris)的订单处理框架和SAP CRM One Order框架

crm-ssh-列表显示(顾客列表,用户,联系人列表)

Dynamics CRM 2015/2016 Web API:Unbound Function 和 Bound Function

Dynamics CRM 2015/2016 Web API:Unbound Function 和 Bound Function

CRM-展示列表,分页功能