长时间运行的异步更新后关闭Web资源

时间:2019-01-07 19:58:52

标签: javascript dynamics-crm microsoft-dynamics dynamics-crm-online dynamics-365

我进行了一次调用,该调用使用WebAPI检索了多个GUID。我遍历每个结果并相应地更新记录。所有这些都是异步完成的。我不希望用户等待所有记录更新,而只是想关闭Web资源。 我使用window.close(),但是它破坏了先前启动的异步更新调用。我该如何规避?以下是我正在拨打的电话:

window.opener.Xrm.WebApi.online.retrieveMultipleRecords("new_contract", "?$select=new_contractid&$filter=statecode eq 0 and statuscode eq 100000001&$top=5000")
    .then(function(results) {
        for (var i = 0; i < results.entities.length; i++) {
            var new_contractid = results.entities[i]["new_contractid"];
            var processedGuid = new_contractid.replace(/[{}]/g, "");

            var entity = {};
            entity.new_run = new Date(y).toISOString();

            window.opener.Xrm.WebApi.online.updateRecord("new_contract", processedGuid, entity)
                .then(function success(result) {
                    var updatedEntityId = result.id;
                },
                function (error) {
                    Xrm.Utility.alertDialog(error.message);
                });
        }
    }, function (error) {
        Xrm.Utility.alertDialog(error.message);
    });

我正在考虑从后端使用插件。我不确定采用哪种方法,任何输入都很好!

2 个答案:

答案 0 :(得分:4)

我建议您通过“自定义操作”来实现它,然后触发并忘记。将所有逻辑移到那里。

  

似乎我们应该考虑自定义动作和“功能”。可以将这些功能定义为工作流步骤和插件的混合–我们可以将输入参数传递到自定义动作中,并从该自定义动作中检索输出参数。之所以可以调用“函数”的原因是,与工作流/插件不同,我们实际上可以从其他地方调用这些函数–我们可以从javascript调用它们,可以从工作流调用它们,也可以调用它们来自插件。

Read more

答案 1 :(得分:2)

您不能回避,您要关闭正在执行代码的窗口。

使用插件可能会更好。