UI基础一:简单的BOL查询

利用标准的BOL编辑工具,添加BOL对象,重写查询方法,实现简答的BOL查询

1.SE11创建查询对象结构:

 

2.SE11创建查询结果对象:

 

3.SE24新建处理类:

重写查询结果方法:

  METHOD IF_GENIL_APPL_INTLAY~GET_DYNAMIC_QUERY_RESULT.
    TYPES:BEGIN OF TY_ADM,
            GUID_H         TYPE CRMT_OBJECT_GUID, "销售订单
            OBJECT_ID      TYPE CRMT_OBJECT_ID_DB,
            OBJECT_ID_H    TYPE CRMT_OBJECT_ID_DB, "销售订单
            ZZZTRACKRETURN TYPE ZTRACKRETURN, "销售订单-发回运单号
            GUID_D         TYPE CRMT_OBJECT_GUID, "维修工单
            OBJECT_ID_D    TYPE CRMT_OBJECT_ID_DB, "维修工单
          END OF TY_ADM,
          BEGIN OF TY_PARTNER,
            GUID_HI    TYPE CRMT_OBJECT_GUID,
            GUID_SET   TYPE CRMT_OBJECT_GUID,
            PARTNER_NO TYPE CRMT_PARTNER_NO,
            PARTNER    TYPE BU_PARTNER,
            BU_SORT1   TYPE BU_SORT1,
          END OF TY_PARTNER,
          BEGIN OF TY_ITEM,
            HEADER       TYPE CRMT_OBJECT_GUID, "销售订单
            PRODUCT      TYPE CRMT_PRODUCT_GUID_DB,
            ORDERED_PROD TYPE CRMT_ORDERED_PROD_DB,
            NUMBER_INT   TYPE CRMT_ITEM_NO,
            ITM_TYPE     TYPE CRMT_ITEM_TYPE_DB,
            QUANTITY     TYPE CRMT_SCHEDLIN_QUAN,
          END OF TY_ITEM,
          BEGIN OF TY_RESU,
            GUID_H         TYPE CRMT_OBJECT_GUID,
            OBJECT_ID      TYPE CRMT_OBJECT_ID_DB,
            CREATED_AT     TYPE COMT_CREATED_AT_USR,
            ZZZMODENO      TYPE ZMODENO,
            ZZCLIENT_TYPE  TYPE ZADTEL000056,
            PO_NUMBER_SOLD TYPE CRMT_PO_NUMBER_SOLD,
          END OF TY_RESU.

    DATA: LT_SELECTION    TYPE AXTT_TABLES_SEL_PARAM,
          LS_SELECTION    TYPE AXT_TABLES_SEL_PARAM,
          RT_OBJECT_ID    TYPE RANGE OF CRMT_OBJECT_ID,
          RS_OBJECT_ID    LIKE LINE OF RT_OBJECT_ID,
          RT_ZZAFLD00001X TYPE RANGE OF ZADTEL00009Q,
          RS_ZZAFLD00001X LIKE LINE OF RT_ZZAFLD00001X,
          LV_DATE         TYPE ZADTEL00009Q,
          RT_ZZAFLD00001Y TYPE RANGE OF ZADTEL00009U,
          RS_ZZAFLD00001Y LIKE LINE OF RT_ZZAFLD00001Y,
          LV_TIME         TYPE ZADTEL00009U,
          LX_ROOT         TYPE REF TO CX_ROOT.              "#EC NEEDED
    DATA:GT_ADM      TYPE TABLE OF TY_ADM,
         VT_ADM      TYPE TABLE OF TY_ADM,
         GW_ADM      LIKE LINE OF GT_ADM,
         GT_PARTNER  TYPE TABLE OF TY_PARTNER,
         LT_PARTNER  TYPE TABLE OF TY_PARTNER,
         GW_PARTNER  LIKE LINE OF GT_PARTNER,
         LS_PARTNER  LIKE LINE OF LT_PARTNER,
         GV_PARTNER  TYPE BU_PARTNER_GUID,
         GT_ITEM     TYPE TABLE OF TY_ITEM,
         VT_ITEM     TYPE TABLE OF TY_ITEM,
         GW_ITEM     LIKE LINE OF GT_ITEM,
         GT_PRTEXT   TYPE TABLE OF COMM_PRSHTEXT,
         GW_PRTEXT   LIKE LINE OF GT_PRTEXT,
         GV_INDEX    TYPE I,
         GT_PRICE    TYPE TABLE OF CNCCRMPRSAP032,
         GW_PRICE    LIKE LINE OF GT_PRICE,
         GV_TIMESTMP TYPE /SAPCND/TIMESTAMP_TO.. "

    DATA LS_SELECTION_PARAS TYPE GENILT_SELECTION_PARAMETER.
    DATA LT_WHERE_CONDITION TYPE CRMT_REPORT_DYN_SQL_LINE_TA.

    DATA: LT_RESULT TYPE TABLE OF ZCRMS0031,
          LT_RESU   TYPE TABLE OF TY_RESU,
          LS_RESU   LIKE LINE OF LT_RESU,
          GT_RESULT TYPE TABLE OF ZCRMS0031,
          LS_RESULT TYPE          ZCRMS0031.

    DATA: LV_MAXHIT     TYPE          INT4,
          LV_NAME       TYPE THEAD-TDNAME,
          LV_STR1       TYPE STRING,
          LV_STR2       TYPE STRING,
          LV_OBJECT_KEY TYPE          CRMT_BSP_OBJECTKEY,
          LR_OBJECT     TYPE REF TO   IF_GENIL_CONT_ROOT_OBJECT.


    DEFINE SET_RESULT.
      LOOP AT GT_RESULT INTO LS_RESULT.
         LR_OBJECT = IV_ROOT_LIST->ADD_OBJECT( IV_OBJECT_NAME = 'ZODRESULT'
                                        IS_OBJECT_KEY = LS_RESULT-OBJECT_ID ).
         LV_OBJECT_KEY = LS_RESULT-OBJECT_ID.
         LR_OBJECT->SET_KEY( LV_OBJECT_KEY ).
         LR_OBJECT->SET_ATTRIBUTES( LS_RESULT ).
         CLEAR LS_RESULT.
      ENDLOOP.
    END-OF-DEFINITION .


*    IF ZCL_CRM_BUFFER=>GT_RESULT IS NOT INITIAL.
*      LT_RESULT = ZCL_CRM_BUFFER=>GT_RESULT .
*      SET_RESULT.
*
*      CLEAR ZCL_CRM_BUFFER=>GT_RESULT.
*      EXIT.
*    ENDIF.

    LT_SELECTION = IT_SELECTION_PARAMETERS.
*    SORT LT_SELECTION BY ATTR_NAME.
    LOOP AT LT_SELECTION INTO LS_SELECTION.
      CASE  LS_SELECTION-ATTR_NAME.
        WHEN 'OBJECT_ID'.
          MOVE-CORRESPONDING LS_SELECTION TO RS_OBJECT_ID.
          INSERT RS_OBJECT_ID INTO TABLE RT_OBJECT_ID.
        WHEN 'ZZAFLD00001X'.
          MOVE-CORRESPONDING LS_SELECTION TO RS_ZZAFLD00001X.
          INSERT RS_ZZAFLD00001X INTO TABLE RT_ZZAFLD00001X.
        WHEN 'ZZAFLD00001Y'.
          MOVE-CORRESPONDING LS_SELECTION TO RS_ZZAFLD00001Y.
          INSERT RS_ZZAFLD00001Y INTO TABLE RT_ZZAFLD00001Y.
      ENDCASE.
    ENDLOOP.

    LV_MAXHIT = IS_QUERY_PARAMETERS-MAX_HITS.

    SELECT SINGLE PARTNER_GUID INTO GV_PARTNER
      FROM BUT000 WHERE PARTNER = '0000200100'."'0000202525'.


    "取到销售订单抬头信息
    SELECT A~GUID      AS GUID_H
           A~OBJECT_ID
           A~PO_NUMBER_SOLD AS OBJECT_ID_H
           A~ZZZTRACKRETURN
      INTO CORRESPONDING FIELDS OF TABLE GT_ADM
      FROM ZHSB_SALES_INDEX AS A
      INNER JOIN CRMD_ORDERADM_I AS B
      ON A~GUID = B~HEADER
      WHERE A~OBJECT_ID IN RT_OBJECT_ID
      AND   B~ZZAFLD00001X IN RT_ZZAFLD00001X
      AND   B~ZZAFLD00001Y IN RT_ZZAFLD00001Y
*      AND   B~ZZAFLD00001X <> LV_DATE
      AND   A~PROCESS_TYPE = 'ZSO5'
      AND   A~SALES_ORG    = 'O 50000231'."日期不为空

    IF GT_ADM[] IS NOT INITIAL.
      "合作伙伴过滤
      SELECT A~GUID_HI"    TYPE CRMT_OBJECT_GUID,
             A~GUID_SET"   TYPE CRMT_OBJECT_GUID,
             B~PARTNER_NO" TYPE CRMT_PARTNER_NO,
        INTO CORRESPONDING FIELDS OF TABLE GT_PARTNER
        FROM CRMD_LINK AS A
        INNER JOIN CRMD_PARTNER AS B
        ON A~GUID_SET = B~GUID
        AND B~PARTNER_NO = GV_PARTNER
        FOR ALL ENTRIES IN GT_ADM
        WHERE A~GUID_HI = GT_ADM-GUID_H
        AND   A~OBJTYPE_SET = '07'.                         "付款方为202525
      "取销售订单项目
      SELECT A~HEADER"       TYPE CRMT_OBJECT_GUID, "销售订单
             A~PRODUCT  "    TYPE CRMT_PRODUCT_GUID_DB,
             A~ORDERED_PROD" TYPE CRMT_ORDERED_PROD_DB,
             A~NUMBER_INT  " TYPE CRMT_ITEM_NO,
             A~ITM_TYPE   "  TYPE CRMT_ITEM_TYPE_DB,
             B~QUANTITY
        INTO TABLE GT_ITEM
        FROM CRMD_ORDERADM_I AS A
        INNER JOIN CRMD_SCHEDLIN AS B
        ON A~GUID = B~ITEM_GUID
        AND B~EVENT_TYPE = 'ORDER'
        FOR ALL ENTRIES IN GT_ADM
        WHERE HEADER = GT_ADM-GUID_H.
      "销售订单项目 物料文本
      IF GT_ITEM[] IS NOT INITIAL.
        VT_ITEM[] = GT_ITEM[].
        SORT VT_ITEM BY PRODUCT.
        DELETE ADJACENT DUPLICATES FROM VT_ITEM COMPARING PRODUCT.
        SELECT * INTO TABLE GT_PRTEXT
          FROM COMM_PRSHTEXT
          FOR ALL ENTRIES IN VT_ITEM
          WHERE PRODUCT_GUID = VT_ITEM-PRODUCT
          AND   LANGU = 'J'.

        CONCATENATE SY-DATUM SY-UZEIT INTO GV_TIMESTMP.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_PRICE
          FROM CNCCRMPRSAP032
          FOR ALL ENTRIES IN VT_ITEM
          WHERE PRODUCT     = VT_ITEM-PRODUCT
          AND   SALES_ORG   = 'O 50000231'
          AND   DIS_CHANNEL = '11'
          AND   PRICE_GRP   IN ('11','12','03')
          AND   KSCHL       = 'ZPR0'
          AND   TIMESTAMP_TO >= GV_TIMESTMP
          AND   TIMESTAMP_FROM < GV_TIMESTMP.
      ENDIF.
      "取维修工单抬头
      VT_ADM[] = GT_ADM[].
      DELETE VT_ADM WHERE OBJECT_ID_H IS INITIAL.
      IF VT_ADM[] IS NOT INITIAL.
        SELECT GUID AS GUID_H
             OBJECT_ID
             CREATED_AT
             ZZZMODENO
             ZZCLIENT_TYPE
             PO_NUMBER_SOLD
        INTO CORRESPONDING FIELDS OF TABLE LT_RESU
        FROM ZHSB_ORDER_INDEX
        FOR ALL ENTRIES IN VT_ADM
        WHERE OBJECT_ID = VT_ADM-OBJECT_ID_H
        AND   PROCESS_TYPE   = 'ZSV1'.
      ENDIF.

      CHECK LT_RESU[] IS NOT INITIAL.


      IF LT_RESU[] IS NOT INITIAL.
        SELECT A~GUID_HI"    TYPE CRMT_OBJECT_GUID,
           A~GUID_SET"   TYPE CRMT_OBJECT_GUID,
           B~PARTNER_NO" TYPE CRMT_PARTNER_NO,
           C~PARTNER
           C~BU_SORT1
      INTO CORRESPONDING FIELDS OF TABLE LT_PARTNER
      FROM CRMD_LINK AS A
      INNER JOIN CRMD_PARTNER AS B
      ON A~GUID_SET = B~GUID
      AND B~PARTNER_FCT = 'ZHSI00SN'
      INNER JOIN BUT000 AS C
      ON B~PARTNER_NO = C~PARTNER_GUID
      FOR ALL ENTRIES IN LT_RESU
      WHERE A~GUID_HI = LT_RESU-GUID_H
      AND   A~OBJTYPE_SET = '07'.
      ENDIF.
    ENDIF.




    LOOP AT GT_ADM INTO GW_ADM.
      READ TABLE GT_PARTNER INTO GW_PARTNER WITH KEY GUID_HI = GW_ADM-GUID_H."过滤条件
      IF SY-SUBRC = 0.
        READ TABLE LT_RESU INTO LS_RESU WITH KEY OBJECT_ID = GW_ADM-OBJECT_ID_H.
        IF SY-SUBRC = 0.
          MOVE-CORRESPONDING LS_RESU TO LS_RESULT.
          READ TABLE LT_PARTNER INTO LS_PARTNER WITH KEY GUID_HI = LS_RESU-GUID_H.
          IF SY-SUBRC = 0.
            LS_RESULT-BU_SORT1 = LS_PARTNER-BU_SORT1.
          ENDIF.
          LOOP AT GT_ITEM INTO GW_ITEM WHERE HEADER = GW_ADM-GUID_H."销售订单项目
            LS_RESULT-ZZZTRACKRETURN = GW_ADM-ZZZTRACKRETURN."跟踪单号
