CRM开发总结1:线索增强程序

  效果








配置树





"最外层框架添加按钮





“增加BLOCK








METHOD eh_onzrefresh.

* Added by wizard: Handler for event 'ZREFRESH'

*---------------------------初始化----------------------------*


     DATA lr_header                   TYPE  REF  TO cl_crm_bol_entity ,
          lr_btheaderpartnerset       TYPE  REF  TO cl_crm_bol_entity ,
          lr_btpartner_pft_0006_main  TYPE  REF  TO cl_crm_bol_entity ,


          lr_col                      TYPE  REF  TO if_bol_entity_col ,      "增强关系的对象集
          lr_entity01                 TYPE  REF  TO cl_crm_bol_entity ,

          it_kcmx                     TYPE  STANDARD  TABLE  OF ztab0000av_bol_attr ,
          it_kcmx_new                 TYPE  STANDARD  TABLE  OF ztab0000av_bol_attr ,
          wa_kcmx_new                 TYPE ztab0000av_bol_attr ,     "库存明细 ZEXT_BOL_RELAT00000U
          wa_kcmx                     TYPE ztab0000av_bol_attr ,     "库存明细 ZEXT_BOL_RELAT00000U

          wa_kchj                     TYPE ztab0000bf_bol_attr ,     "库存合计 ZEXT_BOL_RELAT00000Y
          rv_result                   TYPE  REF  TO cl_crm_bol_entity ,
          lw_es_attributes            TYPE crmst_adminh_btil ,
          lw_es_attributes_brfore     TYPE crmst_adminh_btil ,
          lw_crmst_partner_btil       TYPE crmst_partner_btil ,
          lr_property_acces           TYPE  REF  TO if_bol_bo_property_access .

     DATA : BEGIN  OF lw_zsd021 ,
           matnr  TYPE matnr ,
           lfimg  TYPE lfimg .
     DATA  END  OF lw_zsd021 .

     DATA lt_zsd021  LIKE  STANDARD  TABLE  OF lw_zsd021 .

     DATA :
      lr_kcmx_new     TYPE  REF  TO if_bol_entity_col ,
      lr_core         TYPE  REF  TO cl_crm_bol_core ,       "CRM核心类
      lr_transaction  TYPE  REF  TO if_bol_transaction_context ,
      lv_lines        TYPE sytabix .

    lr_core  cl_crm_bol_core =>get_instance ) .
    lr_core ->start_up 'BT'  ) .
    lr_header ?= me ->typed_context ->btadminh ->collection_wrapper ->get_current ) .

*-----------------------------更新月份 START--------------------------------*
"月份取开始日期前6位
     DATA lr_btheaderdatesset  TYPE  REF  TO cl_crm_bol_entity .
     DATA lr_btdatesallcust_sales  TYPE  REF  TO cl_crm_bol_entity .
     DATA lw_crmst_date_btil  TYPE crmst_date_btil .

     CALL  METHOD lr_header ->get_properties  "去增强字段zzssyf
       IMPORTING
        es_attributes  lw_es_attributes .

     IF lw_es_attributes -zzssyf  IS  INITIAL .

       CALL  METHOD lr_header ->get_related_entity  "取开始日期 位置:BTDatesAllCust_SALES <- BTHeaderDatesSet <- BTOrderHeader
         EXPORTING
          iv_relation_name  'BTHeaderDatesSet'
        RECEIVING
          rv_result         lr_btheaderdatesset .

       CALL  METHOD lr_btheaderdatesset ->get_related_entity
         EXPORTING
          iv_relation_name  'BTDatesAllCust_SALES'
        RECEIVING
          rv_result         lr_btdatesallcust_sales .

      lr_btdatesallcust_sales ->get_properties IMPORTING es_attributes  lw_crmst_date_btil  ) .


      lw_es_attributes -zzssyf  lw_crmst_date_btil -fromdate+0 ( 6 ) .

       CALL  METHOD lr_header ->set_properties
         EXPORTING
          is_attributes  lw_es_attributes .
     ENDIF .

*-----------------------------更新月份 END--------------------------------*
     CALL  METHOD lr_header ->get_related_entities  "判断当前库存明细是否有值 ZEXT_BOL_RELAT00000U <- BTOrderHeader
       EXPORTING
        iv_relation_name  'ZEXT_BOL_RELAT00000U'
      RECEIVING
        rv_result         lr_kcmx_new .

     CALL  METHOD lr_kcmx_new -> size
      RECEIVING
        rv_result  lv_lines .
     IF lv_lines  0 . "若 库存明细BLOCK 为空,则初始化BLOCK ,否则刷新 金额 和 库存合计表

*-----------------------------库存明细 START--------------------------------*

       TRY .
           CALL  METHOD lr_header ->get_related_entity  "取客户号partner_no   BTPartner_PFT_0006_MAIN <- BTHeaderPartnerSet <- BTOrderHeader
             EXPORTING
              iv_relation_name  'BTHeaderPartnerSet'
            RECEIVING
              rv_result         lr_btheaderpartnerset .
         CATCH cx_crm_genil_model_error  .
       ENDTRY .

       TRY .
           CALL  METHOD lr_btheaderpartnerset ->get_related_entity
             EXPORTING
              iv_relation_name  'BTPartner_PFT_0006_MAIN'
            RECEIVING
              rv_result         lr_btpartner_pft_0006_main .
         CATCH cx_crm_genil_model_error  .
       ENDTRY .

       CALL  METHOD lr_btpartner_pft_0006_main ->get_properties
         IMPORTING
          es_attributes  lw_crmst_partner_btil .


       "ERP取发货数量
       DATA :  lt_siteselect  TYPE  TABLE  OF siteselect  INITIAL  SIZE  0 ,
             ls_siteselect  TYPE          siteselect .

       CALL  FUNCTION  'SMOF0_READ_SITESELECT'    "取配置的目标系统
         TABLES
          to_siteselect  lt_siteselect .

       READ  TABLE lt_siteselect  INTO ls_siteselect
            WITH  KEY sitetypeid  cl_smw1_siteprovider =>c_sitetype_r3oltp .
       IF sy -subrc  0 .
         CALL  FUNCTION  'Z_CRM_GET_LIKP'
          DESTINATION ls_siteselect -rfcdest
           EXPORTING
            kunnr   lw_crmst_partner_btil -partner_no
            zyf     lw_es_attributes -zzssyf
           TABLES
            zsd021  lt_zsd021 .
       ENDIF .

*-----------------------------库存明细 END--------------------------------*


