在CRM 2011中的表单上更改货币时更改货币字段的符号

时间:2013-05-13 16:28:10

标签: javascript dynamic dynamics-crm-2011 dynamics-crm currency

你们中的一些人可能在 Microsoft Dynamics CRM 2011 中遇到过这个问题,但今天我被分配了一项任务,即动态更改Currency查找值以匹配帐户货币。任何差异。我只是通过调用我的setLookupValue JavaScript函数来根据账户货币设置货币值来做同样的事情。

setLookupValue("transactioncurrencyid", "transactioncurrency", accountCurrency.Id, accountCurrency.Name);

在进行单元测试后,货币查找值发生了变化,但我发现表格中使用货币数据类型定义的所有字段的货币符号都没有变为目标货币,在我的情况下是accountCurrency

e.g。 Currency字段已从美元(USD)更改为欧元(EUR),但所有字段都显示为USD作为前缀。

2 个答案:

答案 0 :(得分:0)

深入研究JS后,发现有一个简单的“受支持”功能可以通过JavaScript更改或隐藏表单上的货币符号。在IE和Chrome for CRM 365上对此进行了测试。

hideCurrencySymbol = function(fieldName)

{
    var field = Xrm.Page.getAttribute(fieldName);
    if(field)
    {
        field.setCurrencySymbol("")//Or any symbol you want
    }
}

答案 1 :(得分:-1)

在网上花了几个小时之后,我收集了一些有关此问题的不同来源的有用信息。

我已设法通过两种方式设备并在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)货币。


  • 使用获取XML
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, '&lt;');
    fetchXml = fetchXml.replace(/>/g, '&gt;');
    // 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('&lt;', '<');
        resultSet.replace('&gt;', '>');

        // 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');

资源: