Opções de Criação de Atividades no WF
.NET Framework 4.6.1 fornece várias opções para criar atividades personalizadas. O método correto a utilizar para criar uma determinada atividade depende das funcionalidades de tempo de execução necessárias.
Decidir que Classe de Atividade Base utilizar para Criar Atividades Personalizadas
A tabela seguinte lista as funcionalidades disponíveis nas classes base de atividades personalizadas.
Classe de atividade base | Funcionalidades disponíveis |
---|---|
Activity | Compõe grupos de atividades personalizadas e fornecidas pelo sistema numa atividade composta. |
CodeActivity | Implementa funcionalidades imperativas ao fornecer um Execute método que pode ser substituído. Também fornece acesso ao controlo, variáveis e argumentos.. |
NativeActivity | Fornece todas as funcionalidades do , além de CodeActivityabortar a execução de atividades, cancelar a execução de atividades subordinadas, utilizar marcadores e agendar atividades, ações de atividade e funções. |
DynamicActivity | Fornece uma abordagem semelhante a DOM para construir atividades que interagem com o estruturador WF e a maquinaria de tempo de execução através ICustomTypeDescriptorde , permitindo a criação de novas atividades sem definir novos tipos. |
Atividades de Criação com Atividade
Atividades que derivam da Activity funcionalidade de composição ao reunir outras atividades existentes. Estas atividades podem ser atividades e atividades personalizadas existentes do .NET Framework biblioteca de atividades 4.6.1. A montagem destas atividades é a forma mais básica de criar funcionalidades personalizadas. Normalmente, esta abordagem é tomada ao utilizar um ambiente de design visual para criar fluxos de trabalho.
Atividades de Criação com CodeActivity ou AsyncCodeActivity
As atividades que derivam CodeActivity ou AsyncCodeActivity podem implementar funcionalidades imperativas ao substituir o Execute método com código imperativo personalizado. O código personalizado é executado quando a atividade é executada pelo runtime. Embora as atividades criadas desta forma tenham acesso a funcionalidades personalizadas, não têm acesso a todas as funcionalidades do runtime, como o acesso total ao ambiente de execução, a capacidade de agendar atividades subordinadas, criação de marcadores ou suporte para um método Cancelar ou Abortar. Quando uma CodeActivity execução é executada, tem acesso a uma versão reduzida do ambiente de execução (através da CodeActivityContext classe ou AsyncCodeActivityContext ). As atividades criadas com CodeActivity têm acesso a resolução de argumentos e variáveis, extensões e controlo. O agendamento de atividades assíncrona pode ser feito com AsyncCodeActivity.
Atividades de Criação com NativeActivity
As atividades derivadas de NativeActivity, como as que derivam do CodeActivity, criam funcionalidades imperativas ao substituir Execute, mas também têm acesso a todas as funcionalidades do runtime do fluxo de trabalho através do NativeActivityContext que é transmitido para o Execute método. Este contexto tem suporte para agendar e cancelar atividades subordinadas, execução ActivityAction e ActivityFunc<TResult> objetos, transação de fluxo para um fluxo de trabalho, invocar processos assíncronos, cancelar e abortar a execução, acesso a propriedades e extensões de execução e marcadores (identificadores para retomar fluxos de trabalho em pausa).
Atividades de Criação com DynamicActivity
Ao contrário dos outros três tipos de atividade, as novas funcionalidades não são criadas ao derivar novos tipos DynamicActivity (a classe está selada), mas sim ao montar funcionalidades nas Properties propriedades e Implementation com um modelo de objeto de documento de atividade (DOM).
Atividades de Criação que devolvem um resultado
Muitas atividades têm de devolver um resultado após a execução. Embora seja possível definir sempre um personalizado OutArgument<T> numa atividade para esta finalidade, é sugerido que utilize Activity<TResult>, ou deriva CodeActivity<TResult> de ou NativeActivity<TResult>. Cada uma destas classes base tem um OutArgument<T> resultado com o nome Resultado que a sua atividade pode utilizar para o respetivo valor devolvido. As atividades que devolvem um resultado só devem ser utilizadas se apenas um resultado precisar de ser devolvido de uma atividade; se forem necessários múltiplos resultados, devem ser utilizados membros separados OutArgument<T> .