*-----------------------------初期库存 START--------------------------------*

       DATA :
        lv_dyn_query  TYPE  REF  TO cl_crm_bol_dquery_service ,
        lr_root       TYPE  REF  TO cl_crm_bol_entity ,     "SR根对象
        lr_partner    TYPE  REF  TO cl_crm_bol_entity .

       DATA :lv_result  TYPE  REF  TO if_bol_entity_col ,
           lr_entity  TYPE  REF  TO cl_crm_bol_entity ,
           wa_result  TYPE      crmst_query_r_opp_btil .

       DATA lt_parameters  TYPE crmt_name_value_pair_tab ,
            ls_parameters  TYPE crmt_name_value_pair .


      lv_dyn_query  cl_crm_bol_dquery_service =>get_instance 'BTQLeadDoc'  ) .

       DATA lv_string  TYPE string .

      lv_dyn_query ->insert_selection_param (   iv_index      '1'
                                           iv_attr_name  'TEMPLATE_TYPE'
                                           iv_sign       'I'
                                           iv_option     'EQ'
                                           iv_low        'D'  ) . "设置取值模板

       DATA lv_currdate    TYPE sy -datum .
       DATA lv_newdate     TYPE sy -datum .

      lv_currdate+0 ( 6 lw_es_attributes -zzssyf . "取上个月单据的库存明细
      lv_currdate+6 ( 2 '01' .

       CALL  FUNCTION  'CCM_GO_BACK_MONTHS'
         EXPORTING
          currdate    lv_currdate
          backmonths  1
         IMPORTING
          newdate     lv_newdate .

      lv_string  lw_crmst_partner_btil -partner_no .
       CALL  METHOD lv_dyn_query ->add_selection_param  "设置筛选条件
         EXPORTING
          iv_attr_name  'BU_PARTNER'
          iv_sign       'I'
          iv_option     'EQ'
          iv_low        lv_string
*         iv_high      =
         .

       "月份设置为前一个月
      lv_string  lv_newdate+0 ( 6 ) .
       CALL  METHOD lv_dyn_query ->add_selection_param
         EXPORTING
          iv_attr_name  'ZZSSYF'
          iv_sign       'I'
          iv_option     'EQ'
          iv_low        lv_string
*         iv_high      =
         .

       "状态设置为已过帐
       CALL  METHOD lv_dyn_query ->add_selection_param
         EXPORTING
          iv_attr_name  'STATUS_AREA'
          iv_sign       'I'
          iv_option     'EQ'
          iv_low        'E0003ZCRMLEAD'
*         iv_high      =
         .

       DATA :
        lr_btadvslea      TYPE  REF  TO cl_crm_bol_entity ,
        lr_btorderheader  TYPE  REF  TO cl_crm_bol_entity ,

        lr_kcmx           TYPE  REF  TO if_bol_entity_col .

      lv_result  lv_dyn_query ->get_result ) .
      lr_entity ?= lv_result ->get_first ) .
       IF lr_entity  IS  BOUND .

         TRY .
             CALL  METHOD lr_entity ->get_related_entity  "取上月库存
               EXPORTING
                iv_relation_name  'BTADVSLea'
              RECEIVING
                rv_result         lr_btadvslea .

             CALL  METHOD lr_btadvslea ->get_related_entity
               EXPORTING
                iv_relation_name  'BTOrderHeader'
              RECEIVING
                rv_result         lr_btorderheader .

             CALL  METHOD lr_btorderheader ->get_related_entities
               EXPORTING
                iv_relation_name  'ZEXT_BOL_RELAT00000U'
              RECEIVING
                rv_result         lr_kcmx .

             CALL  METHOD lr_kcmx ->get_first
              RECEIVING
                rv_result  lr_property_acces .

             WHILE lr_property_acces  IS  BOUND .

               CALL  METHOD lr_property_acces ->get_properties
                 IMPORTING
                  es_attributes  wa_kcmx .

               IF wa_kcmx -zzqmkcsl >  0 .
                 APPEND wa_kcmx  TO it_kcmx .
               ENDIF .


               CALL  METHOD lr_kcmx ->get_next
                RECEIVING
                  rv_result  lr_property_acces .
             ENDWHILE .

           CATCH cx_crm_genil_model_error  .
         ENDTRY .
       ENDIF .


*-----------------------------初期库存 END--------------------------------*


*-----------------------------整合数据 START--------------------------------*

       LOOP  AT it_kcmx  INTO wa_kcmx .
        wa_kcmx_new -zzcpbh  wa_kcmx -zzcpbh .
        wa_kcmx_new -zzcqkcsl  wa_kcmx -zzqmkcsl .
         APPEND wa_kcmx_new  TO it_kcmx_new .
       ENDLOOP .

       LOOP  AT lt_zsd021  INTO lw_zsd021 .
         READ  TABLE it_kcmx_new   INTO wa_kcmx_new   WITH  KEY zzcpbh  lw_zsd021 -matnr .
         IF sy -subrc  0 .

          wa_kcmx_new -zzbyfhsl  lw_zsd021 -lfimg .
           MODIFY it_kcmx_new  FROM  wa_kcmx_new  INDEX sy -tabix .
         ELSE .

          wa_kcmx_new -zzcpbh   lw_zsd021 -matnr .
          wa_kcmx_new -zzbyfhsl  lw_zsd021 -lfimg .
           APPEND wa_kcmx_new  TO it_kcmx_new .

         ENDIF .
         CLEAR wa_kcmx_new .
       ENDLOOP .

       LOOP  AT it_kcmx_new  INTO wa_kcmx_new .

         CALL  FUNCTION  'CONVERSION_EXIT_ALPHA_INPUT'
           EXPORTING
             input   wa_kcmx_new -zzcpbh
           IMPORTING
             output  wa_kcmx_new -zzcpbh .
         MODIFY it_kcmx_new  FROM wa_kcmx_new .
       ENDLOOP .
*-----------------------------整合数据 END----------------------------------*


*-----------------------------单价 START--------------------------------*
*产品编号=COMM_PRODUCT-PRODUCT_ID,
*COMM_PRODUCT-PRODUCT_GUID=CNCCRMPRCUS505-PRODUCT_GUID,
*销售组织=CNCCRMPRCUS505-SALES_ORG,
*分销渠道=CNCCRMPRCUS505-DIS_CHANNEL,
*销售办事处=CNCCRMPRCUS505-SALES_OFFICE
*CNCCRMPRCUS505-RELEASE_STATUS(发布状态) ='',  CNCCRMPRCUS505-KSCHL(条件类型)=Z000,
*盘点日期在 CNCCRMPRCUS505-TIMESTAMP_FROM有效期自(截止前8位)和CNCCRMPRCUS505-TIMESTAMP_TO有效期自(截止前8位)之间,CNCCRMPRCUS505-KBETR金额
*添加修改:20160613
*CNCCRMPRCUS505-PRODUCT_GUID=COMM_PR_UNIT-PRODUCT_GUID,
*CNCCRMPRCUS505-KMEIN=COMM_PR_UNIT-UNIT;
*基本单价=【CNCCRMPRCUS505-KBETR/CNCCRMPRCUS505-KPEIN】*【COMM_PR_UNIT-NUMERATOR/COMM_PR_UNIT-DENOMINATOR】;

       DATA lw_organ  TYPE crmst_orgset_btil .
       DATA lr_orgman  TYPE  REF  TO cl_crm_bol_entity .

       TRY .
           CALL  METHOD lr_header ->get_related_entity  "取组织BLOCK内容
             EXPORTING
              iv_relation_name  'BTHeaderOrgmanSet'
            RECEIVING
              rv_result         lr_orgman .
         CATCH cx_crm_genil_model_error .
       ENDTRY .

       CALL  METHOD lr_orgman ->get_properties
         IMPORTING
          es_attributes  lw_organ .

       IF it_kcmx_new  IS  NOT   INITIAL .
         DATA lt_comm_product  TYPE  STANDARD  TABLE  OF comm_product .
         DATA lw_comm_product  TYPE comm_product .

         SELECT FROM comm_product  INTO CORRESPONDING  FIELDS  OF  TABLE lt_comm_product
           FOR  ALL ENTRIES  IN it_kcmx_new
           WHERE product_id  it_kcmx_new -zzcpbh .

         DATA lt_cnccrmprcus505  TYPE  STANDARD  TABLE  OF cnccrmprcus505 .
         DATA lw_cnccrmprcus505  TYPE cnccrmprcus505 .
         DATA lt_comm_pr_unit  TYPE  STANDARD  TABLE  OF comm_pr_unit .
         DATA lw_comm_pr_unit  TYPE comm_pr_unit .
         DATA lt_t006a  TYPE  STANDARD  TABLE  OF t006a .
         DATA lw_t006a  TYPE t006a .

         IF lt_comm_product  IS  NOT  INITIAL  .
           SELECT FROM  cnccrmprcus505  INTO CORRESPONDING  FIELDS  OF  TABLE lt_cnccrmprcus505
             FOR  ALL ENTRIES  IN lt_comm_product
             WHERE sales_org  lw_organ -sales_org
             AND dis_channel  lw_organ -dis_channel
             AND sales_office  lw_organ -sales_office
             AND product  lt_comm_product -product_guid
             AND release_stat  ''
             AND kschl  'Z000' .

           DATA lt_comm_prshtext  TYPE  STANDARD  TABLE  OF comm_prshtext .
           DATA lw_comm_prshtext  TYPE comm_prshtext .

           SELECT FROM comm_prshtext  INTO CORRESPONDING  FIELDS  OF  TABLE lt_comm_prshtext
             FOR  ALL ENTRIES  IN lt_comm_product
             WHERE product_guid  lt_comm_product -product_guid
             AND   langu  sy -langu .

           SELECT FROM comm_pr_unit  INTO CORRESPONDING  FIELDS  OF  TABLE lt_comm_pr_unit
           FOR  ALL ENTRIES  IN lt_comm_product
           WHERE product_guid  lt_comm_product -product_guid
             AND is_base_unit  'X' .

           IF lt_comm_pr_unit  IS  NOT  INITIAL .
             SELECT FROM t006a  INTO CORRESPONDING  FIELDS  OF  TABLE lt_t006a
               FOR  ALL ENTRIES  IN lt_comm_pr_unit
               WHERE msehi  lt_comm_pr_unit - unit .
           ENDIF .

         ENDIF .

       ENDIF .
*-----------------------------单价 END--------------------------------*
     ELSE . "刷新 金额 和 库存合计表

       CALL  METHOD lr_kcmx_new ->get_first
        RECEIVING
          rv_result  lr_property_acces .

       WHILE lr_property_acces  IS  BOUND .

         CALL  METHOD lr_property_acces ->get_properties
           IMPORTING
            es_attributes  wa_kcmx_new .

         APPEND wa_kcmx_new  TO it_kcmx_new .

         CALL  METHOD lr_kcmx_new ->get_next
          RECEIVING
            rv_result  lr_property_acces .
       ENDWHILE .
     ENDIF .
*-----------------------------整合数据 START--------------------------------*
     ""刷新 金额 和 库存合计表
     CLEAR wa_kchj .
     LOOP  AT it_kcmx_new  INTO wa_kcmx_new .

      wa_kcmx_new -zzxh  sy -tabix .

       READ  TABLE lt_comm_product  INTO lw_comm_product  WITH  KEY product_id  wa_kcmx_new -zzcpbh .
       IF sy -subrc  0 .

         READ  TABLE lt_comm_prshtext  INTO lw_comm_prshtext  WITH  KEY product_guid  lw_comm_product -product_guid .
         IF sy -subrc  0 .
          wa_kcmx_new -zzcpmc  lw_comm_prshtext -short_text .
         ENDIF .

         READ  TABLE lt_cnccrmprcus505  INTO lw_cnccrmprcus505  WITH  KEY product  lw_comm_product -product_guid .
         IF sy -subrc  0 .
           READ  TABLE lt_comm_pr_unit  INTO lw_comm_pr_unit  WITH  KEY product_guid  lw_comm_product -product_guid .

           IF sy -subrc  0 .
