搜索
您的当前位置:首页正文

报表组件模型开发规范

2023-08-02 来源:易榕旅网


用友软件股份有限公司研发过程

U9报表组件模型开发规范

文件编号:版本号:修改状态:编写人:审核人:批准人:批准时间:

U9-SE-××-SPEC-×× 0

吴运刚/陈宇 2008-07

第 1 页 共 18 页

适用对象

该规范适用于U9报表设计人员和开发人员。

版本记录

【此部分要记录该文档形成过程中的历次版本变更过程及变更的内容】 版本

1.0

修改与参与人

吴运刚/陈宇

修改时间

2008/07/01

修改原因

原始文档建立

修改概述 审批人

相关文档

¾ 《U9研发体系(交互设计规范)》

约定

标有 ★ 的条目表示强制性规范。

第 2 页 共 18 页

报表组件模型开发规范细则

1. 报表开发规范

1.1. 概论

报表的开发,涉及UI、组件、报表工具多个方面的设计。为了保证报表开发模式的一致性,制定了该规范。

其中:

UI的通用规范,按照《UBF2.5.1UI编程实践.doc》《U9 V1.0 交互设计规范》执行 组件的通用规范:按照《Object Query Language 使用指南.doc》《U9组件-开发规范标准细则》执行

1.2. UI(报表界面)

报表界面交互,整体要符合《U9 V1.0交互设计规范》。

1.2.1. 解决方案命名规则

名称:服务组名称+RptUI组成。 粒度:一个服务组一个解决方案

举例:

当前服务组是GL,那么解决方案的名称就为GLRptUI.ubfsln。

1.2.2. 项目命名规则

名称:报表名称+RptUI; 粒度:一张报表一个项目

举例:

GL总账,命名为GeneralLedgerRptUI.ubfuiproj。

第 3 页 共 18 页

1.2.3. 项目装配件属性命名规则

名称:UFIDA.U9.领域名称.服务组.报表名称+RptUI

注:修改方法:在模型视图中选中项目,然后查看其属性。 属性中的“配件名”即该项目的装配件属性。

举例:

财务领域的总账服务组中的总账:UFIDA.U9.FI.GL.GeneralLedgerRptUI

1.2.4. UIModel的命名规则

名称:报表名称+RptUIModel

举例:

总账的名称为:GeneralLedgerRptUIModel

1.2.5. UIModel的命名空间的命名规则

名称:UFIDA.U9.服务组.报表名称+UIModel; 注:UIModel的命名空间修改方法:双击*.ubfuim视图中的用户界面模型树中的根节点。弹出画面中的“命名空间”项。

举例:

总账的命名空间:

UFIDA.U9.GL.GeneralLedgerRptUIModel;

1.2.6. UIForm的命名规则

名称:报表名称+RptUIForm

举例:

第 4 页 共 18 页

总账的结果画面UIForm的名称: GeneralLedgerRptUIForm。

1.3. ReportTemplate(报表模版)

1.3.1. 解决方案命名规则

名称:领域名称+RptTemplate组成。 粒度:一个领域一个解决方案

举例:

财务领域,解决方案的名称为FIRptTemplate.ubfsln。

1.3.2. 项目命名规则

名称:服务组名称;

粒度:一个服务组一个项目

举例:

总账:命名为GL.ubfanproj。

1.3.3. 报表命名规则

名称:报表名称 举例:

总账,GeneralLedger.urdl。

1.3.4. 参数规则

报表参数、查询参数、DataCommand中参数三者要保持一致。

第 5 页 共 18 页

1.4. ProcessStratety(报表处理策略)

1.4.1. 解决方案命名规则

名称:领域名称+RptProcessStrategy组成。 粒度:一个领域一个解决方案

举例:

财务领域,解决方案的名称为FIRptProcessStrategy.sln。

1.4.2. 项目命名规则

名称:UFIDA.U9.服务组.Report.ProcessStrategy 粒度:一个服务组一个项目

举例:

总账:UFIDA.U9.GL.Report.ProcessStrategy.csproj

1.4.3. 项目装配件属性命名规则

名称:UFIDA.U9.服务组.Report.ProcessStrategy

