【Dynamics365】創建報表

創建報表有三種數據源可以選擇,這裏主要講最常用的數據供應器(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)的擴展,並將輸出菜單項放到菜單擴展的適當位置

生成項目並部署報表後,即可在外部網頁中查看效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章