簡體   English   中英

Microsoft Dynamics 365 統一接口 - JavaScript

[英]Microsoft Dynamics 365 Unified Interface - JavaScript

我的 D365 實例更新為統一接口,功能區命令后面的 JavaScript 壞了。 據我了解,需要替換 Xrm.Page 並將 PrimaryControl 添加為功能區工作台中的 Crm 參數。

我這樣做了,也更新了代碼,但出現錯誤:

TypeError:無法讀取未定義的屬性“getControl”
在 Object.OnSuccess

在 Object.ChangeStatusMultiple

這是代碼:

Applikata.Commands =
{
    ChangeStatus: function (id, entityName, status, state, successCallback,context) {
        var formContext = context;
        var entity = {};
        var arrStatus = status.SourceControlId.split("|");
        var _status = (state == 0) ? 100000000 : 100000002;

        // status arraives in following form
        // ac_grade | NoRelationship | Form | ac.ac_grade.Button17.Button

        if (arrStatus.length == 4)
            _status = arrStatus[arrStatus.length - 1].split(".")[2];

        entity.statuscode = { Value: _status };
        entity.statecode = { Value: state };

        //console.log(status);
        // ac_grade|OneToMany|SubGridAssociated|ac.ac_grade.100000008.GridButton
        //console.log("ChangeStatus:" + id + " entityName:" + entityName + " status:" + status + " state:" + state);
        //console.log("SDK.REST:" + SDK.REST);

        SDK.REST.updateRecord(
            id,
            entity,
            entityName,
            successCallback,
            function (error) {
                alert(error.message);
            }
        );
    },
    ChangeStatusMultiple: function (selectedIds, entityName, status, state, gridName, context) {
        var formContext = context;

        selectedIds.forEach(
            function (id) {
                Applikata.Commands.ChangeStatus(id, entityName, status, state, function () {});
            }
        );
        Applikata.Commands.OnSuccess(gridName);
    },

    OnSuccess: function (gridName,context) {
         var formContext = context;

        console.log('Control ' + gridName);
        console.log('Name of grid' + formContext.getControl(gridName,primaryControl).getName());
       // Xrm.Page.getControl(gridName).getName().refresh();
        formContext.getControl(gridName,primaryControl).refresh();
        

    }
};

我錯過了什么? 任何幫助,將不勝感激。

由於您希望將context作為 function OnSuccess: function (gridName,context)的第二個參數傳遞,因此您必須像這樣傳遞Applikata.Commands.OnSuccess(gridName, formContext); 從呼叫地點。

ChangeStatusMultiple: function (selectedIds, entityName, status, state, gridName, context) {
        var formContext = context;

        selectedIds.forEach(
            function (id) {
                Applikata.Commands.ChangeStatus(id, entityName, status, state, function () {});
            }
        );
        Applikata.Commands.OnSuccess(gridName, formContext);
    },

    OnSuccess: function (gridName, context) {
         var formContext = context;

        console.log('Control ' + gridName);
        console.log('Name of grid' + formContext.getControl(gridName,primaryControl).getName());
       // Xrm.Page.getControl(gridName).getName().refresh();
        formContext.getControl(gridName,primaryControl).refresh();
        

    }

或者您也可以將 formContext 設置為全局變量,而不是初始化它並傳入每個 function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM