Dynamics crm 2011 工作流更改字段值的CRM JS事件

Dynamics crm 2011 工作流更改字段值的CRM JS事件,dynamics-crm-2011,dynamics-crm,dynamics-crm-2013,microsoft-dynamics,Dynamics Crm 2011,Dynamics Crm,Dynamics Crm 2013,Microsoft Dynamics,我在CRM 2015中有表格和表格上的按钮。通过单击表单上的按钮,用户触发按需工作流。工作流完成后,将更新表单上某个字段的值。但是,此服务器数据更改不会反映在用户UI上 注册JS回调的最佳方法是什么?如果工作流执行成功,JS回调将刷新表单 阅读本文:看起来我不能使用OnChange()事件,因为我是通过编程更改数据的 首先,我建议使用同步工作流。执行工作流后,只需执行以下代码: Xrm.Page.data.refresh(false); 我曾经有过这样的要求。我必须在表单上反映由异步工作流更改

我在CRM 2015中有表格和表格上的按钮。通过单击表单上的按钮,用户触发按需工作流。工作流完成后,将更新表单上某个字段的值。但是,此服务器数据更改不会反映在用户UI上

注册JS回调的最佳方法是什么?如果工作流执行成功,JS回调将刷新表单


阅读本文:看起来我不能使用OnChange()事件,因为我是通过编程更改数据的

首先,我建议使用同步工作流。执行工作流后,只需执行以下代码:

Xrm.Page.data.refresh(false);

我曾经有过这样的要求。我必须在
表单
上反映由异步工作流更改的更改,出于某种原因,我必须保持工作流的异步

以下是我针对此类需求所做的工作

向执行工作流的实体添加一个新字段

FieldName: "isworkflowexecutedsuccessfully"
FieldType: "TwoOption"
Default Value: "false"
然后在编写工作流代码的代码中,编写以下内容:

function someFunctionOfYours() {
RunWorkflow(); //
WaitForWorkflowToCompleteProcessingAndThenReload();
}

function isWorklowExecutionCompleted(TimerId, updateIsWorkflowExecutedSuccessfully) {
var entityName = Xrm.Page.data.entity.getEntityName();
var entityGuid = Xrm.Page.data.entity.getId();

var retrievedOpportunity = XrmServiceToolkit.Soap.Retrieve(entityName, entityGuid, new Array("isworkflowexecutedsuccessfully")); //synchronous call
if (retrievedOpportunity.attributes["isworkflowexecutedsuccessfully"].value = true) {
    clearInterval(TimerId);
    setTimeout(function () {
        setIsworkFlowExecutedSuccessfullyToFalse(updateIsWorkflowExecutedSuccessfully);
    }, 3000);
}
}

function WaitForWorkflowToCompleteProcessingAndThenReload() {
var TimerId = setTimeout(function () {
    isWorklowExecutionCompleted(TimerId);
}, 5000);
}

function setIsworkFlowExecutedSuccessfullyToFalse(updateIsWorkflowExecutedSuccessfully) {
var entityName = Xrm.Page.data.entity.getEntityName();
var entityGuid = Xrm.Page.data.entity.getId();

var updateOpportunity = new XrmServiceToolkit.Soap.BusinessEntity(entityName, entityGuid);
updateOpportunity.attributes["isworkflowexecutedsuccessfully"] = false;
if (updateIsWorkflowExecutedSuccessfully == false || updateIsWorkflowExecutedSuccessfully == null) {
    XrmServiceToolkit.Soap.Update(updateOpportunity);
}
Xrm.Utility.openEntityForm(entityName, entityGuid) //refresh form
}