CRM從2011開始推出了一個Web Resource的概念。Web Resource有很多種類型,我們比較常用的是JScript web resource,比如可以用來定制Form的OnLoad事件處理。還有一種XML類型的web resource,我們可以用它來做為CRM的配置文件。這個配置文件有什么用,怎么用呢?請大家看下面的這個小例子。
假如你在CRM中自定義了一個Ribbon按鈕,點擊這個按鈕,會彈出一個窗口打開你們公司的一個網(wǎng)站(比如一個SharePoint網(wǎng)站)。你們公司有兩個CRM和SharePoint的環(huán)境,一個是開發(fā)/測試環(huán)境,一個是生產(chǎn)環(huán)境。如果你將SharePoint的URL硬寫(hardcode)進(jìn)JScript的web resource里,那么每次如果你將solution從測試環(huán)境導(dǎo)入到生產(chǎn)環(huán)境的時候,你的live CRM都會打開錯誤的SharePoint,即測試環(huán)境的SharePoint。
這時,XML類型的web resource就派上了用場。你可以將SharePoint的URL寫在一個單獨的XML web resource里。自定義的Ribbon按鈕要打開哪個URL,要去xml web resource里讀取,而且xml web resource不要放在solution中,這樣就把SharePoint的URL從你的solution中剝離了出來。每次你從測試環(huán)境的CRM將solution導(dǎo)入到生產(chǎn)環(huán)境CRM中,就不會再引發(fā)打開錯誤SharePoint的錯誤了。
接下來的問題就是在JScript的web resource中,如何讀取另一個xml web resource的數(shù)據(jù)呢?加入我們有兩個web resource,一個是new_testxml.xml,一個是new_test.js。new_testxml.xml的文件內(nèi)容如下:
<urls> <url id="myurl">http://www.baidu.com</url> </urls>
在JScript中,你要先加載xml文件,我們可以使用XMLHttpRequest對象來加載。關(guān)于如何加載XML文檔,大家也可以參見我以前的文章。xml web resource的路徑為:
var xmlPath = "../WebResources/new_testxml.xml";
Web Resource的名字反映了路徑結(jié)構(gòu)。如果你的xml web resource叫new_xml/test.xml,那么它的路徑就為:
var xmlPath = "../WebResources/new_xml/testxml.xml";
在 JScript中先讀取xml web resource的內(nèi)容,并查詢id為myurl的節(jié)點,并返回該節(jié)點的URL。
var xmlPath = "../WebResources/new_testxml.xml";
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", xmlPath, false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
var url = xmlDoc.selectSingleNode("/urls/url[@id='myurl']").text;
最后不要忘了給用戶設(shè)置讀取web resource的權(quán)限: