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

来源:互联网 发布:vip视频解析源码heml 编辑:程序博客网 时间:2024/05/17 00:03

  效果








配置树





"最外层框架添加按钮





“增加BLOCK








METHOD eh_onzrefresh.

* Added by wizard: Handler for event 'ZREFRESH'

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


    DATAlr_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_propertiesIMPORTING 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.

      DATAlt_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(6lw_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
原创粉丝点击