*            LS_RESULT-PRODUCT = GW_ITEM-PRODUCT."产品GUID
            LS_RESULT-ORDERED_PROD = GW_ITEM-ORDERED_PROD.
            LS_RESULT-PRODUCT_ID = GW_ITEM-ORDERED_PROD.
            LS_RESULT-QUANTITY = GW_ITEM-QUANTITY.

            READ TABLE GT_PRTEXT INTO GW_PRTEXT WITH KEY PRODUCT_GUID = GW_ITEM-PRODUCT.
            IF SY-SUBRC = 0.
              LS_RESULT-SHORT_TEXT = GW_PRTEXT-SHORT_TEXT.
            ENDIF.

            LOOP AT GT_PRICE INTO GW_PRICE WHERE PRODUCT = GW_ITEM-PRODUCT.
              CASE GW_PRICE-PRICE_GRP.
                WHEN '03'."End User
                  LS_RESULT-SUBTOTAL3 = GW_PRICE-KBETR.
                WHEN '11'."Retailer
                  LS_RESULT-SUBTOTAL1 = GW_PRICE-KBETR.
                WHEN '12'."Distributor
                  LS_RESULT-SUBTOTAL2 = GW_PRICE-KBETR.
                WHEN OTHERS.
              ENDCASE.
            ENDLOOP.

            APPEND LS_RESULT TO GT_RESULT.

          ENDLOOP.
        ENDIF.
      ENDIF.
    ENDLOOP.

    SET_RESULT."添加结果

  ENDMETHOD.

4.编辑BOL类:

事务代码:GENIL_MODEL_EDITOR

输入组件:ZCRMOD 点击创建

点击查询结果对象,右键创建:

 

点击动态查询对象,右键新建:ZODSEARCH

 

实施类:ZCL_DOWNLOAD_ORDER_IL

 

5.SPRO新建组件集,添加组件到组件集

 

6.UI组件:

事务代码:BSP_WD_CMPWB

输入组件名称:ZPARTLIST创建,

运行时资源库,添加组件集

退出重新事务代码进入,右键视图,创建搜索页面。根据向导一直做完就可以了,然后配置页面,就OK了

转载于:https://www.cnblogs.com/sapSB/p/6823522.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值