本文是關於CRM 2013報表開發入門介紹,包括開發工具的使用,以及不同於普通Reporting service的相關注意事項。
一、CRM報表簡介
報表有兩種,SQL-based報表和Fetch-based報表,區別如下:
區域 | SQL-based 報表 | Fetch-based 報表 |
Data Provider | <DataProvider> 元素的值設置為SQL. 示例如下:<DataProvider>SQL</DataProvider> |
報表RDL文件中的 <DataProvider> 元素的值設置為MSCRMFETCH. 示例如下:<DataProvider>MSCRMFETCH</D taProvider> |
Report query | 報表RDL文件中的<Query>元素下<CommandText>子元素獲取數據用的查詢語句是一個SQL查詢語句。比如下面這個SQL語句就是查詢所有客戶的name列:<CommandText>SELECT name FROM FilteredAccount;</CommandText> |
報表RDL文件中的<Query>元素下<CommandText>子元素獲取數據用的查詢語句是一個SQL查詢語句。比如下面這個查詢語句就是查詢所有客戶的name列:<CommandText><fetch version="1.0" output-format="xml-platform" mapping="logical"> <entity name="account"> <attribute name="name" /> </entity> </fetch></CommandText> |
部署范圍 | 僅能部署到on-premises Microsoft Dynamics CRM | 能部署到Microsoft Dynamics CRM Online 和on-premises Microsoft Dynamics CRM |
創建SQL-based報表只能使用系統中的Filtered Views,自定義的實體也會自動創建和更新其對應的Filtered View,一般命名規則是Filtered 加上實體的架構名稱,比如客戶Account實體對應的Filtered view便是FilteredAccount。可以直接到名稱為 <organization_name>_MSCRM 的數據庫的View節點中去查看視圖的定義,數據等等。Filtered Views會自動應用安全性,通過該視圖查看數據只能看到你能看到的數據。對Filtered Views的說明如下:
1. 所有的視圖列名都是小寫的。
2. 對於數據類型是選項集的列,Filtered Views會有兩列和這樣的列對應,一個列是這個選項集的值,一個列是這個選項集的顯示文本。比如潛在客戶lead這個實體的屬性LeadSource數據類型是選項集,Filtered Views會有leadsource列來對應選項集的值,leadsourcename列來對應選項集的顯示文本。
3. 對於數據類型是DateTime的列。Filtered Views會有兩列和這樣的列對應,一個列對應顯示適合於你的時區的日期時間,另一個列對應的是UTC時間,一般會加上utc。比如記錄創建時間字段createdon就記載的是適合你看的時間,我們默認是東八區,而createdonutc則是記載的是UTC時間,是東八區的時間減去8個小時。
二、 開發工具
1. 我們以前開發報表是用的Business Intelligence Development Studio,但SQL Server 2012里沒有這個了,取而代之的是SQL Server Data Tools,實際上也是在vs里做開發:
2. 另外還可以用 Microsoft® SQL Server® 2012 報表生成器 來開發報表:
三、 注意事項
下面就一個最簡單的例子介紹下開發CRM報表時要注意的地方:
1. 首先建立一個數據源:
2. 建立dataset:
3. 注意事項:
SELECT TOP 1
u.FullName ,
mad.new_rate
FROM dbo.Filterednew_material_apply_order CRMAF_ma
JOIN dbo.Filterednew_material_apply_details mad ON CRMAF_ma.new_material_apply_orderId = mad.new_material_apply_order
LEFT JOIN dbo.FilteredSystemUser u ON CRMAF_ma.CreatedBy = u.SystemUserId
- 這里的sql 語句用到的是filtered view,所以都是以Filtered開頭的, 上段代碼中標紅色的地方
- 其中主視圖的別名是以CRMAF_開頭,標藍色的地方,這里表示只取當前數據行
- 用上面的sql語句,你會發現沒有數據出來,因為這時你沒指定是哪個用戶,為了測試,我們可以在這段sql之前,加上下面的語句以指定是哪個用戶:
DECLARE @binUserGuid VARBINARY(128)
DECLARE @userGuid UNIQUEIDENTIFIER
SELECT @userGuid = ( SELECT TOP 1
SystemUserId
FROM SystemUser
WHERE DomainName = 'CRM\123456'
)
SET @binUserGuid = CAST(@userGuid AS VARBINARY(128))
SET context_info @binUserGuid
注意把上面的CRM\123456換成你想要的用戶名;另外測試完沒問題后,記得把它去掉,再發布到CRM系統中。
Dynamic CRM 2013學習筆記 系列匯總