2

我有这个用于 CRM 4.0 的漂亮的小 javascript 片段来更新表单的 Money 字段以使用我作为字符串传入的货币符号。(来源

UpdateCurrencySymbolInUI: function (_curr) {
    // BTP: fail to update currency symbol if using browser other than IE (crmForm will not be defined)
    // (set currency not supported via Xrm.Page CRM 2011)
    if (!IsNull(crmForm)) {
        var iLen = crmForm.all.length;
        var oCtrl, i;

        for (i = 0; i < iLen; i++) {
            oCtrl = crmForm.all[i];
            if (!IsNull(oCtrl.IsMoney) && !oCtrl.IsBaseCurrency) {
                oCtrl.CurrencySymbol = _curr;
            }
        }
    }
}

它可以完美运行,但是对于即将更改的多浏览器支持(现在计划在 2012 年第 4 季度进行,对吗?)微软的自定义代码验证工具表明此代码将无法在 IE 以外的任何浏览器上运行,因为不再支持 crmForm。

经过一番谷歌搜索后,我看不到设置货币 sybmol 的受支持替代方案。我是否遗漏了 API 中的某些内容,或者他们是否完全删除了此功能以分配货币符号(通过 API)?这篇文章建议我使用 document.getElementById 并将“_sym”添加到字段名,但我认为这是不受支持的。我更喜欢受支持的解决方案。

4

1 回答 1

1

已编辑:从 OP 的问题中不是很明显,但这种行为(货币代码未更改)仅在transactioncurrencyid通过 JScript 更改属性时才会显示。

这就是 MS 在 CRM Online 和 On Premise UR5 ( img.lu.transcur.htc) 中仍在做的事情。看起来和我很相似。虽然在这里看不到任何特定于浏览器的东西......:

function updateCurrencySymbolInUI(){
    if(!IsNull(_oForm))
        for(var iLen=_oForm.all.length,oCtrl,i=0;i<iLen;i++){
            oCtrl=_oForm.all[i];
            if(!IsNull(oCtrl.IsMoney)&&!oCtrl.IsBaseCurrency){
                oCtrl.CurrencySymbol=_sCurSym;
               oCtrl.CurrencyPrecision=_iCurPre
            }        
        }
}

我认为代码验证工具的问题是因为如您所说crmForm已被弃用。document.all['crmForm']将一个对页面的 FORM 对象 ( )的引用传递给它,而不是crmForm. 我认为这会很好地工作。

为什么你需要这段代码?如果您在包含Money字段的表单上更改交易货币,控件中的货币符号会自动更改为在业务管理 > 货币中定义的符号。

如果符号不是您要显示的符号,请在此处更改:)

于 2012-08-28T15:32:35.073 回答