D365 从另一个 JS 调用函数时出错
D365 Error when calling function from another JS
我在从另一个 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
我已经尝试了所有方法,但似乎没有任何效果。
您在表格中注册 JS 文件的方式,从顶部的 common.js
开始,然后是 ap_ItemFormBase.js
应该可行。但是产品团队对脚本文件的性能改进很少,例如延迟脚本 loading/parallel 脚本加载。这有点棘手,现代脚本在 UUI 和 Web 等不同客户端之间很混乱。
Like explained in blog post,如果你将前提js设置为依赖,它会在你在依赖文件中使用它之前加载。
从解决方案(而不是从表单属性)打开 ap_ItemFormBase.js
Web 资源,转到 Dependencies 选项卡并添加 common.js
。这将确保文件在使用参考之前准备就绪。
我在从另一个 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
我已经尝试了所有方法,但似乎没有任何效果。
您在表格中注册 JS 文件的方式,从顶部的 common.js
开始,然后是 ap_ItemFormBase.js
应该可行。但是产品团队对脚本文件的性能改进很少,例如延迟脚本 loading/parallel 脚本加载。这有点棘手,现代脚本在 UUI 和 Web 等不同客户端之间很混乱。
Like explained in blog post,如果你将前提js设置为依赖,它会在你在依赖文件中使用它之前加载。
从解决方案(而不是从表单属性)打开 ap_ItemFormBase.js
Web 资源,转到 Dependencies 选项卡并添加 common.js
。这将确保文件在使用参考之前准备就绪。