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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top