1. 程式人生 > >【Dynamics365】建立報表

【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)的擴充套件,並將輸出選單項放到選單擴充套件的適當位置

生成專案並部署報表後,即可在外部網頁中檢視效果