举例:

总账:UFIDA.U9.GL.Report.ProcessStrategy

1.4.4. 命名空间属性命名规则

名称:UFIDA.U9.服务组.Report.ProcessStrategy

举例:

总账:UFIDA.U9.GL.Report.ProcessStrategy

第 6 页 共 18 页

1.5.

DataCommand(报表数据)

1.5.1. 解决方案命名规则

名称:领域名称+RptDataCommand组成。 粒度:一个领域一个解决方案

举例:

财务领域,解决方案的名称为FIRptDataCommand.sln。

1.5.2. 项目命名规则

名称:UFIDA.U9.服务组.Report.DataCommand 粒度:一个服务组一个项目

举例:

总账:UFIDA.U9.GL.Report.DataCommand.csproj

1.5.3. 项目装配件属性命名规则

名称:UFIDA.U9.服务组.Report.DataCommand

举例:

总账:UFIDA.U9.GL.Report.DataCommand

1.5.4. 命名空间属性命名规则

名称:UFIDA.U9.服务组.Report.DataCommand

举例:

总账:UFIDA.U9.GL.Report.DataCommand

第 7 页 共 18 页

1.5.5. 类命名规则

DataCommand类命名 :报表名称+Cmd DataSource类命名 :报表名称+Ds

举例:

总账数据源: GeneralLedgerDs

总账DataCommand :GeneralLedgerCmd

1.5.6. ReportParams命名规则

Cmd+ DS1 Cmd+ DS2 …..

Cmd+ DSn

1.6. 业务处理规范 1.6.1. OQL调用规范

使用代码生成工具,先生成 框架代码 ,然后在DataCommand类文件中添加必要的逻辑代码

注意:

󰂋 1 代码中需要访问数据库的地方都必须使用 EntityViewQuery来执行

Oql的方式来处理,不能通过实体来查询 󰂋 后台处理不能直接调用BE或BP。

1.6.2. 条件校验规范

对条件项的所有校验都在UI端进行,必输校验由条件控件完成(需要在条件定义时,将

) 是否为空设为否),其他的校验,在报表处理策略中完成。(重载VerifyParameters()

1.6.3. DataCommand提交规范

DataCommand类的提交标准,必须通过测试用例的验证,才能部署到报表服务器上。

第 8 页 共 18 页

2. 报表发布规范

2.1. 报表各个角色职责

2.1.1. 报表服务组负责人

󰂗 󰂗 󰂗 󰂗

例如:GL服务组 在U9UICode\\U9.VOB.PD.FI\\GL\\Model\\ 下创建 ReportMetaData 报表开发人员将自己的报表通过UBFStudio 导出到该目录 更新CC视图后,进入UBFStudio中报表元数据管理界面,点中GL服务组, 右键点导入操作,选择元数据所在目录,如下图

在U9UICode视图中建立元数据目录。 更新本服务组报表元数据目录。

在UBFStudio报表元数据管理导入。 导出到U9Data视图中相应位置。

导入完毕后,在右键点导出,选择

U9Data\\U9.VOB.Data\\SystemData\\StdSqlScript\\ReportMetaData\\Report\\FI\\GL

第 9 页 共 18 页

2.1.2. 报表开发人员

󰂗 将自己负责的报表导出到U9UICode视图中相应位置,并加入到CC

2.2.

元数据管理

2.2.1. 导出元数据位置

各个开发部门负责维护自己的报表发布和导出。位置分别为U9Data视图中的

U9Data\\ U9.VOB.Data\\SystemData\\StdSqlScript\\ReportMetaData\\Report\\FI U9Data\\ U9.VOB.Data\\SystemData\\StdSqlScript\\ReportMetaData\\ Report \\SCM U9Data\\ U9.VOB.Data\\SystemData\\StdSqlScript\\ReportMetaData\\ Report \\MFG U9Data\\ U9.VOB.Data\\SystemData\\StdSqlScript\\ReportMetaData\\ Report \\HR

2.2.2. 报表模型结构

服务组名称-报表名称

第 10 页 共 18 页

3. 报表模板开发规范

1.1 报表布局规范

一般文本格式:宋体, 9pt,黑色,居左,行高:0.2 1.1.1 表头

1) 标题

