CRM從2011開始推出了一個(gè)Web Resource的概念。Web Resource有很多種類型,我們比較常用的是JScript web resource,比如可以用來(lái)定制Form的OnLoad事件處理。還有一種XML類型的web resource,我們可以用它來(lái)做為CRM的配置文件。這個(gè)配置文件有什么用,怎么用呢?請(qǐng)大家看下面的這個(gè)小例子。
假如你在CRM中自定義了一個(gè)Ribbon按鈕,點(diǎn)擊這個(gè)按鈕,會(huì)彈出一個(gè)窗口打開你們公司的一個(gè)網(wǎng)站(比如一個(gè)SharePoint網(wǎng)站)。你們公司有兩個(gè)CRM和SharePoint的環(huán)境,一個(gè)是開發(fā)/測(cè)試環(huán)境,一個(gè)是生產(chǎn)環(huán)境。如果你將SharePoint的URL硬寫(hardcode)進(jìn)JScript的web resource里,那么每次如果你將solution從測(cè)試環(huán)境導(dǎo)入到生產(chǎn)環(huán)境的時(shí)候,你的live CRM都會(huì)打開錯(cuò)誤的SharePoint,即測(cè)試環(huán)境的SharePoint。
這時(shí),XML類型的web resource就派上了用場(chǎng)。你可以將SharePoint的URL寫在一個(gè)單獨(dú)的XML web resource里。自定義的Ribbon按鈕要打開哪個(gè)URL,要去xml web resource里讀取,而且xml web resource不要放在solution中,這樣就把SharePoint的URL從你的solution中剝離了出來(lái)。每次你從測(cè)試環(huán)境的CRM將solution導(dǎo)入到生產(chǎn)環(huán)境CRM中,就不會(huì)再引發(fā)打開錯(cuò)誤SharePoint的錯(cuò)誤了。
接下來(lái)的問(wèn)題就是在JScript的web resource中,如何讀取另一個(gè)xml web resource的數(shù)據(jù)呢?加入我們有兩個(gè)web resource,一個(gè)是new_testxml.xml,一個(gè)是new_test.js。new_testxml.xml的文件內(nèi)容如下:
<urls> <url id="myurl">http://www.baidu.com</url> </urls>
在JScript中,你要先加載xml文件,我們可以使用XMLHttpRequest對(duì)象來(lái)加載。關(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é)點(diǎn),并返回該節(jié)點(diǎn)的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)限: