巧了。。。刚好一个需求,就直接来撸起来吧。
需要做一个报表:
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 = ''
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+()
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 = ''
AND crmd_link~objtype_set = ''."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+().
IF sy-subrc <> .
CONTINUE.
ENDIF. ls_result-name2 = '固定值'.
"赋值联系人信息
READ TABLE gt_part INTO gw_part WITH KEY guid_hi = ls_result-header BINARY SEARCH.
IF sy-subrc = .
READ TABLE gt_adrc INTO gw_adrc WITH KEY addrnumber = gw_part-addr_nr BINARY SEARCH.
IF sy-subrc = .
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创建搜索页面: