U8开发之UAP报表.docx
《U8开发之UAP报表.docx》由会员分享,可在线阅读,更多相关《U8开发之UAP报表.docx(43页珍藏版)》请在冰豆网上搜索。
![U8开发之UAP报表.docx](https://file1.bdocx.com/fileroot1/2023-6/28/1d8eaf24-6d4b-46ba-8846-dcf211828005/1d8eaf24-6d4b-46ba-8846-dcf2118280051.gif)
U8开发之UAP报表
UAP报表控件
1.报表描述
1.1.摘要
报表能集中反映企业、事业等单位的资金状况、财务收支和财务成果等重要的会计信息,能够提供企业生产、库存等情况,防止呆滞料和库存积压,减低库存成本,为企业决策提供相关数据支持。
UAP报表是指在UAP平台开发的报表,即数据的描述信息以UAP开发的报表所形成的xml组织格式的报表,至于非UAP报表,如果转化成该标准的描述形式,仍然可用,比如以前的vb报表。
本文主要介绍UAP报表的开发过程(设计时),包括过滤条件,数据源组织,样式设置等以及部分运行时内容,为在UAP平台上进行报表开发和扩展做参考
1.2.UAP报表分类
按照报表的内容,报表可以分为
Ø统计类报表
Ø预警类报表
Ø明细类报表
Ø费用类分析
Ø客户分析
Ø综合分析
Ø……
按照报表的运行方式分类,报表可分为
Ø表格视图
普通的表格类型展现的视图
Ø交叉视图
类似表格视图中的交叉,数据组织形式以矩阵的形式进行展现
Ø监控视图
主要一些用于提示累的预警类报表,一般放在桌面上,进行实时提示
Ø自由视图
开发着灵活组织的报表
Ø静态报表
是已有的报表的某一个固定时间的选择查询条件的查询数据,该时间可以是
数据的生成可以立即生成,固定周期等,接受方式可以消息提示,邮件接受等。
1.3.V11特性
1.3.1.支持BS报表的制作和发布(不支持COM类型的数据源)
开发过程没变,都是在UAP开发平台上,只不过如下内容不支持
Ø视图类型是自由视图和监控视图的
Ø数据源是COM类型的
Ø具体发布界面如下
1.3.2.支持条件格式(CS)
条件格式模块包括两个部分:
设计时通过UAP设计器完成条件格式的定义
运行时将条件格式解析成动态的程序集,供给报表调用息
其中大于,小于,等于,介于支持数值类型和日期类型的数据,等于额外支持字符串类型
自定义规则管理报表视图上的条件格式,可以修改条件格式的顺序(视图允许定义多个条件格式)和设置更复杂的条件格式
1.3.3.分组和交叉的变更
1.分组项支持显示小计功能
2.展现样式中的合并分组格变成平面展现+属性合并分组
3.想要实现行元素的多级效果,在行元素上再定义一个分组
4.交叉方案增加属性是否支持横向合计,作用于所用交叉元素
1.3.4.增加占比列功能
报表组件中增加了占比列功能,该类型只针对数值型:
即每一行的数据/该数据总计行的值得出具体的占比数据,总计行的类型即汇总方式可以选择
1.3.5.支持快捷条件查询
1.首先在工具栏勾选快捷条件
2.打开查询界面,选择快捷条件设置,并选择查询项
1.3.6.支持报表和查询方案收藏到桌面功能
1.4.数据字典
1.4.1.V11.0以前的数据字典
报表基本元数据表(UAP_Report)(UFMeta库)
字段名
字段类型
说明
ID
nvarchar(100)
报表ID
FilterID
nvarchar(100)
过滤ID
DataSourceID
Nvarchar(100)
数据源ID
FunctionName
Nvarchar(50)
函数名称
Description
Nvarchar(256)
描述信息,如果要不在报表中心中显示,则该字段预置为
NotShowInReportCenter
ProjectID
ProjectID
项目类型(U870,U8CUSTDEF等)
SubID
Nvarchar(50)
子产品ID
ModifyTime
timestamp
更改时间
ClassName
nvarchar(100)
自定义数据源的类名字
FilterClass
Nvarchar(100)
自定义过滤名字
bVB
bit
是否vb报表
bSystem
bit
分组信息(cGroup=Hidden则代表该组按钮隐藏不显示)
Creator
Nvarchar(100)
创建人
bPublished
bit
是否已经发布
HelpFileName
Nvarchar(200)
帮助文件名称
HelpIndex
nvarchar(30)
帮助位置索引
HelpKeyWord
nvarchar(30)
热键信息
bHadUpgradedFrom861
bit
是否已经从报表进行格式转换了,如果预置为1,则不会走升级操作的
MappingMenuId
Nvarchar(100)
对应的菜单查询权限
RootReportId
nvarchar(100)
多报表的情况下选择一个做为主报表
bUsingReport4MenuId
bit
是否用报表ID做菜单ID
NeedUpdateDataSource
int
是否需要进行数据源升级
IsNeedBak
int
是否需要进行备份
报表视图表(UAP_Reportview)(UFMeta库)
字段名
字段类型
说明
ID
Nvarchar(100)
视图ID
ReportID
Nvarchar(100)
按钮标题
ViewType
INT
1表格视图2监控视图3交叉视图4自由视图
PageMargins
nvarchar(50)
打印保存的页面设置信息
PaperType
打印纸张类型
该功能报表没用,可能打印那里用的
Format
ntext
视图格式信
ModifyTime
timestamp
更改时间
bSystem
bit
是否系统报表
ViewClass
nvarchar(50)
业务组自己预置的,如果该字段预置值,则
在运行的视图列表中,只能切换相同ViewClass的视图
RowsCount
INT
默认查询的行数
bShowDetail
bit
默认是否显示明细
Assemblystring
ntext
预置的程序集
Chartstring
ntext
保存的图标信息
Columns
nvarchar(100)
列信息
Tag
ntext
附加信息
RuntimeFormat
ntext
运行时样式
bMustShowDetail
bit
是否一定显示明细
PageSetting
ntext
页面设置信息
Selfaction
ntext
自定义事件
PreservedField
ntext
交叉信息
CanSaveDefaultFormat
bit
是否可以另存视图
FontColorStyleId
nvarchar(100)
颜色格式,只存放对应的ID
1.4.2.V11.0数据字典
报表几本元数据表(UAP_Report)(UFMeta库)
字段名
字段类型
说明
MappingBsMenuId
nvarchar(64)
该报表所对应的查询权限,即菜单的查询权限号
2.UAP报表开发
2.1.数据源定义
报表数据源可分为实体关系查询,SQL脚本查询和自定义查询三个类型,如下图所示:
其中数据源名称和数据源描述是为了标识数据源以及说明数据源的功能。
2.1.1.查看或修改现有数据源
“查看或修改现有数据源”是指对原先已经创建的数据源进行修改(系统预置的数据源不允许修改),或者可以在新建报表时选择已存在的数据源,如下图:
选“下一步”:
则列所有已存在的数据源,选择其中一个,按“下一步”:
功能列表是数据引擎内部使用机制,直接选“下一步”:
这个是设置报表数据源的最后一个步骤,由于选定的数据源为自定义查询类型,所以第一个页签为自定义查询组件的相关信息;第二个页签如下图:
查询结果列是指该数据查询结果的具体情况,包括列名称,列的数据类型,列的区域语言描述。
这些信息将构成报表格式设计时的数据源信息(关于这部分内容的详细情况请参阅UAP报表设计时帮助文档)。
另一个页签为“过滤条件设置”,如下图:
具体包括过滤条件名称,过滤条件的区域语言描述,这个将在过滤条件的数据源下拉列表中出现,这些信息将用来设置从过滤控件读去用户输入条件值来对查询的结果进行过滤
之后,选择“完成”即结束数据源定义而进入报表格式定义。
2.1.2.实体关系查询
在图1.1步骤中选定“实体关系查询”,点击“下一步”则进入实体关系查询类型的数据源定义:
这里必须要添加至少一个关联实体,点击“添加”,则可选择系统已经定义好的实体:
选定实体,然后点击“确定”:
点击“下一步”(如果选择了多个实体,则还需要定义实体之间的关系。
关于如何定义一个实体以及如何定义实体之间的关系,请参阅数据引擎的相关文档):
接着必须添加结果列,点击“添加”:
这里弹出的列表为选定的单个实体或多个实体能查询到的所有的结果列的信息。
选定需要的查询结果列后,点击“确定”:
这个步骤中,“行数据权限”可以用来限制用户查询某些具体行数据的权限(行数据权限的设置以及其他高级功能的使用方法请查阅数据引擎相关文档)。
2.1.3.SQL脚本查询
在图1.1步骤中选定“SQL脚本查询”,点击“下一步”则进入SQL脚本查询类型的数据源定义:
SQL脚本查询类型又分为SQL脚本和存储过程两个类别,可通过第一个页签的左上端的下拉列表中选择相应的类别(具体如何定义两种类别请查阅数据引擎相关文档)。
其他三个页签中,“查询结果列”和“过滤条件设置”已经在前面的单元中说明,此处不在详述。
其中,这种数据源类型有一个“查询参数设置”页签,如下图:
如果脚本类型中选择的是“存储过程”,则此处可以使用“刷新”按钮来获取存储过程所需要的参数;而SQL脚本类型则需要手动填写参数的信息。
需要注意的是,参数的名称必须与存储过程或SQL脚本的名称完全一致。
运行时查询参数的具体值来源是通过过滤条件获得的,因此查询参数需要和过滤条件绑定在一起。
Sql脚本查询对行权限控制比较少,报表会只控制客户(ccusname
)、部门(cdepname,部门名称)、存货(cinvname,存货名称)、业务员(cpersonname)、供应商(cvenname)、仓库(cwhname)六种权限,别的不会控制,控制的过程,表格的名称必须和以上六种的名字(括号内名字)完全一致才行。
2.1.4.自定义查询
自定义查询是指提供一个COM组件(通常为VB6.0组件)或.NET组件(通常为C#组件)来提供获取数据的方法(SQL脚本,存储过程或数据库临时表)。
关于自定义查询组件的建立方法请参阅本手册3.2单元。
在图1.1步骤中选定“自定义查询”,点击“下一步”则进入自定义查询类型的数据源定义:
其中数据服务信息指的是自定义组件的相关信息。
2.2.报表过滤条件
2.2.1.过滤条件设计
除了UAP本身单独提供了过滤条件的设计工具,报表本身也提供了专门为报表设计过滤条件的快捷方式。
以下是报表设计过滤条件的入口:
点击“标准条件”进入过滤条件设计器:
界面说明:
是否支持高级条件:
选此项后,在运行时过滤窗口中会出现“高级条件”页签,用于用户自由选择过滤条件的组合。
规则组件:
此项定义由过滤控件回调的规则组件类。
是否取消二次开发:
此复选项只有在以“U870”项目进入UAP时才会显示,如果被选中,那么以其它项目进入UAP的过滤设计器不能新增和删除过滤条件。
此处可新增或修改一个过滤条件。
双击某个已存在的过滤条件,则进入这个条件的修改界面:
界面说明:
语种:
设置过滤条件项显示的语种。
中文简体名称:
过滤条件项的键值,唯一标识此过滤条件项,不能重复。
可以以字母、数字或汉字来命名。
标题:
在运行时过滤窗口中显示的文字,支持多语种设置。
编辑类型:
过滤条件项的类型,分别为文本框、参照、日期、数字、枚举、SQL语句、自定义。
参照ID:
当编辑类型选择参照类型后,必须选定一个参照ID。
比较符:
过滤条件项比较符号。
小数位数:
当编辑类型为数字类型时,此选项可以设置小数位数。
分组:
为过滤条件选定一个分组,在运行时将按照分组来显示过滤条件项。
数据源:
为过滤条件项选定数据源,可以下拉选择或直接手工输入。
顺序号:
指定过滤条件项在运行时显示的位置,如果不输入,将自动产生。
是否常用条件:
如果选中,将在运行时显示在“常用”页签中。
是否必输:
如果选中,在运行时必须输入值,否则会出现提示信息。
是否区间条件:
如果选中,在运行时将显示为两个输入框组合而成的形式,表示从值1到值2的意思。
在运行时,用户选择或输入的不是单值,而表示一个取值范围。
是否多选:
如果选中,表示此过滤条件项可以选择多个值。
允许用户修改比较符:
如果选中,用户在运行时可以通过滤设功能改变比较符。
作为或条件:
如果选中,在运行时将以“或”条件来组合到过滤条件生成的SQL语句中,默认是以“与”条件组合的。
参照返回字段:
当编辑类型为参照类型时,此选项表示参照返回的是哪个字段的值。
编码对应参照中的主键字段,名称对应参照中的描述字段。
也可以手工输入要返回的字段名,一定要与参照中的字段名一致。
默认值、到:
设置过滤条件项的默认值,将在运行时自动显示。
如果为区间条件,可以设置“到”默认值。
修改界面的第二个页签是过滤条件项窗口枚举:
界面说明:
枚举(aa_enum):
指在U861中使用的枚举型,此类型是在AA_Enum数据表中定义的。
枚举类型,枚举类型名称,是EnumType字段值。
默认显示,在运行时当用户点击下拉按钮后显示的可供选择的项,注意是以“,”分隔的EnumCode字段的值。
枚举类型:
指明在Meta库中的MetaEnumDef表中的枚举,对应MetaID字段。
枚举串:
如果没有在数据库中预制枚举类型,也可以通过此项输入一个枚举串。
格式为“0{#}1{##}A{#}B”,在“{##}”前的为返回值,之后的则为显示值,并且在返回值与显示值中分别以“{#}”分隔。
只能定义以上三种枚举中的一种,否则会出现提示信息。
修改界面的第三个页签是过滤条件项窗口SQL语句:
界面说明:
SQL文本框:
在SQL文本框中输入SQL语句,可以不用加别名。
标题:
在运行时中显示的列标题,标题数量与上面的SQL的字段对应,并用“,”分隔,例如“标题1,标题2”。
返回字段:
用此字段的值构成过滤控件返回调用者的过滤SQL语句。
显示字段:
显示在运行时过滤窗口中的值。
在U870中,SQL语句类型的过滤条件主要为兼容以前版本,所以如果在U870中新建过滤条件时,请不要选用SQL语句类型,而改用参照类型。
修改界面的第四个页签是过滤条件项窗口SQL语句:
属性说明:
参照样式:
当编辑类型选择为参照类型时,可以指定参照的样式,分别为弹出式和下拉式,默认为弹出式。
关于过滤最后值得特别指出的是,过滤条件之间可控制相互关系,例如两个过滤条件都有参照,则可控制其中一个过滤条件的参照取值范围由另一个过滤条件的取值来决定。
此外还存在其他相关控制行为,这些功能都是通过规则组件来实现的。
关于规则组件的详细实现,请参阅过滤条件的相关文档。
2.2.2.过滤条件与数据源的关系
此处主要说明如何把过滤条件跟数据源关联起来,以达到由用户输入来实现查询不同数据的目的。
对于实体关系类型的数据源,只要在过滤条件的基本属性页中选择数据源的相应列就能实现,如下图:
用户就可以在查询报表时进行过滤:
对于SQL脚本类型的数据源,无论是简单的sql脚本类型还是存储过程,都是通过将其参数与过滤条件进行绑定来实现的。
如下图:
假如sql脚本或存储过程中有两个参数分别为:
@planid和@filterstring,则必须要在“查询参数设置”页签中分别为每一个参数设置其相关信息。
然后再设计过滤条件:
此处需要注意的是,“中文简体名称”必须以这样的规则命名:
“查询参数设置”的参数为@pram,则“中文简体名称”为parm,两者之间相差一个符号“@”。
需要指出的是虽然SQL脚本可以通过参数来绑定过滤条件,但是过滤条件绑定到参数的同时,还必须为此过滤条件指定一个数据源查询结果列,查询时输入的过滤条件对该返回结果列同样起作用。
对于自定义的数据源的过滤条件绑定与实体关系得数据源相似,但是设计者需要在自定义组件中自己处理由用户输入信息构成的sql串来实现对查询结果的过滤。
如果要看更详细的过滤设置,请参考“过滤控件技术文档”
2.3.图表设计
图标设计请注意以下内容:
必须存在分组
分组项默认作为图表的X坐标轴
有几级分组就可以制作几级图表
图表类型:
柱形图、曲线图、区域图、条形图、饼图等
显示特征:
显示图例
数据绑定:
至少一个
从零开始
交换行列值
2.4.对外接口
报表外部接口
Ø自定义报表查询入口
所谓自定义报表查询入口指的是用UAP设计了一张自定义报表,除了默认的查询入口:
门户->视图->我的报表->自定义报表,另外为此报表设置单独的菜单节点来进行查询。
只要在此节点的点击事件处理函数中调用报表系统的以下接口就可实现:
A.
PublicFunctionOpenReport(_
sReportIDAsString,_
objU8LoginAsObject,_
OptionalsubidAsString="",_
OptionalrawfilterAsObject=Nothing)AsBoolean
B.
PublicFunctionOpenReportNoneFilterUI(_
sReportIDAsString,_
objU8LoginAsObject,_
OptionalsubidAsString="",_
OptionalrawfilterAsObject=Nothing)AsBoolean
C.(11.0增加,打开收藏的过滤方案时调用)
PublicFunctionOpenReportNoneFilterUIWithCommandLine(_
sReportIDAsString,_
objU8LoginAsObject,_
OptionalsubidAsString="",_
OptionalcommandLineAsString="")AsBoolean
接口功能及使用说明:
这两个接口是对象ReportService.clsReportManager中的函数;
需要引用组件:
ReportService.dll
UFIDA.U8.UAP.Services.ReportFilterService.tlb
这两个接口的功能是打开一张报表,两个接口的差异在于前者在打开报表之前会先显示过滤界面,而后者不会(例如在使用联查报表的时候有时不需要进行过滤)。
此接口在业务组在其需要打开一张报表时调用。
参数介绍:
sReportID:
报表的ID,即将要打开的报表标识。
objU8Login:
U8的Login对象,注意:
这个对象必须是COM封装的Login。
subid:
报表所属的子产品号,这个参数是可选的。
注意:
当指定了此参数,接口会在随后的处理中按照subid[__]sReportID的规则拼接成真正的报表ID。
rawfilter:
可选过滤条件对象(UFGeneralFilter.FltSrv或自定义的过滤条件对象),此对象中必须是ISelfFilter(见第四个接口)的一个实现。
这个参数通常报表的自定义行为(如联查)时,需要有过滤的情形时会使用到。
commandLine
OpenReportNoneFilterUIWithCommandLine接口是在打开过滤方案的时候调用的,其中commandLine的格式为:
filtersolution=aa
如果要添加别的内容请用VBtab分割符,例如
Commandline=“filtersolution=abc”
Commandline=“xxxxvbtabfiltersolution=abc”
xxxx内容随意
至于怎么在U8中设置自己的菜单节点,请参阅U8门户相关文档。
Ø自定义数据源组件
报表的自定义数据源是指单独写一个组件来提供报表数据,这种数据源实现方法的优点强大的数据处理能力,这是其他类型的数据源所不具备的。
实现方法为:
组件中必须实现以下接口:
publicinterfaceIGetSql
{
voidGetSql(IFilterArgse);
}
接口功能及使用说明:
此接口为报表提供自定义数据源。
组件的提供方式为首先提供一个实现IGetSql的组件(COM组件只需有一个声明相同的GetSql函数的类即可),之后将其绑定到报表的数据源(具体方法是请参考本接口示例)。
组件的工作方式为报表系统会在展现报表的过程中实例化一个此种类型的对象,通过调用GetSql函数来获取数据源。
参数介绍:
IFilterArgs
参数是UFIDA.U8.UAP.Services.ReportFilterService.tlb中的类型,在报表系统调用自定义数据源组件的时通过此参数将组件需要的环境信息传入,而自定义数据源组件则将其处理结果通过此参数返回给报表系统。
IFilterArgs中包含的常用接口:
IFilterArgs.login:
U8的Login对象
IFilterArgs.RawFilter:
过滤对象
IFilterArgs.DataSource.Type:
组件数据源返回类型,其值与对应类型为
0:
SQL脚本
1:
存储过程
2:
临时表
其默认值为2
IFilterArgs.DataSource.Sql:
SQL脚本或临时表名称
IFilterArgs.DataSource.StoreProcName:
存储过程名称
示例:
(1)以下提供一个名为CustomDataSample的vb6.0的dll,此组件中定义一个名为customData.cls类,其代码如下(IFilterArgs的):
PublicSubGetSql(eAsIFilterArgs)
e.DataSource.sql=“select*fromAA_Bank”
e.DataSource.Type=0
EndSub
构造好组件之后,需要将组件绑定到报表的数据源,绑定方法如下:
假设组件名称为:
DataEngine.dll,而实现IGetSql的类型名称为:
Engine
VB6.0组件的绑定方法:
(注意:
COM需要注册,不要求具体存放目录,一般推荐存放目录为:
..U8SOFT\ufcomsql\)
图2.12
C#组件的绑定方法:
(注意:
.NET组件不需要注册,但存放目录必须是:
..U8SOFT\UAP\)
图2.12
Ø自定义行为组件
报表的toolbar默认不支持扩展,自定义行为添加后会自动在扩展功能按钮下添加一个按钮,相当于实现toolbar的扩展。
自定义行为是指在报表查询结束后,设计者提供额外的功能来进行相关处理,比如联查功能等。
方法是实现以下接口:
publicinterface