字体:宋体, 11pt, style=Bold 边框颜色:White 位置(X/Y):0.050/0.01

1.1.2 明细

1) 表格头:

行度:0.2 字体:宋体, 9pt

背景色:RGB(230,230,230) 文本位置:居中 2) 表格体

第 11 页 共 18 页

行度:0.2 字体:宋体, 9pt 背景色:White

文本位置:文字居左、数字居右、时间居左(?) 3) 表格尾

行度:0.2 字体:宋体,9号

背景色:RGB(255,244,171) 1.1.3 表尾

1.2 报表条件项规范

1.2.1 条件项之间的约束控制

1) 需求文档里特殊说明的需要才进行控制。例如,要输入账簿,才能选择会计期间;

1.2.2 条件操作符规范

需求文档中的取值方式与平台条件项的匹配:

1.2.3 其它条件项规范

1) 基本条件和高级条件全部由需求指定,需求未指定的不作为条件。

2) 文档里默认方案=y的,是默认基本条件,需求文档里默认方案=F的为固定条件,不能从基本条件中移除。

1.3 报表栏目项规范

1) 报表的可选栏目全部由需求指定,需求未指定的,不提供。

2) 栏目和行分组在需求文档中注明是固定列的(固定显示(F)),必须显示在已选项,且不能从已选项中删除。

3) 在矩阵展现的报表中,可做交叉单元的项(如数量、金额等数值型字段)放在备选栏目,其他项放在行分组或列分组。

4) 如果在查询条件中同时存在同一实体属性的编码和名称,则编码字段使用参照录入,名称字段使用手工录入。如:料号为参照,品名按字符串过滤

1.4 报表行/列分组和表头项规范

1) 被选中的行列分组,是可以被作为表头项。(表头项目可动态增加,动态显示,上限为15个)。

2) 表头项参照的内容,如果在条件里已经输入了范围,则是满足条件项的值,否则是

第 12 页 共 18 页

全部的值。

3) 分组汇总项中的某段在作为表头过滤字段后,表头项为空时在列表中显示,否则不显示。

1.5 关于报表中参照的规范

1、关于条件参照和表头项参照:

1)应该与单据一致,档案用参照,枚举用下拉框。

2)公共档案的参照应该尽量一致,尤其是统计期间/会计期间/客户/部门等公共档案。 3)档案参照支持手工输入,可以不校验,与匹配符进行匹配。 2、动态值集的参照以及过滤 值集之间的参照有依赖关系。如:料品为动态值集,有4级分类,则首先查询方案中料品各值集段应该全部为参照,其次,只有当录入一级分类后二级分类才可用,三级和四级以此类推。

1.6 币种/币符/精度设置规范

1) 金额值之前都要增加币符,且按币种精度显示。本币不绑定币符。

2) 金额合计/小计,如果币种相同,则显示币符,如果币种不同,则不显示币符,精度按各个币种的最大精度显示,且币种必须做为分组项。

3) 数量的精度根据计量单位的设定显示,对于数量合计/小计,如果精度不一致,按最大的精度显示。

4) 百分数的精度:根据常规精度为2。

1.7 多组织查询规范

1.7.1 多组织的查询/统计分为两类

1、 相同职能组织,上级组织可以查询下级组织的数据,称为垂直多组织查询。

例如,上级营运组织查询其下属的某个营运组织的销售情况,或者查询其下属多个营运组织的销售汇总情况。

2、 不同职能组织,可以查询对应职能组织的数据,称为平行多组织查询。

例如,某个营运组织,查询其在各个核算组织的应收的情况。

一个查询,通常即会涵盖垂直组织的查询,又涵盖平行组织的查询。

1.7.2 垂直多组织查询规范

1、 在查询条件上,‘组织’要作为一个查询条件,并且是多选值,可以选择当前登陆组织

的当前职能垂直关系档上的所有下级组织。默认为当前登录组织。(见下例的核算组织描述)

2、 组织可以被做为汇总项目(GroupBy),也可以被做为分组项目(Item By)。(见下例的

核算组织描述)

3、 查询条件上的其他对象(主要指基本档案,例如客户)的范围,依据所选的组织确定。

如果选择的组织范围是单一组织,则相关其他对象取该组织的;如果选择的组织范围是多组织,则相关的其他对象取当前登录组织的。(见下例的立账客户描述)

4、 如果选择的组织范围是多组织,则不支持按会计期间/统计期间查询,只能按日期范围

第 13 页 共 18 页

查询。(见下例的期间类型描述)

5、 多组织查询,对于组织间下发的对象,可以汇总。(见下例的立账客户描述)

以应收的‘应收余额表’为例: 核算组织垂直关系树如下:

—A1 —A2 —A21 B

—B1

当前登录组织是A A组织客户档如下:

客户甲(下发给A1、A2) 客户乙 客户丙

应收余额表的查询条件如何支持多组织:

查询条件

取值范围

是否分组汇总

核算组织

多选

Y

是否分组项目Y

是否排序项目 Y

1、从应收的角度看就是垂直组织; 2、默认当前登录组织A

3、可以选择A、A1、A2、A21,不

能选择B和B1

来源组织立账客户

多选

Y Y

Y Y

Y Y

如果核算组织选择的是A,则客户档参照的是A组织的客户档;

如果核算组织选择的是A1,则客户档参照的是A1组织的客户档;

如果核算组织选择的是A+A1+A2,则客户档参照的是A组织的客户档; 在按客户汇总时,只有客户甲能进行汇总;

期间类型

会计期间 统计期间 单据日期

如果核算组织选择的是单组织,则可以任意选择

如果核算组织选择的是多组织,则只能选择单据日期

期间

Y 如果核算组织选择的是A,则会计/统计期

间参照的是A组织的;

如果核算组织选择的是A1,则会计/统计期间参照的是A1组织的;

...物料应收余额高级条件区

Y

Y

Y

同客户的参照 说明

第 14 页 共 18 页

收款员。。。

1.7.3 平行多组织查询规范

1、 一个查询活动,要在相关职能的功能结点中都体现出来。

例如,上例的‘应收余额表’要在财务、销售的职能中都挂。 在财务职能中挂,是从核算组织的角度,看客户的应收余额; 在销售只能中挂,是从营运组织的角度,看客户的应收余额; 两者的出发点是不同的,具体对应到数据表的字段也是不同的.

2、 同一个查询活动,从不同的职能进入,只是查询条件的默认值和查询条件的约束不同,

查询的逻辑和结果应该是一样的。应该能在文档中对查询条件从不同的职能进入进行说明。

3、 垂直多组织是相对职能来说的。同样的‘应收余额表’,在销售职能中,来源组织是垂

直组织,在财务职能中,核算组织是垂直组织。 还以应收的‘应收余额表’为例: 核算组织垂直关系树如下:

—A1 —A2 —A21 B

—B1

营运组织垂直关系树如下:

—X1 —X2 Y

—Y1

营运—核算组织平行关系是:

X -A X1-B X2-A1

应收余额表的查询条件如何支持多组织:

查询条件

从核算组织/财务职能进入 当前登录组织是A

核算组织

1、从应收的角度看就是垂直组织; 2、默认当前登录组织A

不能选择B和B1 4、不能为空

来源组织

1、 根据所选的来源组织范围,从组织

间平行关系档过滤出来源组织; 2、 可以为空

1、 从销售的角度看就是垂直组织; 2、 默认当前登录组织X

3、 可以选择X、X1、X2,不能选从营运组织/销售职能进入 当前登录组织是X

1、 根据所选的来源组织范围,从组织

间平行关系档过滤出核算组织;

3、可以选择A、A1、A2、A21,2、 可以为空;

第 15 页 共 18 页

择Y和Y1 4、 不能为空;

立账客户

1、 如果核算组织选择的是A,则客户

档参照的是A组织的客户档; 2、 如果核算组织选择的是A1,则客

户档参照的是A1组织的客户档;3、 如果核算组织选择的是A+A1+

A2,则客户档参照的是A组织的客户档;

1)在按客户汇总时,只有客户甲

能进行汇总;

期间类型

1、如果核算组织选择的是单组织,则可

以任意选择

