报表语义模型(数据加工:返回SQL方式)
数据加工方式:1.返回查询SQL ; 2.返回结果集DataSet3.返回数据表(下次做了提供案例)
实现方式基本一致,可以参照系统原有报表语义模型(抱歉不详细仅供参考)
1、实现基本思路概况(不详细比较啰嗦)
1. 首先不管语义模型数据加工是返回SQLDataSet或者TABLE任何一种类型基本实现步骤一致;
2. 先按需求实现的难易程度来选择使用以上那种方式来实现:一般数据都能SQL查询出    来的,偶尔有一两点数据取不到可以选择返回SQL,不会取数的那段创建临时表;如果是基本上都是东拼西凑的取数那就返回DataSet方式;最后一种时返回TABLE这种场景标准产品用的也不多,后续提供案例;
3. 数据加工做语义脚本肯定需要定义接口和实现类,确定好报表属于那个模块创建接口和实现类并配置好接口文件UPM就好,具体配置可以参考改模块其他接口文件;
4. 数据加工接口参数一一般都是传com.ufida.dataset.IContext或者                nc.t.SmartContext,这个是报表上下文,所有查询参数及系统变量
5. 都放在这个里面,语义模型与接口里面这个两个context 基本可以互相转换,后面案例就可以看出;
6. 不要想着是不是我要先把语义模型和自由报表配置好了再写数据加工代码,没用!正确可行的方式先写数据加工代码;
7. 首先就要自己明确报表的取数逻辑,脑海大概设计下大概的代码怎么写;
8. 确定查询条件及数据类型,接口实现类里面定义全局变量查询条件(推荐做个app的费用大概多少)默认否赋值,方便调试代码,因为这块还没用到查询模板,没法动态获取查询条件,后面分配了查询模板重新覆盖查询变量值就好了(数据加工报表只能做单据查询模板那种分配给报表节点)
9. 如果是DataSet返回方式的接口实现类里面定义好元数据列及数据类型,SQL返回方式没有这一步操作;
10. 然后就是写报表取数逻辑代码,按自己默认设定查询变量值去写好代码及判断逻辑,最后返回数据(SQLDataSet或者TABLE);
11. 客开报表一般把语义模型和自由报表定义在集团或者全局的节点,这也是规范和经验所得;
12. 在语义模型-集团(举例,全局节点也行)节点定义好自己的与模型,点设计弹出界面数据加工放入调用写好的数据加工过接口进行代码调试及代码纠正;
13. 现在调试接口参数context基本上时没有什么数据的,目前也不会有查询条件字段在里面,没有分配给节点查询模板呢,打开报表节点查询调用代码才能看到里面很多参数和值,所以暂时接口实现类不初始化查询参数方法及校验;
14. 语义模型数据加工里面放入调用接口代码,格式化,编译通过,下一步,代码成功的话会正常返回报表字段列(元数据)页签,点确定,“3选择字段”自己添加字段列,这里的字段必须是代码返回的,不能自己随便新增无效的;自己添加字段“表达式大方框”必须选择左下角“数据加工(dp)”里面的字段,这个表达式里面可以写公式;最后解释下“数据加工(dp)”这个命名都是这样写规范,防止其他实施不随意修改。
15. 然后就是自由报表设计了,在“自由报表-集团”或者“自由报表-全局”节点,引入刚才做好的语义模型文件,设计报表界面及相关统计等(这里不多说,不懂问实施或开发);
16. 记得自由报表设计界面有右上角“标题”左边有个“主组织属性设置”螺丝一样的按钮,如果是报表存在组织查询条件的报表,这里必须设置集团和组织字段(代码或者SQL里面默认字段pk_orgpk_group)就不需要你设置,自动识别,否则需要手动设置(集团节点设置pk_group,反之都设置),如果这里没设置,可能出现语义模型可以预览数据,而自由报表预览无数据现象。一般不需要查询组织条件的报表,报表字段只需要业务字段+pk_group,发布组织类型为集团的报表节点即可;如果需要用到组织查询的报表,报表字段只需要业务字段+pk_group+pk_org,发布组织类型为具体组织(销售、库存、财务等)的的报表节点。
17. 自由报表界面格式设计好了就需要发布节点,如果改报表用不到组织字段那就发布集团类型的报表节点;如果用到了组织,那就发布具体的组织(销售、库存、财务等)的节点。