微軟 CRM 系統的開發主要包括四個方面: 1 )自定義實體的設置; 2 ):SiteMap的設置; 3) ISV.Config 文件(實體頁面導航條以及功能菜單)的配置; 4 )客戶端 JavaScript 的設計。
FW : 微软CRM系统二次开发步骤以及注意事项
微軟 CRM 系統的開發主要包括四個方面: 1 )自定義實體的設置; 2 ):SiteMap的設置; 3) ISV.Config 文件(實體頁面導航條以及功能菜單)的配置; 4 )客戶端 JavaScript 的設計。
特別注意:對系統中進行的開發之後一定要在自定義界面選擇 “ 發布 ” ,不然是不能使用的。
一:自定義實體的設置
微軟 CRM 系統提供按照自己需求要求,對 CRM 系統功能進行擴充,因此也涉及到用戶自定義實體的設計工作,在白沙集團,按照煙草行業的需求,以及結合微軟 CRM 系統的要求,做出了一個煙草行業的自定義實體的數據庫文件,見《 微軟 CRM 自定義實體 》,在該文件中定義了 31 張自定義數據庫表。
進入自定義設置的方法是依次按照系統導航條選擇: 設置→設置→組織設置→系統設置→自定義 ,進入自定義設置界面,然後 “ 新建 ” ,按照系統以及自定義實體數據庫表的要求,對系統進行表的添加,注意的是:對於自定義的表名系統是要提供默認前綴的,系統默認的是 new_ ,同時系統要求提供一個真正的數據庫表的名稱和一個顯示名稱,還要注意的是系統只提供數據庫的一對多,和多對一的關係,不提供多對多關係的數據庫設計。
添加完表後,就要添加相關的表字段的設置,一般的字段設置直接添加,涉及到表與表之間的關聯字段,則是通過字段之間的關係設置完成的,有專門的 “ 關係 ” 菜單進行設置,如果要想直接通過關係,直接在頁面上直接顯示,則要把關係字段進行影射,注意的是在做關係和影射時,兩個字段的類型要一定一樣才行。
以下為在實體定義中的關係和影射設置圖:
定義完好表以及字段之後,則要對錶單和視圖進行設計,以便在頁面上進行顯示操作,以下是設置表單的頁面界面:
在上圖中的 Add a Tab 表示添加一個標籤,如上圖中的 Detail ; Add a Section 表示添加一個節,如上圖中的 “Business Information” , Add Fields 表示在那個節中添加具體的字段,如 “Ownership” ; Add an IFrame 表示添加一個頁面框架,跟 html 中的 IFrame 是一致的,用來引用外部的頁面。 如果要刪除以上的標籤,節或字段,直接選中某個字段或節,選 Remove 即可。 要改變某屬性,先選中該控件,選擇 “Change Properties” 進入屬性配置頁面,如下圖(其中一部分)所示:
自定義實體的操作,主要是要直接操作,微軟 CRM 系統提供的接口,直接在該接口中進行添加,完成設置後系統會自動生成相關的頁面表單,但還需要對錶單以及視圖進行相關的配置,當配置好後就可以在系統中使用了。
二:SiteMap的配置
SiteMap只要是一個 XML 的配置文件,通過配置SiteMap的方法,可以調整在系統主頁面中的站點導航顯示功能,其結構如下所示:
1 . Area 中的各個屬性的含義
屬性名 |
描述 |
類型 |
值 |
是否必須 |
ID |
ASCII 唯一標示(不含空格) |
CRM_Identifier |
[a-zA-Z0-9_]+ |
是 |
Title |
標籤顯示名稱,覆蓋 ResourceId. |
String |
例如 "Sales" |
否 |
ResourceId |
被用於默認標籤顯示的名稱 |
String |
[a-zA-Z0-9_]+ |
否 |
Icon |
有效的圖像 URL 地址 |
String |
URL |
否 |
Url |
在 Outlook 點擊目錄時彈出的頁面的 URL |
String |
有效的 URL |
否 |
ShowGroups |
在導航欄中的子目錄中是否顯示組名稱 |
Boolean |
True | false |
否 |
2 . Group 中的各個屬性的含義
屬性名 |
描述 |
類型 |
Values |
是否必須 |
ID |
ASCII 唯一標示(不含空格) |
CRM_Identifier |
[a-zA-Z0-9_]+ |
是 |
Title |
標籤顯示名稱,覆蓋 ResourceId. |
string |
例如 "Sales" |
否 |
ResourceId |
被用於默認標籤顯示的名稱 |
String |
[a-zA-Z0-9_]+ |
否 |
URL |
在 Outlook 點擊組名稱時彈出的頁面的 URL |
String |
有效的 URL |
否 |
IsProfile |
控制是否要在個性化工作區進行選擇,然後在我的工作區進行顯示 |
Boolean |
true | false |
否 |
3 . SubArea 中的各個屬性的含義
屬性名 |
描述 |
類型 |
是否必須 |
ID |
ASCII 唯一標示(不含空格) |
CRM_Identifier |
是 |
Title |
標籤顯示名稱,覆蓋 ResourceId. |
string |
否 |
ResourceId |
被用於默認標籤顯示的名稱 |
String |
否 |
Icon |
顯示的 Icon 圖標的 URL |
String |
否 |
URL |
指向子目錄頁面的 URL |
String |
否 |
Client |
客戶端類型 Defaults 或 All |
CRM_Client |
否 |
AvailableOffline |
控制該自目錄是否離線可用 |
Boolean |
否 |
Entity |
Schema 名稱 |
string |
否 |
4 . Privilege 中的各個屬性的含義:
屬性名 |
描述 |
類型 |
是否必須 |
Entity |
實體 Schema 名稱 |
string |
是 |
Privilege |
自目錄顯示所需要的權限 |
CRM_PrivilegeId |
否 |
注: CRM_PrivilegeId 的值為 Read , Write , Append , AppendTo , Create , Delete , Share ,Assign , All 中的一項或者是多項組合。 如果是組合用 “ , ” 間隔,中間不能有空格。
5 . 操作方法
1 )導出SiteMap:設置→自定義→導出自定義項,選擇 “ SiteMap ” ,然後選擇 “ 其他動作 ” → “ 導出所選自定義項 ” 。 或者之間使用
http:// 站點名 /Tools/SystemCustomization/ExportCustomizations/exportCustomizations.aspx
2 )修改導出的 XML 文檔:使用 XML Editor直接修改該 XML 文檔,各個標籤的含義如上所示。
3 )導入SiteMap:設置→自定義→導入自定義項,選擇要導入的SiteMap.XML,然後點 “ 上載” ,等該文件顯示在列表中時,點 “ 導入所有自定義項 ” 或 “ 其他動作 ” → “ 導入所選自定義項 ” 。 也可以通過
http:// 站點名 /Tools/SystemCustomization/ImportCustomizations/importCustomizations.aspx
6 . SiteMap實例
<! --客戶服務管理-- >
< Area Id ="CS" Title ="客戶服務管理" ResourceId ="Area_Service" ShowGroups ="true" Icon="/_imgs/services_24x24.gif" DescriptionResourceId ="Customer_Service_Description">
< Group Id ="CS" Title ="客戶服務管理" IsProfile ="true">
< SubArea Id ="nav_managekb" ResourceId ="Homepage_KBManager" Icon ="/_imgs/ico_18_126.gif" Url="/cs/home_managekb.aspx" Client ="Web">
< Privilege Entity ="kbarticle" Privilege ="Read,Write,Create" />
</ SubArea >
< SubArea Id ="nav_contracts" Title ="客戶請求跟踪" Entity ="contract" />
</ Group >
</ Area >
三: ISV.Config 文件(實體頁面導航條以及功能菜單)的配置
ISV.Config 文件同樣是一個 XML 文件,通過配置該文件,可調整頁面導航條的設置以及功能菜單的設置, 注意:不過頁面導航條的設置,系統默認的導航條是不能改變的。 自定義只能添加在系統默認導航條的下方或導航條中。
1 . ISV.Config 菜單及工具條設置 XML 文檔結構圖如下所示:
2 . 系統主菜單 ROOT 結構圖如下所示:
3 . 系統實體相關頁面 Entities 結構圖如下所示:
注: 1 )在 “Entity” 字段中, Name 屬性為在系統定義的實體的 Schema 名稱,如 “Account” 表示的客戶表。
2 )在 “NavBarItem” 字段中, Area 屬性為在系統中的SiteMap區域要顯示的區域名稱,如 “Sales”。
3 )在 “Entity” 節中,自定義的菜單和工具條顯示在兩個地方,一個是在系統的主頁面,是定義的Grid 節中的部分,為列表頁面的工具條和菜單;另外的部分顯示在表單的頁面部分,主要是菜單,工具條,頁面導航條等。
4 ) “MenuBar” 為實體表單頁面的主菜單部分,可以自定義菜單。
5 ) “ToolBar” 為實體表單頁面的工具條部分,可以自定義工具條。
6 ) “NavBar” 為實體表單頁面的導航條部分,可以自定義導航條。
4.Toolbar 結構圖以及相關屬性設置如下所示:
注: 1 )在 “Toolbar” 節中, “ValidForCreate” 說明該工具條在實體表單中,新建實體信息時是否顯示, ValidForCreate=“0” 說明在新建實體信息時不顯示該工具條, ValidForCreate= “1” 說明在新建實體信息時顯示該工具條。
2 )在 “Toolbar” 節中, “ValidForUpdate” 說明該工具條在實體表單中,更新實體信息時是否顯示, ValidForUpdate =“0” 更新在新建實體信息時不顯示該工具條, ValidForUpdate =“1 ” 更新在新建實體信息時顯示該工具條。
3 ) ToolBarSpacer 為工具條分隔條,以便對工具條進行分組。
4 ) Button 節中各個屬性說明:
屬性名 |
描述 |
類型 |
是否必須 |
Title |
Botton 顯示的名稱 |
string |
是 |
ToolTip |
鼠標指向 Botton 時顯示的提示信息 |
string |
否 |
Icon |
Botton 中顯示的圖標的 Url 地址 |
string |
否 |
URL |
點 Botton 指向的 URL 地址 |
string |
否 |
JavaScript |
點 Botton 觸發的 JavaScript 的執行代碼 |
string |
否 |
PassParams |
說明實體類型或 ID 號是否在 URL 中傳遞 |
String(0 或 1) |
否 |
WinMode |
顯示的界麵類型 (0-Window( 默認 ) , 1- 模態對話框, 2- 非模態對話框 ) |
String(0 , 1或 2) |
否 |
Client |
該 Botton 顯示在 Outlook 或 Web 程序中,默認是 Outlook 與 Web 都顯示,可填 “Outlook” ,“Web” |
String |
否 |
AvailableOffline |
該 Botton 在離線是否顯示,默認是 false |
true 或 false |
否 |
5.NavBar 結構圖以及相關設置如下所示:
注: 1 )在 “NavBar” 節中, “ValidForCreate” 說明該導航條在實體表單中,新建實體信息時是否顯示, ValidForCreate=“0” 說明在新建實體信息時不顯示該導航條, ValidForCreate= “1” 說明在新建實體信息時顯示該導航條。
2 )在 “NavBar” 節中, “ValidForUpdate” 說明該導航條在實體表單中,更新實體信息時是否顯示, ValidForUpdate =“0” 更新在新建實體信息時不顯示該導航條, ValidForUpdate =“1 ” 更新在新建實體信息時顯示該導航條。
3 ) NavBarItem 節中各個屬性說明:
屬性名 |
描述 |
類型 |
是否必須 |
ID |
NavBarItem 的唯一標識 |
string |
是 |
Title |
NavBarItem 顯示的名稱 |
string |
否 |
Icon |
NavBarItem 中顯示的圖標的 Url 地址 |
string |
否 |
URL |
點 NavBarItem 指向的 URL 地址 |
string |
否 |
Area |
NavBarItem 顯示的導航欄區域,值為 Sales ,Marketing , Service , Info(Details)( 默認 ) |
string |
否 |
Client |
該 NavBarItem 顯示在 Outlook 或 Web 程序中,默認是 Outlook 與 Web 都顯示,可填 “Outlook”, “Web” |
String |
否 |
AvailableOffline |
該 Botton 在離線是否顯示,默認是 false |
true 或 false |
否 |
6 . Menu 結構圖以及相關屬性設置如下所示:
注: 1 )在 “Menu” 節中, “ValidForCreate” 說明該菜單在實體表單中,新建實體信息時是否顯示, ValidForCreate=“0” 說明在新建實體信息時不顯示該菜單, ValidForCreate=“1 ” 說明在新建實體信息時顯示該菜單。
2 )在 “Menu” 節中, “ValidForUpdate” 說明該菜單在實體表單中,更新實體信息時是否顯示,ValidForUpdate =“0” 更新在新建實體信息時不顯示該菜單, ValidForUpdate =“1” 更新在新建實體信息時顯示該菜單。
3) 在 “Menu” 節中, “Title” 屬性表示顯示的菜單名稱。
4 ) “SubMenu” 說明還有下級菜單。
5 ) “MenuSpacer” 表示為菜單分隔條。
6 ) MenuItem 各屬性說明:
屬性名 |
描述 |
類型 |
是否必須 |
Title |
MenuItem 顯示的名稱 |
string |
是 |
URL |
點 MenuItem 指向的 URL 地址 |
string |
否 |
JavaScript |
點 MenuItem 觸發的 JavaScript 的執行代碼 |
string |
否 |
PassParams |
說明實體類型或 ID 號是否在 URL 中傳遞 |
String(0 或 1) |
否 |
WinMode |
顯示的界麵類型 (0-Window( 默認 ) , 1- 模態對話框, 2- 非模態對話框 ) |
String(0 , 1或 2) |
否 |
Client |
該 MenuItem 顯示在 Outlook 或 Web 程序中,默認是 Outlook 與 Web 都顯示,可填 “Outlook” ,“Web” |
String |
否 |
AvailableOffline |
該 MenuItem 在離線是否顯示,默認是 false |
true 或 false |
否 |
7 . 操作方法
1 )導出SiteMap:設置→自定義→導出自定義項,選擇 “ SiteMap ” ,然後選擇 “ 其他動作 ” → “ 導出所選自定義項 ” 。 或者之間使用
http:// 站點名 /Tools/SystemCustomization/ExportCustomizations/exportCustomizations.aspx
2 )修改導出的 XML 文檔:使用 XML Editor直接修改該 XML 文檔,各個標籤的含義如上所示。
3 )導入SiteMap:設置→自定義→導入自定義項,選擇要導入的SiteMap.XML,然後點 “ 上載” ,等該文件顯示在列表中時,點 “ 導入所有自定義項 ” 或 “ 其他動作 ” → “ 導入所選自定義項 ” 。 也可以通過
http:// 站點名 /Tools/SystemCustomization/ImportCustomizations/importCustomizations.aspx
四:客戶端 JavaScript 的設計
客戶端 JavaScript 代碼主要完成對錶單中的一些字段值進行驗證,以及對錶單進行初始化等工作。 微軟 CRM 系統提供三個事件的客戶端 Javascript 代碼的編寫,三個事件是分別是 OnLoad 事件,OnSave 事件和 OnChange 事件,在編寫完事件後 , 必須選擇事件已啟用選擇框 , 才能使用事件信息。
在實體定義頁面,如下圖選擇 “Form Properties” 就進入表單屬性設置頁面,進行 JavaScript 的代碼編寫。
書寫 JavaScript 代碼的界面如下所示, 特別注意的問題是:寫完 JavaScript 一定要選擇事件已啟動複選框,如果不選中的話所寫的 JavaScript 代碼是不可以使用的,同時寫完後還要在實體定義界面,選擇 “ 發布 ” 。
五:系統報表的製作
在微軟 CRM 中報表的製作有好幾種方法,一是通過 Office 套件,如 Word 、 Excel 等,二是通過SQL Server Report Services 工具進行報表的開發。 Office 套件的生成的報表比較簡單,通過拖放的方式即可實現。 SQL Server Report Service 報表的製作方法是利用 XML Editor與報表開發工具一起使用 , 報表開發工具作為 XML Editor的一個組件的形式實現的,在 Visual Stdio.net 2005 下開發的報表好像不能在 SQL Server Report Service2000 下使用,如果要想在微軟 CRM 系統中能夠提供報表篩選條件 , 必須要在微軟 CRM 系統中上傳做好的報表,通過微軟 CRM 系統上傳報表,有一個系統檢查的過程,驗證是不是合乎微軟 CRM 自定義報表的語法要求, 注意:如果要在使用的報表中使用篩選器,在自定義報表的數據集的 SQL 語句中,實體要使用別名,別名的前綴為 CRMAF_ 。 如果上傳成功自定義的報表,也可以編輯篩選的條件,在報表頁麵點 ” 其他動作 ” → ” 編輯默認篩選器 ” ,進入篩選器設置頁面。 具體報表製作見《 SQL Server Reporting Services 製作》文檔。 以及在白沙製作的一些自定義報表和在後台管理系統中開發的報表的文件。
六:注意事項
2. 權限 您可以向用戶分派權限,這些權限決定用戶可以對實體執行哪些操作。 Microsoft CRM 包括了以下適用於核心區域的權限:
權限 |
說明 |
創建 |
創建實體 |
讀 |
查看實體 |
寫 |
為用戶更改實體 |
刪除 |
為用戶移除實體 |
追加 |
將所選實體與另一實體相關聯 |
追加到 |
將某個實體與此實體相關聯 |
分派 |
向另一個用戶授予對實體的訪問權限 |
共享 |
向另一個用戶授予對實體的訪問權限,同時保留您自己的訪問權限 |
重定父級 |
為實體分派其他父實體 |
啟用 / 禁用 |
允許或取消權限 |
4 訪問級別使用權限集,您可以對記錄執行操作。 但是,訪問級別決定了您可以對哪些特定的記錄執行這些操作。
在 Microsoft CRM 中,可以為以下記錄分派訪問級別: “ 角色 ” 表單底部的 “ 標誌 ” 包括以下訪問級別:
未選擇內容。 此訪問級別拒絕任何級別的用戶權限。 不會為安全角色添加權限。
用戶。 這一初級訪問級別允許用戶處理其所負責的記錄類型、與該用戶共享的記錄類型和與用戶所在團隊共享的記錄類型。 例如,如果為用戶分派了 “ 用戶讀取客戶 ” 權限,則該用戶只能查看其所負責或共享的客戶。
業務部門。 這一中級訪問級別允許用戶處理其業務部門中的記錄類型。 擁有 “ 業務部門 ” 訪問權限的用戶也將自動擁有 “ 用戶 ” 訪問權限。 例如,如果用戶具有 “ 業務部門讀取客戶 ” 權限,則該用戶可以讀取本地業務部門中的所有客戶。
上 : 下級業務部門。 這一高級訪問級別允許用戶處理其所在業務部門中的記錄類型,以及該業務部門下屬的所有業務部門中的記錄類型。 擁有 “ 上 : 下級業務部門 ” 訪問權限的用戶也將自動擁有 “ 業務部門 ” 和 “ 用戶 ” 訪問權限。 例如,如果用戶具有 “ 上 : 下級業務部門讀取客戶 ” 權限,則該用戶可以讀取其所在業務部門的所有客戶,以及該業務部門下屬的任何部門的所有客戶。
組織。 這一全局訪問級別允許用戶處理整個組織中的所有記錄類型,無論實體或用戶所屬的業務部門層次級別。 擁有 “ 組織 ” 訪問權限的用戶也將自動擁有 “ 上 : 下級業務部門 ” 、 “ 業務部門” 和 “ 用戶 ” 訪問權限。
11 微軟 CRM 系統不能實現多對多的關係,只能實現一對多關係,或者是多對一的關係,一對多與多對一關係其實是一樣的意思,只是在兩個實體之間針對的實體不同而已。
12 用戶自定義的實體中分為用戶表和組織表兩種形式,用戶表和組織表的區別是在分配系統角色時, 用戶表有 “ 未選擇內容 ” , “ 用戶 ” , “ 業務部門 ” , “ 上 : 下級業務部門 ” , “ 組織 ” ;而組織表只有 “ 未選擇內容 ” , “ 組織 ” 。
13 微軟不支持直接修改頁面或數據庫,原因是微軟沒有經過測試,也不支持升級。
14 用戶自定義的視圖默認的是共享給所有的系統用戶,可以通過共享給組,實現視圖的私有,方法是打開 “ 操作 ” → “ 共享 ” → “ 添加團隊 ” ,分配給一個團隊即可。
15 系統中默認的視圖是不能刪除的,但可以通過分配給一個沒有用戶的虛擬組進行私有化來隱藏該view 。
16 系統中生成的各個視圖的作用是: “ 默認公共視圖 ” 為系統公用視圖,在用戶進入某個實體的頁面時顯示的視圖,可以通過 “ 其他動作 ” → “ 設為默認值 ” 來更改默認公共視圖; “ 公共視圖 ” 為系統所有用戶都可以訪問的視圖,可以通過把公共視圖共享給某個團隊的方法使其私有化,如果不想讓系統的已有的公共視圖顯示,可以把該視圖設置成一個虛擬的團隊來實現; “ 預覽視圖 ”為在其他視圖中選擇某條具體記錄,點該箭頭變成所顯示的視圖; “ 關聯視圖 ” 為在與該實體相關聯的其他實體的頁面進入該實體的頁面的視圖,如在新建 “ 聯繫人 ” 後,可在該頁面中調出 “ 客戶 ” 頁面,此時顯示的客戶列表為客戶實體的關聯視圖; “ 查找視圖 ” 為在實體之間中添加的一對多或多對一的關係時,然後把該關係作為字段使用時用到,即可以通過點 “ 查找 ” 按鈕,在查找界面進行選擇值時顯示的視圖; “ 高級查找視圖 ” 為在工具條上選擇 “ 高級查找 ” 按鈕時,給出查詢條件,顯示數據列表的視圖; “ 快速查找視圖 ” 在進入實體的相關頁面時,在查找框中輸入值後點 “ 查找 ” 按鈕的視圖。
17 映射為在父記錄創建時,在子記錄被自動創建,但映射只僅僅在創建時保持數據同步,但不能在修改時進行數據的實時同步。
18 POST URL 在 3.0 版本以後不再支持。
19 在做數據的導入導出時,應盡量把工作流的功能關閉(所有的工作流讓其停止工作)。
20 自定義報表時在數據庫中必須選擇以 Filtered 開頭的視圖為數據源,如果要做過濾條件的報表,則必須在數據庫查詢的 SQL 語句中在數據庫表名前加上 CRMAF_ ,如 CRMAF_ 表名。
21 如果要設置查看微軟 CRM 中的錯誤信息,可在 Web.Config 中設置 <add key="DevErrors" value="Off"/> 中的 value=“true” 即可,此時如果在 CRM 中出現錯誤,將以錯誤提示的頁面顯示。
22 如果要在微軟 CRM 中設置自定義的菜單或工具條,則必須在 Web.Config 中設置 <add key="ISVIntegration" value="None"/> 中的 value 的值,可以使用的值有 All , Outlook ,OutlookLaptopClient , OutlookWorkstationClient , Web , None
值 |
含義 |
All |
ISV 配置同時對 Outlook 與 Web 客戶端開放 |
Outlook |
ISV 配置只對 Outlook 開放 |
OutlookLaptopClient |
ISV 配置只對 OutlookLaptopClient 開放 |
OutlookWorkstationClient |
ISV 配置只對 OutlookWorkstationClient 開放 |
Web |
ISV 配置只對 Web 端客戶開放 |
None |
ISV 配置不對外開放 |