Ошибка D365 при вызове функции из другого JS


У меня возникла проблема с вызовом функции JS из другого файла JS.

Main 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

Save + Published и 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   2   2018-06-20 19:28:03

1 ответ:

Способ регистрации файлов JS в форме, начиная с common.js сверху и затем ap_ItemFormBase.js должен работать. Но команда разработчиков сделал несколько улучшений производительности файлов скрипта, как отложенная загрузка скрипта/параллельная загрузка скриптов. Это немного сложно , и современный сценарий беспорядочно работает между различными клиентами, такими как UUI и web.

Как объяснено в блоге , Если вы зададите pre-requirement js как dependence, он загрузится до того, как вы его потребите в зависимых файлах.

Откройте ap_ItemFormBase.js web ресурс из решения (не из свойств формы), перейдите на вкладку зависимости и добавьте common.js. Это позволит убедиться, что файл готов, прежде чем ссылка будет использована.