我在CRM 2015中的表单上有表单和按钮。通过单击表单上的按钮,用户可以触发按需工作流程。完成工作流后,它会更新表单上其中一个字段的值。但是,此服务器数据更改未反映在用户UI上。
注册JS回调的最佳方法是什么?如果工作流程执行成功,它将刷新表单?
阅读本文:https://msdn.microsoft.com/en-us/library/gg334701.aspx看起来我不能使用OnChange()事件,因为我以编程方式更改数据。
答案 0 :(得分:1)
首先,我建议使用Sync Workflow。执行工作流后,只需执行以下代码:
Xrm.Page.data.refresh(false);
答案 1 :(得分:0)
我曾经有过这样的要求。我必须反映异步工作流更改的Form
上的更改,由于某种原因,我必须保持工作流异步。
以下是我为此类要求所做的解决方法。
在实体上添加新字段
。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
}