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

需要做一个报表:

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创建搜索页面:

UI基础三:简单的BOL报表开发的更多相关文章

  1. 利用JasperReport+iReport进行Web报表开发

    用JasperReport+iReport进行Web报表开发 序言 在非常多实际的项目里,报表都是当中十分重要的组成部分,比如把查询结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥 ...

  2. iOS开发UI篇—Quartz2D简单使用(三)

    iOS开发UI篇—Quartz2D简单使用(三) 一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界 ...

  3. iOS开发UI基础—手写控件,frame,center和bounds属性

    iOS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  4. 使用C#和Excel进行报表开发(三)-生成统计图(Chart)

    有的Web项目选用Excel作为报表方案,在服务器端生成Excel文件,然后传送到客户端,由客户端进行打印.在国内的环境下,相对PDF方式,Excel的安装率应该比pdf阅读器的安装率要高,同时,微软 ...

  5. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

  6. iOS开发UI篇—Modal简单介绍

    iOS开发UI篇—Modal简单介绍 一.简单介绍 除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展⽰出来 Modal的默认效果:新控制器从屏幕的 ...

  7. iOS开发UI篇—Kvc简单介绍

    ios开发UI篇—Kvc简单介绍 一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observ ...

  8. iOS开发UI篇—UIWindow简单介绍

    iOS开发UI篇—UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...

  9. iOS开发UI篇—Quartz2D简单介绍

    iOS开发UI篇—Quartz2D简单介绍 一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\ ...

随机推荐

  1. Termux 一款安卓终端模拟器

    Termux官网 https://termux.com/ 用处 提供了一个类似于Linux终端的界面,可以使用apt安装程序.目前我在上面跑了我以前写的一些爬虫脚本,运行完全没有问题. 玩法 玩法还是 ...

  2. 小程序之取标签中内容 例如view,text

    // index.wxml页面 data-url为自定义 {{}}中内容可为后台请求到的数据 也可为固定内容例如:data-text="哈哈哈" data-url="ht ...

  3. CZK 的饮料店

    [题目描述] 一天,小学生 cyx 向你请教了一道他不会做的小学数学题,你瞄了一眼题目,发现题目长下面这样. czk 老板开了个饮料连锁店,连锁店共有 n 家,出售的饮料种类相同. 为了促销,czk ...

  4. Vue技巧

    转载:https://segmentfault.com/a/1190000014085613?utm_source=channel-hottest 对自己有用,做个笔记,有兴趣可以去以上地址去看. 第 ...

  5. java操作vaftpd实现上传、下载

    1.配置文件conf/vsftpd.properties (我是单独写了一个配置文件,你可以直接写在application中) vsftpd.ip=192.168.**.** vsftpd.user= ...

  6. ace后台管理系统扁平化框架

    Bootstrap ACE后台管理界面模板(扁平化) 所属分类:后台模板 文件大小:1.22 MB 阅读:236697次 下载:55929次 来源:www.daimajiayuan.com 分享到:更 ...

  7. 第 6 章 存储 - 042 - 用 volume container 共享数据

    volume container volume container 是专门为其他容器提供 volume 的容器.它提供的卷可以是 bind mount,也可以是 docker managed volu ...

  8. nodejs模拟http发送请求

    首先需要安装模块request,然后代码如下: //模拟发送http请求 var request = require("request"); //get请求 request('ht ...

  9. Oracle:如何创建一个只有查看权限的用户

    因为工作中测试环境和开发环境是分开的,所以开发有时处理bug时需要连接测试数据库,这样出现一个问题是有些开发会为了验证某些问题任意改动数据库的表和字段,对测试库造成污染.为了能够让开发连接测试环境,同 ...

  10. Python学习笔记之参数解析

    python提供了两种方法进行命令行的参数解析,分别是getopt和optparse类中的模块OptionParser,下面分别详细了解这两个模块: 1.getopt模块 首先复习C语言的命令行解析: ...