在网上花了几个小时后,我从不同来源收集了一些关于这个问题的有用信息。
我已经设法在 IE 浏览器上为Microsoft Dynamics CRM 2011设计了两种方式并测试了两种方式,以动态更改表单上每个货币字段的货币符号。
- 使用OData(简单有效,没有跨浏览器兼容性问题):
function changeCurrencySymbolOData(guid) {
returnValue = retrieveMultiple("TransactionCurrencySet", "?$filter=TransactionCurrencyId eq guid'" + guid + "'");
if (returnValue != null && returnValue[0] != null) {
var currencyInfo = returnValue[0];
// looping through all controls on the form and sets the currency symbol.
var oCtrl;
for (var i = 0; i < crmForm.all.length; i++) {
oCtrl = crmForm.all[i];
if (oCtrl.tagName == "INPUT" &&
(oCtrl.className == "ms-crm-Money-CurrencySymbol" ||
oCtrl.className == "ms-crm-Money-CurrencySymbol ms-crm-ReadOnly")) {
oCtrl.value = currencyInfo.ISOCurrencyCode;
}
}
}
}
用法:
changeCurrencySymbolOData(accountCurrency.Id);
指accountCurrency
欧元(EUR)货币。
function changeCurrencySymbolFetchXML(isoCurrencyCode) {
var currencySymbolName = crmForm.all.transactioncurrencyid.cursymclm;
// ensuring that currency is present.
var fetchCurr = '<fetch mapping="logical" count="50" version="1.0">';
fetchCurr += '<entity name="transactioncurrency">';
fetchCurr += ' <attribute name="currencyname" />';
fetchCurr += ' <attribute name="' + currencySymbolName + '" />';
fetchCurr += ' <filter>';
fetchCurr += ' <condition attribute="isocurrencycode" operator="eq" value="' + isoCurrencyCode + '" />';
fetchCurr += ' </filter>';
fetchCurr += '</entity>';
fetchCurr += '</fetch>';
results = doFetch(fetchCurr);
if (results != null && results.length > 0) {
var currency = results[0].selectSingleNode('./transactioncurrencyid');
// checking if the same currency is already selected, then there is no need to change anything.
if (crmForm.all.transactioncurrencyid.DataValue == null ||
crmForm.all.transactioncurrencyid.DataValue[0].id != currency.text) {
var currencyName = results[0].selectSingleNode('./currencyname').text;
// defining the variable to hold the actual symbol.
var currencySymbol = results[0].selectSingleNode('./' + currencySymbolName).text;
var lookupData = new Array();
var lookupItem = new Object();
// setting the id, typename, and name properties to the object.
lookupItem.id = currency.text;
lookupItem.name = currencyName;
lookupItem.typename = 'transactioncurrency';
// adding the object to the array.
lookupData[0] = lookupItem;
// setting the value of the lookup field to the value of the array.
crmForm.all.transactioncurrencyid.DataValue = lookupData;
crmForm.all.transactioncurrencyid.ForceSubmit = true;
// looping through all controls on the form and sets the currency symbol.
var oCtrl;
for (var i = 0; i < crmForm.all.length; i++) {
oCtrl = crmForm.all[i];
if (oCtrl.tagName == "INPUT" &&
(oCtrl.className == "ms-crm-Money-CurrencySymbol" ||
oCtrl.className == "ms-crm-Money-CurrencySymbol ms-crm-ReadOnly")) {
oCtrl.value = currencySymbol;
}
}
}
}
}
function doFetch(fetchXml) {
fetchXml = fetchXml.replace(/</g, '<');
fetchXml = fetchXml.replace(/>/g, '>');
// preparing the SOAP message.
var xml = "<?xml version='1.0' encoding='utf-8'?>"
xml += "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' "
xml += "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
xml += "xmlns:xsd='http://www.w3.org/2001/XMLSchema'>";
xml += Xrm.Page.context.getAuthenticationHeader();
xml += "<soap:Body>";
xml += "<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'><fetchXml>";
xml += fetchXml;
xml += "</fetchXml></Fetch>";
xml += "</soap:Body></soap:Envelope>";
// preparing the xmlHttpObject and send the request.
var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xHReq.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xHReq.setRequestHeader("Content-Length", xml.length);
xHReq.send(xml);
// capturing the result.
var resultXml = xHReq.responseXML;
// checking for errors.
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0) {
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
alert(msg);
}
// process and display the results.
else {
// capturing the result and UnEncode it.
var resultSet = new String();
resultSet = resultXml.text;
resultSet.replace('<', '<');
resultSet.replace('>', '>');
// creating an XML document that you can parse.
var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
oXmlDoc.async = false;
// loading the XML document that has the UnEncoded results.
oXmlDoc.loadXML(resultSet);
// displaying the results.
var results = oXmlDoc.getElementsByTagName('result');
return results;
}
}
用法:
changeCurrencySymbolFetchXML('EUR');
资源: