• UI基础三:简单的BOL报表开发


    巧了。。。刚好一个需求,就直接来撸起来吧。

    需要做一个报表:

    1.创建查询结构和结果结构

    2.创建实施类:

    SE24创建ZCL_JPEXPORT_ORDER_IL

    更改父类:CL_WCF_GENIL_ABSTR_COMPONENT

    重定义方法:GET_DYNAMIC_QUERY_RESULT

      METHOD if_genil_appl_intlay~get_dynamic_query_result.
        TYPES:BEGIN OF ty_order,
                guid         TYPE crmt_object_guid,
                object_id    TYPE crmt_object_id_db,
                process_type TYPE crmt_process_type,
              END OF ty_order,
              BEGIN OF ty_product,
                product_guid TYPE comt_product_guid,
                product_id   TYPE comt_product_id,
                short_text   TYPE comt_prshtextx,
              END OF ty_product,
              BEGIN OF ty_part,
                guid_hi     TYPE crmt_object_guid,
                addr_nr     TYPE ad_addrnum,
                addr_type   TYPE ad_adrtype,
                partner_fct TYPE crmt_partner_fct,
              END OF ty_part,
              BEGIN OF ty_adrc,
                addrnumber TYPE ad_addrnum,
                name1      TYPE ad_name1,
                smtp_addr  TYPE ad_smtpadr,
                tel_number TYPE ad_tlnmbr1,
                street     TYPE ad_street,
                str_suppl1 TYPE ad_strspp1,
                str_suppl2 TYPE ad_strspp2,
                post_code1 TYPE ad_pstcd1,
                city1      TYPE ad_city1,
              END OF ty_adrc.
    
        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_process_type TYPE RANGE OF crmt_process_type,
              rs_process_type LIKE LINE OF rt_process_type,
              rt_cgi_date     TYPE RANGE OF zadtel00009q,
              rs_cgi_date     LIKE LINE OF rt_cgi_date,
              rt_cgi_time     TYPE RANGE OF zadtel00009u,
              rs_cgi_time     LIKE LINE OF rt_cgi_time,
              lx_root         TYPE REF TO cx_root.              "#EC NEEDED
        DATA:gt_order   TYPE TABLE OF ty_order,
             gw_order   LIKE LINE OF gt_order,
             gt_product TYPE TABLE OF ty_product,
             gw_product LIKE LINE OF gt_product,
             gt_part    TYPE TABLE OF ty_part,
             vt_part    TYPE TABLE OF ty_part,
             gw_part    LIKE LINE OF gt_part,
             gt_adrc    TYPE TABLE OF ty_adrc,
             gw_adrc    LIKE LINE OF gt_adrc,
             gv_index   TYPE i. "
    
        DATA ls_selection_paras TYPE genilt_selection_parameter.
        DATA lt_where_condition TYPE crmt_report_dyn_sql_line_ta.
    
        DATA: gt_result TYPE TABLE OF zcrms0056,
              vt_result TYPE TABLE OF zcrms0056,
              ls_result TYPE          zcrms0056.
    
        DATA: lv_maxhit     TYPE          int4,
              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 = 'ZTCRESULT'
                                            IS_OBJECT_KEY = LS_RESULT-GUID ).
             LV_OBJECT_KEY = LS_RESULT-GUID.
             LR_OBJECT->SET_KEY( LV_OBJECT_KEY ).
             LR_OBJECT->SET_ATTRIBUTES( LS_RESULT ).
             CLEAR LS_RESULT.
          ENDLOOP.
        END-OF-DEFINITION .
    
    
    
        lt_selection = it_selection_parameters.
    *    SORT LT_SELECTION BY ATTR_NAME.
        LOOP AT lt_selection INTO ls_selection.
          CASE  ls_selection-attr_name.
            WHEN 'ZZAFLD00001Y'.
              MOVE-CORRESPONDING ls_selection TO rs_cgi_time.
              INSERT rs_cgi_time INTO TABLE rt_cgi_time.
            WHEN 'PROCESS_TYPE'.
              MOVE-CORRESPONDING ls_selection TO rs_process_type.
              INSERT rs_process_type INTO TABLE rt_process_type.
            WHEN 'ZZAFLD00001X'.
              MOVE-CORRESPONDING ls_selection TO rs_cgi_date.
              INSERT rs_cgi_date INTO TABLE rt_cgi_date.
          ENDCASE.
        ENDLOOP.
    
        lv_maxhit = is_query_parameters-max_hits.
    
        SELECT b~guid
               a~guid AS header
               a~po_number_sold
               a~zzztrackreturn
               a~zzafld000001
               b~zzafld00001x AS zzgi_date
               b~description AS short_text
          INTO CORRESPONDING FIELDS OF TABLE gt_result
          FROM zhsb_sales_index AS a
          INNER JOIN crmd_orderadm_i AS b
          ON a~guid = b~header
          WHERE a~process_type = 'ZSO5'
          AND a~sales_org    = 'O 50000231'
          AND a~sold_to_party = '0000202693'
          AND b~zzafld00001x IN rt_cgi_date
          AND b~zzafld00001y IN rt_cgi_time
          AND b~itm_type     = 'ZSO5'.
    
        "取前置服务工单
        vt_result[] = gt_result[].
        DELETE vt_result WHERE po_number_sold IS INITIAL.
        IF vt_result[] IS NOT INITIAL.
          SELECT guid
                 object_id
                 process_type
            INTO TABLE gt_order
            FROM zhsb_order_index
            FOR ALL ENTRIES IN vt_result
            WHERE object_id = vt_result-po_number_sold+0(10)
            AND   process_type = 'ZSV1'.
        ENDIF.
    
        "取合作伙伴ship to
        REFRESH:vt_result.
        vt_result[] = gt_result[].
        SORT vt_result BY header.
        DELETE ADJACENT DUPLICATES FROM vt_result COMPARING header.
        IF vt_result[] IS NOT INITIAL.
          SELECT crmd_link~guid_hi
               crmd_partner~addr_nr
               crmd_partner~addr_type
               crmd_partner~partner_fct
          INTO TABLE gt_part
          FROM crmd_link
          INNER JOIN crmd_partner
          ON crmd_link~guid_set = crmd_partner~guid
          FOR ALL ENTRIES IN vt_result
          WHERE crmd_link~guid_hi = vt_result-header
          AND   crmd_partner~partner_fct = '00000002'
          AND   crmd_link~objtype_set = '07'."PARTNER
    
          REFRESH:vt_part.
          vt_part[] = gt_part[].
          SORT vt_part BY addr_nr.
          DELETE ADJACENT DUPLICATES FROM vt_part COMPARING addr_nr.
          IF vt_part[] IS NOT INITIAL.
            SELECT adrc~addrnumber
            adrc~name1
            adr6~smtp_addr
            adrc~tel_number
            adrc~street
            adrc~str_suppl1
            adrc~str_suppl2
            adrc~post_code1
            adrc~city1
            INTO TABLE gt_adrc
            FROM adrc
            LEFT JOIN adr6
            ON adrc~addrnumber = adr6~addrnumber
            FOR ALL ENTRIES IN vt_part
            WHERE adrc~addrnumber = vt_part-addr_nr.
            REFRESH:vt_part.
          ENDIF.
        ENDIF.
    
        SORT gt_part BY guid_hi.
        SORT gt_adrc BY addrnumber.
        LOOP AT gt_result INTO ls_result.
          READ TABLE gt_order INTO gw_order WITH KEY object_id = ls_result-po_number_sold+0(10).
          IF sy-subrc <> 0.
            CONTINUE.
          ENDIF.
    
          ls_result-name2 = '固定值'.
          "赋值联系人信息
          READ TABLE gt_part INTO gw_part WITH KEY guid_hi = ls_result-header BINARY SEARCH.
          IF sy-subrc = 0.
            READ TABLE gt_adrc INTO gw_adrc WITH KEY addrnumber = gw_part-addr_nr BINARY SEARCH.
            IF sy-subrc = 0.
              ls_result-tel_number = gw_adrc-tel_number.
              ls_result-post_code1 = gw_adrc-post_code1.
              ls_result-street = gw_adrc-street.
              ls_result-str_suppl1 = gw_adrc-str_suppl1.
              ls_result-name1 = gw_adrc-name1.
            ENDIF.
          ENDIF.
    
          MODIFY gt_result FROM ls_result.
        ENDLOOP.
    
    
        set_result.
    
      ENDMETHOD.

    注意在处理Object key的时候一定不能有重复,不然会dump

    3.创建BOL对象

    t-code:GENIL_MODEL_BROWSER

    创建结果对象

    定义动态搜索对象:

    到此对象创建完成,点击transport将对象数据添加到请求中

    4.创建组件集:

    5.创建搜索页面

    T-CODE:BSP_WD_CMPWB

    输入组件名:ZHSI_JPEXP点击创建

    4.1添加BOL模型节点

    点击:Runtime Repository Editor

    点击编辑按钮

    右键Model节点,添加model:ZJPEXP保存

    4.2创建搜索页面:

  • 相关阅读:
    OCI读取单条记录(C)
    共享内存shmget shmat shmdt
    Linux系统下的多线程编程入门
    如何让errno多线程/进程安
    linux的mount(挂载)命令详解
    取得系统时间并以BCD形式保存到字符串中
    电脑上的搜索功能用不了了,怎么办?
    如何建立Linux下的ARM交叉编译环境
    C#网络编程之Http请求
    深入了解Oracle前滚恢复rolling forward(一)
  • 原文地址:https://www.cnblogs.com/sapSB/p/7723008.html
Copyright © 2020-2023  润新知