从CRM2011更新到CRM2016后,机会“像丢失一样关闭”不起作用

时间:2019-01-09 16:01:43

标签: javascript dynamics-crm-2011 updates crm dynamics-crm-2016

将CRM 2011升级到最新的内部部署版本后,请停止工作机会表单上的“失去时关闭”按钮。 经过一番调查,我发现内部javascript库存在问题。

来自complete()库(位于opps.js中)的机会按钮“由于丢失而关闭”调用系统功能Program Files\Microsoft Dynamics CRM\CRMWeb\_static\SFA\opps\

(下面的代码)

发现问题

  • $get()(更聪明的document.getElementById())-在Microsoft.Ajax.js中定义。它主要调用document.getElementById(),但看起来应该调用parent.document.getElementById()

  • Mscrm对象存在,但不包含OpportunityCommandActions

  • openStdDlgWithCallback在当前上下文中不存在,但在父上下文中存在。

重写“关闭为丢失”按钮动作不是问题,但是提到的函数和对象在多个地方使用,因此我需要更通用的解决方案。

您有什么建议吗?

function complete(bWon) {
    if (window._IsRefreshForm === "1") Mscrm.OpportunityCommandActions.opportunityClose(bWon);
    else {
        var oCrmFormSubmit = $get("crmFormSubmit"),
            oUrl = Mscrm.CrmUri.create("/SFA/opps/dlg_closeopp.aspx");
        oUrl.get_query()["pId"] = oCrmFormSubmit.crmFormSubmitId.value;
        oUrl.get_query()["pType"] = oCrmFormSubmit.crmFormSubmitObjectType.value;
        if (!IsNull(bWon)) oUrl.get_query()["won"] = bWon;
        var estimatedvalueValue = Mscrm.FormControlInputBehavior.GetBehavior("estimatedvalue").get_dataValue();
        if (!IsNull(estimatedvalueValue)) oUrl.get_query()["estimatedVal"] = estimatedvalueValue;
        var callbackFunction = Mscrm.Utilities.createCallbackFunctionObject("performActionAfterCloseOpp", this),
            ret_val = openStdDlgWithCallback(oUrl, document, 450, 420, callbackFunction);
        isOutlookHostedWindow() && performActionAfterCloseOpp(ret_val)
    }
}

0 个答案:

没有答案