从另一个JS调用函数时发生D365错误

时间:2018-06-20 16:28:04

标签: javascript dynamics-crm crm microsoft-dynamics

我在从另一个JS文件调用JS函数时遇到问题。

定义功能的主JS。

var Common = Common || {};
Common.BaseAction = Common.BaseAction || {};

Common.BaseAction.SetNotification = function (message, level, uniqueId)
{
Xrm.Page.ui.setFormNotification(message, level, uniqueId);
}

Common.BaseAction.clearNotification = function (uniqueId) {
Xrm.Page.ui.clearFormNotification(uniqueId);
}

我从哪里调用函数的JS

var apItem = apItem || {};
apItem.BaseForm = apItem.BaseForm || {};

apItem.BaseForm.SetName = function ()
{
var bookName = Xrm.Page.getAttribute("ap_bookid").getValue()[0].name;
var condition = Xrm.Page.getAttribute("ap_condition").getText();

if (bookName !== null && condition !== null) {
    Xrm.Page.getAttribute("ap_name").setValue(bookName + " - " + condition);
}
}

apItem.BaseForm.CountOverDueBy = function() {
var rentedTill = Xrm.Page.getAttribute("ap_rented_till").getValue();
var nowD = Date.now();

if (rentedTill !== null) {
    var overdueBy = parseInt((Date.now() - rentedTill) / 86400000);

    if (overdueBy > 0) {
        Xrm.Page.getAttribute("ap_overdue_by").setValue(overdueBy);
        Common.BaseAction.SetNotification("Book is Overdue by " + overdueBy 
+ " Days.", "WARNING", "OverDueWarning");
    }
    else {
        Xrm.Page.getAttribute("ap_overdue_by").setValue(null);
        Common.BaseAction.clearNotification("OverDueWarning");
    }
}
}

以实体的形式,我添加了以上两个文件,其中common.js位于顶部,并且我从事件处理程序中调用了函数apItem.BaseForm.CountOverDueBy

保存+发布并按Ctrl + F5会出现以下错误

ReferenceError: Common is not defined
    at Object.apItem.BaseForm.CountOverDueBy (https://<domain>/%7B636651014350000438%7D/WebResources/ap_ItemFormBase.js?ver=2091450722:24:13)
    at eval (eval at RunHandlerInternal (https://<domain>/form/ClientApiWrapper.aspx?ver=2091450722:153:1), <anonymous>:1:17)
    at RunHandlerInternal (https://<domain>/form/ClientApiWrapper.aspx?ver=2091450722:159:1)
    at RunHandlers (https://<domain>/form/ClientApiWrapper.aspx?ver=2091450722:118:1)
    at OnScriptTagLoaded (https://<domain>/form/ClientApiWrapper.aspx?ver=2091450722:233:1)
    at https://<domain>/form/ClientApiWrapper.aspx?ver=2091450722:202:1

我已经尝试了一切,但似乎没有任何效果。

1 个答案:

答案 0 :(得分:0)

从顶部的common.js开始然后以ap_ItemFormBase.js形式注册JS文件的方式应该起作用。但是产品团队在诸如懒惰脚本加载/并行脚本加载之类的脚本文件上几乎没有提高性能。这有点棘手,而且现代脚本在UUI和Web等不同客户端之间是混乱的。

Like explained in blog post,如果您将必备的js设置为依赖项,它将在加载到依赖文件中之前加载。

从解决方案(而非“表单属性”)中打开ap_ItemFormBase.js Web资源,转到依赖项标签并添加common.js。这样可以确保在使用引用之前文件已准备就绪。