Quantas vezes nos deparamos com cenários de erros que o workflow se perde e não podemos criar um novo registro? Ou para gerar um novo registro as vezes é algo muito demorado. Fica aqui a dica sobre como reiniciar um workflow via background script.
Para reiniciar o workflow, uma linha de comando:
new Workflow().restartWorkflow(grCR);
Aonde grCR é o GlideRecord do registro que você quer reiniciar.
Uma coisa que precisamos ter atenção é, caso um workflow precise ser reiniciado, se existem aprovações na execução atual. Quando um workflow é reiniciado, é importante que estas aprovações sejam desconsideradas (canceladas) para que durante a nova execução não gerem dúvidas ou até mesmo afete a execução do workflow.
Para cancelar as aprovações de um workflow, use:
new WorkflowApprovalUtils().cancelAll(grCR, 'Sua mensagem aqui');
Aonde grCR é o registro referência no qual as aprovações estão apontando.
Ao cancelar as aprovações, é possível incluir uma mensagem customizada explicando o motivo do cancelamento (o que é bastante útil!)
Segue abaixo um exemplo completo de um registro de Change Request sendo reiniciado e tendo suas aprovações canceladas:
comment = 'This CR approval was cancelled due to issues on the SN platform.'; var grCR = new GlideRecord('change_request'); if (grCR.get('9e4e23091b5ee81074dd620bbc4bcbe3')) { new WorkflowApprovalUtils().cancelAll(grCR, comment); new Workflow().restartWorkflow(grCR); }
Abraço a todos!