In my scenario, I have a flow wish is executed when a contact is created.
In order to simulate a real time process, I add 3 status reason to the contact entity:
- In progress: Flow's execution is in progress.
- Success: Flow's execution is successful
- Failure: Flow's execution is failed
Basically, in my sample code, when a contact is created within the quickCreate I open a ProgressIndicator; and I check recursively the status reason until it's different from In progress value. Then I close the ProgressIndicator. Of course you can also refresh your data if needed.
function refrechDataAfterFlowExecution(selectedItems) {
var entityFormOptions = {};
entityFormOptions["entityName"] = "contact";
entityFormOptions["useQuickCreateForm"] = true;
formParameters = {};
Xrm.Navigation.openForm(entityFormOptions, formParameters)
.then(function (success) {
return contactParam = {
logicalName: success.savedEntityReference[0].entityType,
Id: success.savedEntityReference[0].id.replace("{", "").replace("}", "")
};
})
.then(function (UpdatePriceParam) {
logicalName = contactParam.logicalName;
id = contactParam.Id;
Xrm.Utility.showProgressIndicator("Performing Custom Operations in Background. Please Wait..")
const recursiveCall = (status) => {
return new Promise((resolve) => {
console.log(status);
if (status != 177530000) {
Xrm.WebApi.retrieveRecord("contact", contactParam.Id, "?$select=statuscode").then(
function success(result) {
console.log(result)
status = result.statuscode
return setTimeout(() => resolve(recursiveCall(result.statuscode)), 500);
})
} else {
return resolve()
}
})
}
recursiveCall(0).then(() => Xrm.Utility.closeProgressIndicator());
})
}