如何处理 Dynamics 365 WebResources 中查找字段的异步/等待承诺

问题描述 投票:0回答:0

我正在尝试对我用来从另一个实体获取查找记录的函数进行异步调用。然而,当我调试代码时,每个值都被正确获取,但它仍然显示所有记录而不是过滤的记录。

async function addMasterContratLookupFilter(formContext) {
    'use strict';
    debugger;
    var mzk_subcontract = formContext.getAttribute("mzk_subcontract").getValue();
    if (mzk_subcontract !== null) {
        var mzk_subcontractId = null;

        if (mzk_subcontract !== null && mzk_subcontract.length > 0) {
            mzk_subcontractId = mzk_subcontract[0].id;
            mzk_subcontractId = mzk_subcontractId.replace(/[{}]/g, "");
        }

        var query = '<fetch>'
            + '<entity name="mzk_contractmanagement">'
            + '<attribute name="mzk_contractmanagementid" />'
            + '<attribute name="mzk_mastercontractagreement" />'
            + '<order attribute="mzk_subcontract" descending="false" />'
            + '<filter type="and">'
            + '<condition attribute="mzk_contractmanagementid" operator="eq" value="' + mzk_subcontractId + '" />'
            + '<condition attribute="statecode" operator="eq" value="0" />'
            + '<condition attribute="mzk_contracttypevalue" operator="eq" value="275380001" />'
            + '</filter>'
            + '</entity>'
            + '</fetch>';

        query = "?fetchXml=" + encodeURIComponent(query);
        try {
         const results = await Xrm.WebApi.retrieveMultipleRecords("mzk_contractmanagement", query);
            if (results.entities.length > 0) {
                var values = '';
                for (var i = 0; i < results.entities.length; i++) {
       values += "<value>" + results.entities[i]["_mzk_mastercontractagreement_value"] + "</value>";
                }

                if (values !== '') {

                    var fetchXml = '<filter type="and">'
                        + '<condition attribute="mzk_contractmanagementid" operator="in">'
                        + values
                        + '</condition>'
                        + '</filter>';
                                        formContext.getControl("mzk_mastercontractagreement").addCustomFilter(fetchXml);
              
}
                else {
..........
                }

            }
            else {
..........
            }
        } catch (error) {
            console.log(error.message);
        }
    }

这是在 onLoad 上调用的函数,调用上面的函数:

async function PopulateMasterContractAgreement(executionContext) {
    'use strict';

    const formContext = executionContext.getFormContext();

    if (formContext.getAttribute("mzk_subcontract") !== null && formContext.getAttribute("mzk_subcontract").getValue() !== null) {
        formContext.getControl("mzk_mastercontractagreement").addPreSearch(async function () {
            await addMasterContratLookupFilter(formContext);
        });
    }

} 

我调试代码的时候,上面的函数执行完后,就到了这个地步await addMasterContratLookupFilter(formContext);悬停的时候,显示: [[原型]] : 承诺 [[承诺状态]] : “待办的” [[承诺结果]] : 未定义

我其实是从XrmServiceToolkit转过来的。现在我正在使用 XrmWebApi 来处理查询。我希望在我的查找字段中显示正确的记录

javascript async-await dynamics-crm webapi
© www.soinside.com 2019 - 2024. All rights reserved.