Devo usar uma máquina de estado ou um fluxo de trabalho de sequência no WF?
Pergunta
Tenho um processo de negócios repetível que executo semanalmente como parte de minhas responsabilidades de gerenciamento de configuração.O processo não muda:Eu baixo os detalhes das alterações no Excel, abro a planilha e copio os detalhes com base em uma macro, crio um documento do Word a partir de um modelo de agenda, atualizo a agenda com os dados do Excel, crio PDFs a partir do documento do Word e os envio por e-mail.
Este processo é facilmente representado em um fluxo de trabalho sequencial e é assim que o tenho até agora, com automação COM para lidar automaticamente com as peças do Excel e do Word.O problema é que existe uma etapa humana entre “criar agenda” e “enviá-la”, na qual eu reviso os detalhes da mudança e formulo perguntas sobre eles, que são adicionadas à agenda.Atualmente, tenho uma atividade Suspender para suspender o fluxo de trabalho enquanto executo manualmente esta parte do processo.
Minha pergunta é: devo reescrever meu fluxo de trabalho para torná-lo uma máquina de estado que siga as melhores práticas para interação humana em um processo de negócios ou a atividade Suspender é uma solução razoável?
Solução
Não, não acho que você precise usar uma máquina de estado para esse fluxo de trabalho.Porém, proponho alterar a atividade Suspender porque:
A atividade de suspensão interrompe temporariamente a execução do fluxo de trabalho atual.Normalmente, você usa a atividade de suspensão para refletir uma condição de erro que requer atenção por um administrador.
Quando uma instância do fluxo de trabalho é suspensa, um erro é registrado.Você pode especificar uma string de mensagem para acompanhar o erro para ajudar o administrador a diagnosticar o problema com a propriedade SustendActivity Error.Uma instância de fluxo de trabalho suspenso ainda pode receber mensagens que estão na fila até que o fluxo de trabalho seja reiniciado.Todas as informações de estado para a instância do fluxo de trabalho são salvas e são restabelecidas quando a instância é retomada (usando currículo).
Fonte: MSDN
A maneira típica de adicionar uma tarefa manual em um fluxo de trabalho (seja uma máquina de sequência ou de estado) é definir uma interface de troca de dados externa e usar uma atividade HandleExternalEvent (e possivelmente uma atividade CallExternalMethod).Para mais detalhes, consulte os seguintes artigos:
Outras dicas
Atualizar:Panos faz uma boa observação sobre Suspender Atividade.Concordo que tem uma finalidade diferente no autômato do fluxo de trabalho.
Se você acha que está mais preocupado com a transição do fluxo de trabalho entre vários estados, então o fluxo de trabalho da máquina de estado é ideal.Caso contrário, a sequência está ótima.
O principal problema que você deve tentar resolver é que o fluxo de trabalho não deve amarrar um thread enquanto espera pela interação humana (agilidade do thread).Se o fluxo de trabalho estiver inativo e persistir durante esse período (como usar SqlWorkflowPersistenceService), Não deveria ser um problema.