我进行了一次调用,该调用使用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);
});
我正在考虑从后端使用插件。我不确定采用哪种方法,任何输入都很好!
答案 0 :(得分:4)
我建议您通过“自定义操作”来实现它,然后触发并忘记。将所有逻辑移到那里。
似乎我们应该考虑自定义动作和“功能”。可以将这些功能定义为工作流步骤和插件的混合–我们可以将输入参数传递到自定义动作中,并从该自定义动作中检索输出参数。之所以可以调用“函数”的原因是,与工作流/插件不同,我们实际上可以从其他地方调用这些函数–我们可以从javascript调用它们,可以从工作流调用它们,也可以调用它们来自插件。
答案 1 :(得分:2)
您不能回避,您要关闭正在执行代码的窗口。
使用插件可能会更好。