2

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

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

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

例如Currency,字段从美元 (USD)更改为欧元 (EUR),但所有字段都显示USD为前缀。

4

2 回答 2

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
    }
}
于 2019-09-23T06:10:34.677 回答
-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');

资源:

于 2013-05-13T16:28:10.230 回答