版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36205380/article/details/84283391
创建报表有三种数据源可以选择,这里主要讲最常用的数据供应器(Report Data Provider)
创建一张临时表:Add>New Item>Table
- 命名规范:尾部加Tmp
- 查看属性,设置 TableType 为 TempDB
- 添加报表中需要用到的数据字段:Fields>New
创建Query查询:Add>New Item>Query
- 命名规范:尾部加Query
- 添加数据源:Data Sources>New Data Source,查看属性,在Table填入实体表的名字,设置Dynamic Fields为Yes
- 如果需要子表,在已添加的数据源中再次Data Sources>New Data Source,在子数据源中Relations>New Relation添加与父表的关系,在AOT中查找关系,打开Relation属性,Join Data Source填入父表名,Field填入父表连接字段,Related Field填入当前表字段
创建一个参数类,用于处理对话框,包括参数及交互:Add>New Item>Class
- 命名规范:尾部加Contract
- 编写代码
//字符串DataContractAttribute指示此类是数据协定,[]表示它是一个属性 [DataContractAttribute] class UNI_StockReportDetailsContract { //声明需要的参数成员 TransDate transDate; str packedQuery; //DataMemberAttribute传过来的 RecId ,使用SysOperationLabelAttribute属性指定标签 [DataMemberAttribute,SysOperationLabelAttribute(literalStr("@SYS11284"))] public TransDate parmTransDate(TransDate _transDate = transDate) { transDate = _transDate; return transDate; } //使用AifQueryTypeAttribute指定查询,查询KlForCustomers只是AOT中的一个查询,其中CustTable作为数据源 [DataMemberAttribute,AifQueryTypeAttribute('_packedQuery', querystr(KlForCustomers))] public str parmQuery(str _packedQuery = packedQuery) { packedQuery = _packedQuery; return packedQuery; } //To get the query: public Query getQuery() { return new Query(SysOperationHelper::base64Decode(packedQuery)); } //To set the query: public void setQuery(Query _query) { packedQuery = SysOperationHelper::base64Encode(_query.pack()); }
创建一个启动类:Add>New Item>Class
- 命名规范:尾部加Controller
- 编写代码
public class UNI_StockReportDetailsController extends SrsReportRunController { public static void main(Args _args) { UNI_StockReportDetailsController controller = new UNI_StockReportDetailsController(); //ssrsReportStr 两个参数(报表名称,报表中的deign) controller.parmReportName(ssrsReportStr(UNI_StockReportDetails,StockReportDetails)); controller.parmArgs(_args); controller.startOperation(); } }
创建一个DP类,用于处理业务逻辑以及填充临时表:Add>New Item>Class
- 命名规范:尾部加DP
- 编写代码
[ //参数类 SRSReportParameterAttribute(classStr(UNI_StockReportDetailsContract)), //Query 数据 SRSReportQueryAttribute(queryStr(UNI_StockReportDetailsQuery)) ] class UNI_StockReportDetailsDP extends SRSReportDataProviderBase { //临时数据表 UNI_StockReportDetailsTmp TempDB; //表 InventTrans InventTrans InventTrans; //参数 str RecId; /// <summary> /// 获取临时表 /// </summary> /// <returns> UNI_StockReportDetailsTmp </returns> [SrsReportDataSetAttribute(tablestr(UNI_StockReportDetailsTmp))] public UNI_StockReportDetailsTmp getStockReportDetailsTmp() { select TempDB; return TempDB; } public void insertStockReportDetailsTmp() { QueryRun queryRun= new QueryRun(this.parmQuery()); while(queryRun.next()) { InventTrans=queryRun.get(tableNum(InventTrans)); TempDB.clear(); TempDB.RmCode=InventTrans.ItemId; TempDB.Issue=InventTrans.StatusIssue; TempDB.Receipt=InventTrans.StatusReceipt; TempDB.insert(); } } /// <summary> /// 处理报表业务逻辑 /// </summary> [SysEntryPointAttribute] public void processReport() { //传递参数 UNI_StockReportDetailsContract Contract=this.parmDataContract(); RecId =Contract.parmRecId(); this.insertStockReportDetailsTmp(); } }
创建一个报表:Add>New Item>Report
- 命名规范:尾部加Report
- 创建一个数据集:Datasets>New DataSet,在数据集的属性中指定数据源类型(Data Source Type)为报表数据供应器(Report Data Provider),在属性查询(Query)中点击…标记的浏览按钮,在弹出的对话框中选择新建的DP类,点击下一步(Next)并选择所需要显示的字段,然后点击确定(OK)按钮完成设置。
**注意如果对DP类的参数等进行过改动,建议删除DataSet,重新创建。同时需要手动删除报表中Parameters里面的多余参数,Parameters参数来自Controller。
创建一个输出菜单项:Add>New Item>Output Menu Item
- 命名规范:尾部加OutputMenuItem
- 查看属性,Label是在菜单中显示的名称,Object是要显示的报表,Object Type是报表类型,一般都为SSRSReport,Report Design是显示的设计