*添加修改:20160613
*CNCCRMPRCUS505-PRODUCT_GUID=COMM_PR_UNIT-PRODUCT_GUID,
*CNCCRMPRCUS505-KMEIN=COMM_PR_UNIT-UNIT;
*基本单价=【CNCCRMPRCUS505-KBETR/CNCCRMPRCUS505-KPEIN】*【COMM_PR_UNIT-NUMERATOR/COMM_PR_UNIT-DENOMINATOR】;

            wa_kcmx_new -zzdj  lw_cnccrmprcus505 -kbetr / lw_cnccrmprcus505 -kpein  lw_comm_pr_unit -numerator / lw_comm_pr_unit -denominator  ) .
             READ  TABLE lt_t006a  INTO lw_t006a  WITH  KEY msehi  lw_comm_pr_unit - unit .
             IF sy -subrc  0 .
              wa_kcmx_new -zzdw  lw_t006a -msehl .
             ENDIF .
           ENDIF .
         ENDIF .

       ENDIF .

      wa_kcmx_new -zzbyfxl  =  wa_kcmx_new -zzcqkcsl  wa_kcmx_new -zzqmkcsl + wa_kcmx_new -zzbyfhsl .

      wa_kcmx_new -zzcqkcje  wa_kcmx_new -zzdj * wa_kcmx_new -zzcqkcsl .
      wa_kcmx_new -zzbyfhje  wa_kcmx_new -zzdj * wa_kcmx_new -zzbyfhsl .
      wa_kcmx_new -zzqmkcje  wa_kcmx_new -zzdj * wa_kcmx_new -zzqmkcsl .
      wa_kcmx_new -zzbyfxje  wa_kcmx_new -zzdj * wa_kcmx_new -zzbyfxl  .

      wa_kchj -zzcqkcslhj  wa_kchj -zzcqkcslhj + wa_kcmx_new -zzcqkcsl .
      wa_kchj -zzcqkcjehj  wa_kchj -zzcqkcjehj + wa_kcmx_new -zzcqkcje .
      wa_kchj -zzbyfhslhj  wa_kchj -zzbyfhslhj + wa_kcmx_new -zzbyfhsl .
      wa_kchj -zzbyfhjehj  wa_kchj -zzbyfhjehj + wa_kcmx_new -zzbyfhje .
      wa_kchj -zzqmkcslhj  wa_kchj -zzqmkcslhj + wa_kcmx_new -zzqmkcsl .
      wa_kchj -zzqmkujehj  wa_kchj -zzqmkujehj + wa_kcmx_new -zzqmkcje .
      wa_kchj -zzbyfxslhj  wa_kchj -zzbyfxslhj + wa_kcmx_new -zzbyfxl .
      wa_kchj -zzbyfxjehj  wa_kchj -zzbyfxjehj + wa_kcmx_new -zzbyfxje .



       CALL  FUNCTION  'CONVERSION_EXIT_ALPHA_OUTPUT'
         EXPORTING
           input   wa_kcmx_new -zzcpbh
         IMPORTING
           output  wa_kcmx_new -zzcpbh .

       MODIFY it_kcmx_new  FROM wa_kcmx_new .
     ENDLOOP .

     "整合后数据为 it_kcmx_new wa_kchj

*-----------------------------整合数据 END----------------------------------*

*-----------------------------写入数据 START--------------------------------*

     DATA lv_entity_kcmx     TYPE  REF  TO cl_crm_bol_entity .
     DATA lv_entity_kchj     TYPE  REF  TO cl_crm_bol_entity .
     DATA lr_kchj      TYPE  REF  TO if_bol_entity_col .

     CALL  METHOD lr_header ->get_related_entities  "在抬头组件中删除明细BLOCK数据
       EXPORTING
        iv_relation_name  'ZEXT_BOL_RELAT00000U'
      RECEIVING
        rv_result         lr_kcmx_new .

     CALL  METHOD lr_kcmx_new ->get_first
      RECEIVING
        rv_result  lv_entity_kcmx .

     WHILE lv_entity_kcmx  IS  BOUND  .

      lv_entity_kcmx -> delete ) .
       CALL  METHOD lr_kcmx_new ->get_next
        RECEIVING
          rv_result  lv_entity_kcmx .
     ENDWHILE .


     DELETE it_kcmx_new  WHERE zzcpbh  IS  INITIAL .
     LOOP  AT it_kcmx_new  INTO wa_kcmx_new .

       CALL  METHOD lr_header ->create_related_entity  "写入明细
         EXPORTING
          iv_relation_name  'ZEXT_BOL_RELAT00000U'
        RECEIVING
          rv_result         lv_entity_kcmx .

       CALL  METHOD lv_entity_kcmx ->set_properties
         EXPORTING
          is_attributes  wa_kcmx_new .

     ENDLOOP .


     CALL  METHOD lr_header ->get_related_entity  "写入合计
       EXPORTING
        iv_relation_name  'ZEXT_BOL_RELAT00000Y'
      RECEIVING
        rv_result         lv_entity_kchj .

     CALL  METHOD lv_entity_kchj ->set_properties
       EXPORTING
        is_attributes  wa_kchj .


*-----------------------------写入数据 END----------------------------------*
     "清空变量
     CLEAR lv_entity_kcmx .
     CLEAR lv_entity_kchj .
     CLEAR lr_kchj .
     CLEAR it_kcmx_new .
     CLEAR it_kcmx .
     CLEAR lt_zsd021 .
   ENDMETHOD .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值