1

У меня есть форма и кнопка в этой форме в CRM 2015. Нажав на кнопку в форме, пользователь запускает рабочий процесс по требованию. Когда рабочий процесс завершен, он обновляет значение одного из полей формы. Однако это изменение данных сервера не отражается на пользовательском интерфейсе пользователя.Событие CRM JS для значения поля, измененного рабочим процессом

Каков наилучший способ зарегистрировать обратный вызов JS, который обновит форму, если выполнение рабочего процесса будет успешным?

Чтение этого: https://msdn.microsoft.com/en-us/library/gg334701.aspx похоже, что я не могу использовать событие OnChange(), потому что я изменяю данные программно.

ответ

1

Прежде всего, я бы предложил использовать Sync Workflow. После выполнения рабочего процесса просто выполните следующий код:

Xrm.Page.data.refresh(false); 
0

У меня были такие требования один раз. Мне пришлось отразить изменения на Form, которые меняются на Async Workflow, и по какой-то причине я должен был сохранить Async рабочего процесса.

Следующее - это работа, которую я сделал для таких требований.

Добавить новое поле объекту, на котором выполняется рабочий процесс.

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 
}