【Dynamics365】创建报表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36205380/article/details/84283391

创建报表有三种数据源可以选择,这里主要讲最常用的数据供应器(Report Data Provider)

创建一张临时表:Add>New Item>Table

  1. 命名规范:尾部加Tmp
  2. 查看属性,设置 TableType 为 TempDB
  3. 添加报表中需要用到的数据字段:Fields>New

创建Query查询:Add>New Item>Query

  1. 命名规范:尾部加Query
  2. 添加数据源:Data Sources>New Data Source,查看属性,在Table填入实体表的名字,设置Dynamic Fields为Yes
  3. 如果需要子表,在已添加的数据源中再次Data Sources>New Data Source,在子数据源中Relations>New Relation添加与父表的关系,在AOT中查找关系,打开Relation属性,Join Data Source填入父表名,Field填入父表连接字段,Related Field填入当前表字段

创建一个参数类,用于处理对话框,包括参数及交互:Add>New Item>Class

  1. 命名规范:尾部加Contract
  2. 编写代码
    //字符串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

  1. 命名规范:尾部加Controller
  2. 编写代码
    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

  1. 命名规范:尾部加DP
  2. 编写代码
    [
    //参数类
    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

  1. 命名规范:尾部加Report
  2. 创建一个数据集:Datasets>New DataSet,在数据集的属性中指定数据源类型(Data Source Type)为报表数据供应器(Report Data Provider),在属性查询(Query)中点击…标记的浏览按钮,在弹出的对话框中选择新建的DP类,点击下一步(Next)并选择所需要显示的字段,然后点击确定(OK)按钮完成设置。
    **注意如果对DP类的参数等进行过改动,建议删除DataSet,重新创建。同时需要手动删除报表中Parameters里面的多余参数,Parameters参数来自Controller

创建一个输出菜单项:Add>New Item>Output Menu Item

  1. 命名规范:尾部加OutputMenuItem
  2. 查看属性,Label是在菜单中显示的名称,Object是要显示的报表,Object Type是报表类型,一般都为SSRSReport,Report Design是显示的设计

创建一个菜单(Menu)的扩展,并将输出菜单项放到菜单扩展的适当位置

生成项目并部署报表后,即可在外部网页中查看效果

猜你喜欢

转载自blog.csdn.net/qq_36205380/article/details/84283391