Dynamics CRM專案實施技術規範
1 專案設計階段
1.1 自定義和擴充套件Dynamics CRM規範
1.1.1 自定義實體的使用
1. 優先考慮使用系統現有實體,為其新增自定義屬性;
2. 重新命名現有實體以使實體更具有意義;
3. 在上述兩種情況不能滿足業務需求時,再考慮建立自定義實體
1.1.2 外掛與工作流的使用
綜合考慮外掛或工作流解決方案的部署、效能和維護等方面,然後選擇一種最符合業務目標的技術。
下表列出了外掛和工作流的特性。
條件 |
外掛 |
工作流 |
在核心平臺操作(建立、更新、刪除等)之前或之後執行 |
在核心操作之前或之後立即執行(同步)。可以排入佇列以在核心操作之後執行(非同步)。 |
排入佇列以在核心操作之後執行(非同步/同步 |
對伺服器效能的影響 |
同步外掛可能會增加平臺響應時間,因為它們是主要平臺處理過程的一部分。 非同步外掛對伺服器響應時間的影響較小,因為程式碼在不同的程序中執行。 |
對伺服器響應時間的影響較小,因為程式碼在不同的程序中執行。 |
安全限制 |
向平臺註冊外掛需要系統管理員或系統定製員安全形色以及“部署管理員”組的成員資格。 |
使用者可以在Web應用程式中以互動方式建立工作流。 但是,要註冊自定義工作流活動,進行部署的使用者必須具有與註冊外掛所需的相同安全形色。 |
CRM版本(SKU)支援 |
在沙盒中註冊後則在CRM Online中受支援。可以在合作伙伴託管的安裝中受支援,這由合作伙伴自行決定。 |
不含自定義工作流活動的工作流在所有產品版本中均支援。自定義的工作流活動在CRM Online上不受支援。 |
處理時間的長短 |
針對同步或非同步執行註冊的外掛要求在 2 分鐘的時間限制內完成其執行。 |
既適用於短期程序也適用於長期程序。 |
在CRM for Outlook客戶端離線的情況下也工作 |
聯機和離線均支援。 |
離線時工作流不執行。 |
程序和資料永續性 |
外掛執行直至完成。必須將外掛編寫成無狀態的情況,即不保留任何記憶體中資料。 |
可以通過SDK呼叫或由使用者通過Web應用程式暫停、推遲、取消和恢復工作流。在暫停或推遲工作流之前,系統會自動儲存工作流的狀態。 |
模擬 |
外掛可以代表其他系統使用者執行資料操作。 |
工作流無法使用模擬。 |
1.2 ISV擴充套件規範
1.2.1 CRM Web服務的使用
將CRM Web服務URL放入配置檔案(例如,放入app.config檔案)中,以便將程式碼與對URL的更改隔離開
1.2.2 外掛和自定義工作流活動的儲存位置
對於磁碟上的外掛或自定義工作流活動,請將程式集放在 <installdir>\Server\bin\assembly 資料夾中。
1.2.3 自定義Web應用程式或網頁的儲存位置
對於自定義Web應用程式或網頁,請將應用程式或網頁存放於CRM伺服器上的自定義目錄下併發布到IIS。
1.2.4 建立新的網站擴充套件CRM
在以下任一情況下,請為您的程式碼建立新的網站:
l 應用程式必須繫結到與CRM應用程式不同的域、協議或埠,或者必須在不同應用程式池中執行。
l 應用程式可獨立存在和單獨進行訪問。例如,作為伺服器(使用Web服務)與CRM互動的門戶應作為新網站進行託管。
l 應用程式始終使用Active Directory或整合Windows身份驗證(非IFD),並且無需考慮跨域指令碼問題。例如,應用程式與使用Web服務的後端互動,同時還與CRM窗體互動。託管在不與CRM窗體互動的CRM應用程式包含的IFRAME中的頁面屬於這個類別。
1.3 安全性最佳業務實踐
1.3.1 開發伺服器端程式碼的安全性最佳業務實踐
l 請勿使用除SDK以外的任何其他方式修改CRM資料庫,因為其會繞過CRM安全模型。
l 外掛在管理員上下文中執行,您應該瞭解此程式碼可能會訪問登入的使用者無權訪問的資訊。
l 對於工作流程式集和外掛,避免編寫執行時需要花費很長時間的程式碼。有一點很重要,就是註冊同步執行的外掛程式碼返回的時間要儘可能短。
l 如果要複製自己的資料儲存中的CRM資料,您應該對資料的安全負責。如果使用外掛傳輸資料,請確保在核心平臺操作完成之後再註冊外掛進行執行。登入使用者的安全許可權檢查在核心平臺操作的期間執行。
l 呈現從CRM獲取的資料可能不安全。資料中可能插入了不安全的HTML標記。
l 遵循不直接通過CRM企業管理器訪問SQL Server資料庫的要求。不使用SDK可能會使您面臨SQL注入威脅。
l 對於面向Internet的部署,請記住解決方案的安全性取決於最薄弱的一環。應用程式面向Internet公開後,會面臨安全威脅。
l 僅使用生成託管程式碼的語言,以實現最佳安全性,防止出現緩衝區溢位和異常等等。
1.3.2 開發客戶端程式碼的安全性最佳業務實踐
l 儘可能使用Web資源,而不使用需要伺服器端處理的頁面。如果您的要求只能通過伺服器端處理才能滿足,則請將自定義網頁安裝在單獨的網站上。根據程式碼安全性中的可信度,相應地設定您的網站的信任級別。這樣可減小來自跨網站指令碼的威脅和其他威脅。
l 為提高安全性,確保使用不同於CRM的帳戶執行您的單獨網站。此帳戶具有的訪問許可權應該儘可能少,並且不能直接訪問資料庫。可以使用複雜的、不會過期的密碼,因為除了應用程式外,沒有人會登入此帳戶。
l 避免使用ActiveX控制元件,因為它們存在已知的安全問題。
l 在刪除記錄或應用敏感更改(例如,將新使用者新增到安全形色)時始終使用模式確認對話方塊。這有助於防止諸如點選劫持或介面偽裝漏洞之類的技術,在這些技術中惡意的開發人員可能會將您的頁面嵌入到一個看似安全的頁面,以誘使使用者執行降低安全的操作或對資料執行不需要的操作。
1.3.3 自定義網站的安全性最佳業務實踐
l 不要使用匿名訪問。
l 對安全套接字層(SSL)使用整合Windows身份驗證、NTLM或Basic身份驗證。
l 如果您的網站與CRM位於不同的計算機上,使用SSL可避免通過網路傳送未加密資料。
1.4 效能最佳業務實踐
通過下列最佳業務實踐來提高程式碼的效能
1.4.1 使用多執行緒
嚮應用程式新增執行緒支援可以將工作分配給多個CPU。此建議假設您正在多處理器系統上執行程式碼。有關詳細資訊,請參閱《NET Framework高階開發指南》的“託管執行緒處理”文章。
1.4.2 使用常用方法
使用下列常用方法代替Execute方法並與相應訊息配合使用。可以提高程式碼效能
方法 |
訊息 |
Create |
CreateRequest |
Delete |
DeleteRequest |
Update |
UpdateRequest |
Retrieve |
RetrieveRequest |
RetrieveMultiple |
RetrieveMultipleRequest |
1.4.3 編寫執行較快的外掛
始終編寫執行預定任務花費時間最少的外掛。例如,在CRM中經常處理Execute方法。如果針對該訊息註冊外掛,則外掛會對系統產生顯著的效能影響。因為每次處理Execute方法時都會執行該外掛。
如果要同步執行註冊外掛,建議將其設計為在10秒內完成其操作。最好是最大程度地減少外掛的處理時間以維護連線到執行該外掛的同一組織服務的客戶端應用程式的互動性。
1.4.4 限制檢索的資料
使用從伺服器檢索資料的方法時,檢索應用程式所需的最少量的資料。可以通過指定列集來做到這一點,列集是指要檢索的實體屬性的集合。例如,應避免使用RetrieveAllEntitiesRequest訊息,為EntityFilters屬性指定EntityFilters.All實體篩選器來檢索所有元資料。相反,如果限制實體篩選器,或使用下列訊息之一,則可能會實現更好的效能:RetrieveEntityRequest、RetrieveOptionSetRequest、RetrieveAttributeRequest或RetrieveRelationshipRequest。
1.4.5 限制將級聯作用於相關實體的操作
使用Update方法或UpdateRequest方法時,請勿在記錄上設定OwnerId屬性,除非已實際更改了負責人。設定此屬性時,更改通常會將級聯作用於相關實體,這可增加更新操作所需的時間。
2 專案開發階段
2.0.1 原始碼管理
專案開發過程中產生的原始碼需要使用原始碼管理工具來進行版本控制。原始碼管理的工作由專案技術負責人來完成。
2.0.1.1 原始碼管理覆蓋的內容:
1. CRM自定義擴充套件外掛的原始碼;
2. CRM自定義擴充套件工作流的原始碼;
3. CRM自定義解決方案中的Web資源。包括HTML網頁、JS指令碼和圖片圖示資源等
4. ISV擴充套件的自定義Web應用程式;
2.0.1.2 原始碼管理工具的推薦與使用
請參考附件A。
2.0.2 技術文件規範
專案開發過程中產生的原始碼需要有對應的技術文件。
其中,業務模組級別的功能開發需要有流程圖;功能點級別的開發需要有函式說明。
2.0.3 原始碼開發規範
為了降低專案的維護成本,減少程式碼中的bug,以及促進團隊之間的合作。原始碼的開發(.NET部分)必需遵照微軟的C#開發規範。請查閱附件B。
由專案技術負責人對原始碼進行審查。
3 專案交付階段
3.0.1 原始碼交付
專案交付階段由專案技術負責人將專案的所有原始碼簽入公司的原始碼管理伺服器。包括:
1. CRM自定義擴充套件外掛的原始碼;
2. CRM自定義擴充套件工作流的原始碼;
3. CRM自定義解決方案中的Web資源。包括HTML網頁、JS指令碼和圖片圖示資源等
4. ISV擴充套件的自定義Web應用程式;
3.0.2 技術文件交付
專案交付階段由專案技術負責人將專案的所有技術文件上傳到公司的SharePoint文件管理伺服器。