2、如果核算组织选择的是多组织,则只

能选择单据日期

期间

1、如果核算组织选择的是A,则会计/

统计期间参照的是A组织的; 2、如果核算组织选择的是A1,则会计

/统计期间参照的是A1组织的;

...物料应收余额高级条件区 收款员。。。

同客户的参照

同客户的参照

3、只能选择单据日期 3、只能选单据日期

5、 如果来源组织选择的是X,则客户

档参照的是X组织的客户档; 6、 如果来源组织选择的是X1,则客

户档参照的是X1组织的客户档;7、 如果来源组织选择的是X+X1,

则客户档参照的是X组织的客户档;

4. 报表性能规范

1) 遵循《U9性能规范》

2) 可以直接使用:select * into #temptablename from …。这样的好处是省却了构建create table语句和执行其的消耗,并且以后当表中字段类型发生调整后,可以不必重新对create语句作调整。

3) 动态创建临时表,不需要的字段不要用null来代替,(如果有虚拟字段,可以使用Cast指定其数据类型)

4) 尽量合并执行的SQL语句,以便减少和DB服务器的交互次数,即不要多次使用Append往临时表插入数据,使用Union all一次插入

5) IsNull函数的使用(A5.[DisplayName] is null or (A5.[DisplayName] = '') 替换为:isnull(A5.[DisplayName],’’)=’’

第 16 页 共 18 页

6) 相同结构的临时表可以复用,删除临时表数据,不要使用Delete From Table,使用Truncate

7) 去掉结果临时表定义,直接返回结果OQL

8) 不要对插入的数据排序,而在获取数据的阶段排序; 9) 尽量用子查询代替临时表。

10) 不再使用的临时表可通过drop table语句或delete all及时释放掉占用的资源 11) 去掉不必要的调试代码(如:DataSet,OqlToSqlUtil.GetSql(Oql)等); 12) 去掉未被使用的变量(如:string sql;)

13) 将绝大部分行级计算字段,放在Report Server的Layout层处理,部分工作可以由DB层迁移到ReportLayout层处理

14) 字典映射应该放在Report Server的Layout层处理,这样可以利用.NET缓存字典数据,提高字典翻译速度;

15) 通过以下几种语句,尽量减少中间临时表:

A. select (select #A union select #B) order by排序字段的形式 B. Update A set A.c1=B.c1 left join B on xxx where xxx的形式 C. select A left join (子查询作为连接表) B on A.x=B.x的形式 16) 尽量避免使用静态对象

5. 报表补丁提交规范

1) 补丁号命名:

“日期\\模块名+报表补丁+顺序号“,如“6.27日\\INV报表补丁1” 2) 补丁下相关目录:

ReportServerLib(DataCommand)、ReportMetaData(报表元数据)、Portal\\UILib(报表UI及策略)、SqlScript(Sql脚本) 3) 补丁说明:(参考如下)

1. 解决的用户:XXXXXX 2. 解决的bug号:XXXXXX 解决问题描述: 1)XXXXXX 2)XXXXXX 3. 补丁如何安装: 1)XXXXXX 2)XXXXXX 3)XXXXXX

第 17 页 共 18 页

4)XXXXXX 4. 和其它补丁的依赖关系: 1)XXXXXX

2)XXXXXX

5. 可能的影响范围(提供给测试的建议验证范围); 1)XXXXXX 2)XXXXXX 3)XXXXXX

4) DataCommand补丁:

将ReportServerLib目录下的文件拷入ReportServer\\ReportServerLib,运行报表配置工具,执行“配置”操作。 5) 报表元数据补丁:

使用UBF导出报表元数据有两种方式:

A、按目录一次性将各模块所有的元数据全部导出。 B、按每张报表生成元数据

(如果一次性需要打多张报表,批量更新时建议选择方式A,否则按方式B更安全。选择方式B打补丁时只打有问题的报表,从而避免了将正确的报表元数据打错) 6) 报表UI及策略补丁:

直接将Portal下的报表UI及策略补丁覆盖Portal相应目录即可。

附录

1) 无

第 18 页 共 18 页

因篇幅问题不能全部显示,请点此查看更多更全内容

Top