Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Normalmente, quando as regras são usadas em um aplicativo de fluxo de trabalho, as regras fazem parte do assembly. Em algumas situações, convém manter o RuleSets separada do assembly de modo que eles possam ser atualizados sem recriar e implantar o assembly de fluxo de trabalho. Este exemplo permite que você gerencie e edite RuleSets em um banco de dados e acesse esses RuleSets de um fluxo de trabalho em runtime. Isso permite que a execução de instâncias de fluxo de trabalho incorpore automaticamente as alterações de RuleSet.
O exemplo do Kit de Ferramentas de RuleSet Externo contém uma ferramenta baseada no Windows Forms que você pode usar para gerenciar e editar versões de RuleSet em um banco de dados. Ele também inclui uma atividade e um serviço de host para executar essas regras.
Observação
Este exemplo requer o Microsoft SQL Server.
O Visual Studio fornece um editor RuleSet como parte do WF (Windows Workflow Foundation). Você pode iniciar este editor clicando duas vezes na Policy atividade em um fluxo de trabalho; ele serializa o objeto RuleSet definido para o arquivo .rules associado ao fluxo de trabalho (uma Policy atividade executa uma instância RuleSet no fluxo de trabalho). O arquivo .rules é compilado no assembly como um recurso quando você cria o projeto de fluxo de trabalho.
Os componentes deste exemplo incluem:
Uma ferramenta de interface gráfica do usuário RuleSet que você pode usar para editar e gerenciar versões do RuleSet no banco de dados.
Um serviço de RuleSet que é configurado no aplicativo host e acesse RuleSets de base de dados.
Uma
ExternalPolicyatividade que solicita um RuleSet do serviço RuleSet e aplica o RuleSet ao fluxo de trabalho.
A interação dos componentes é mostrada na imagem a seguir. As seções a seguir descrevem cada componente.
Ferramenta RuleSet
A imagem a seguir é uma captura de tela da ferramenta RuleSet. No menu Repositório de Regras , você pode carregar os RuleSets disponíveis do banco de dados e salvar RuleSets modificados de volta para o repositório. Um arquivo de configuração de aplicativo fornece uma cadeia de conexão de banco de dados para o banco de dados RuleSet. Quando você inicia a ferramenta, ela carrega automaticamente os RuleSets do banco de dados configurado.
A ferramenta RuleSet aplica números de versão principais e menores aos RuleSets, permitindo que você mantenha e armazene simultaneamente várias versões (a ferramenta não fornece nenhum bloqueio ou outros recursos de gerenciamento de configuração, além da funcionalidade de controle de versão). Usando a ferramenta, você pode criar novas versões do RuleSet ou excluir versões existentes. Quando você clica em Novo, a ferramenta cria um novo nome RuleSet e aplica a versão 1.0. Quando você copia uma versão, a ferramenta cria uma cópia da versão do RuleSet selecionada, incluindo as regras contidas, e atribui novos números de versão exclusivos. Esses números de versão são baseados nos números de versão dos RuleSets existentes. Você pode alterar o nome do RuleSet e os números de versão usando os campos associados no formulário.
Quando você clica em Editar Regras, o editor RuleSet é iniciado, conforme mostrado na imagem a seguir:
Esta é uma re-hospedagem da caixa de diálogo do editor que faz parte do complemento do Windows Workflow Foundation para o Visual Studio. Ele fornece a mesma funcionalidade, incluindo o suporte do Intellisense. As regras são criadas em relação a um tipo de destino (como um fluxo de trabalho) associado ao RuleSet na ferramenta; quando você clica na caixa de diálogo Procurar na ferramenta principal, a caixa de diálogo Seletor de Fluxo de Trabalho/Tipo é exibida, conforme mostrado na Figura 4.
Figura 4: Seletor de Fluxo de Trabalho/Tipo
Você pode usar a caixa de diálogo Seletor de fluxo de trabalho/tipo para especificar um assembly e um tipo específico dentro desse assembly. Esse tipo é o tipo de destino no qual as regras são criadas (e executadas). Em muitos casos, o tipo de destino é um fluxo de trabalho ou algum outro tipo de atividade. No entanto, você pode executar um RuleSet contra qualquer tipo .NET.
O caminho para o arquivo de assembly e o tipo name are stored with the RuleSet no banco de dados, de modo que, quando o RuleSet é recuperado do banco de dados, a ferramenta tenta carregar automaticamente o tipo de destino.
Quando você clica em OK na caixa de diálogo Seletor de Fluxo de Trabalho/Tipo , ele valida o tipo selecionado em relação ao RuleSet, para garantir que o tipo de destino tenha todos os membros referenciados pelas regras. Os erros são mostrados em uma caixa de diálogo Erros de Validação . Você pode optar por continuar com a alteração apesar dos erros ou clicar em Cancelar. No menu Ferramentas na caixa de diálogo da ferramenta principal, você pode clicar em Validar para validar novamente a versão ruleSet em relação à atividade de destino.
No menu Dados da ferramenta, você pode importar e exportar RuleSets. Quando você clica em Importar, uma caixa de diálogo de escolha de arquivo é exibida, na qual você pode selecionar um arquivo .rules. Isso pode ou não ser um arquivo criado inicialmente no Visual Studio. O arquivo .rules deve conter uma instância serializada RuleDefinitions que contenha uma coleção de condições e uma coleção de RuleSets. A ferramenta não usa a coleção de condições, mas usa o RuleDefinitions formato .rules para permitir a interação com o ambiente do Visual Studio.
Depois de selecionar um arquivo .rules, uma caixa de diálogo Seletor RuleSet será exibida. Você pode usar a caixa de diálogo para selecionar os RuleSets no arquivo que deseja importar (o padrão especifica todos os RuleSets). Os RuleSets no arquivo .rules não têm números de versão, pois o controle de versão deles em um projeto do WF é o mesmo que a versão do assembly. Durante o processo de importação, a ferramenta atribui automaticamente o próximo número de versão principal disponível (que você pode alterar após a importação); você pode ver os números de versão atribuídos na lista seletor do RuleSet .
Para cada RuleSet importa, tentativas da ferramenta de localizar o tipo associado bin \ debug no local do arquivo de .rules (se existir), com base nos membros usados no RuleSet. Se a ferramenta encontrar vários tipos de correspondência, ela tentará escolher um tipo com base em uma correspondência entre o nome do arquivo .rules e o nome do tipo (por exemplo, o Workflow1 tipo corresponde a Workflow1.rules). Se existirem várias correspondências, será solicitado que você selecione o tipo. Se esse mecanismo de identificação automática não localizar um assembly ou tipo correspondente, depois de importar, você poderá clicar em Procurar na caixa de diálogo da ferramenta principal para navegar até o tipo associado. A imagem a seguir mostra o Seletor RuleSet:
Quando você clica em Exportar Dados do menu de ferramentas principal, a caixa de diálogo Seletor ruleSet é exibida novamente, da qual você pode determinar os Conjuntos de Regras do banco de dados que devem ser exportados. Quando você clica em OK, uma caixa de diálogo Salvar Arquivo é exibida, na qual você pode especificar o nome e o local do arquivo .rules resultante. Como o arquivo .rules não contém informações de versão, você só pode selecionar uma versão ruleSet com um determinado nome RuleSet.
Atividade PolicyFromService
O código da PolicyFromService atividade é simples. Funciona bem como a atividade de Policy fornecida com o WF, mas em vez de recuperar o destino RuleSet do arquivo de .rules, chama um serviço de hospedagem para obter a instância de RuleSet. Em seguida, ele executa o RuleSet na instância de atividade do fluxo de trabalho raiz.
Para usar a atividade em um fluxo de trabalho, adicione uma referência aos assemblies PolicyActivities e RuleSetService no seu projeto de fluxo de trabalho. Consulte o procedimento no final deste tópico para obter uma discussão sobre como adicionar a atividade à caixa de ferramentas.
Depois de colocar a atividade em seu fluxo de trabalho, você deve fornecer o nome do RuleSet a ser executado. Você pode inserir o nome como um valor literal ou associar a uma variável de fluxo de trabalho ou propriedade de outra atividade. Opcionalmente, você pode inserir números de versão para o RuleSet específico que deve ser executado. Se você deixar o valor padrão de 0 para os números de versão principal e secundária, o número de versão mais recente no banco de dados será fornecido automaticamente para a atividade.
Serviço de RuleSet
O serviço é responsável por recuperar a versão do RuleSet especificada do banco de dados e devolvê-la à atividade de chamada. Como discutido anteriormente, se os valores de versão principal e secundária passados na GetRuleSet chamada forem ambos 0, o serviço recuperará a versão mais recente. Neste ponto, não há cache de definições ou instâncias de RuleSet; da mesma forma, não há recursos para marcar versões de RuleSet como "implementadas" para diferenciá-las de RuleSets que estão em progresso.
O banco de dados a ser acessado pelo serviço deve ser configurado no host usando um arquivo de configuração de aplicativo.
Para executar a ferramenta
A pasta que configura a tabela RuleSet usada pela ferramenta e pelo serviço contém um arquivo Setup.sql. Você pode executar o arquivo em lote Setup.cmd para criar o banco de dados Regras no SQL Express e configurar a tabela RuleSet.
Se você editar o arquivo em lote ou Setup.sql e especificar para não usar o SQL Express ou para colocar a tabela em um banco de dados com um nome diferente de
Rules, os arquivos de configuração do aplicativo na ferramenta RuleSet e nos projetosUsageSampledeverão ser editados com as mesmas informações.Depois de executar o script Setup.sql, você pode criar a
ExternalRuleSetToolkitsolução e, em seguida, iniciar a ferramenta RuleSet do projeto ExternalRuleSetTool.A solução sequencial do aplicativo de console do fluxo de trabalho
RuleSetToolkitUsageSampleinclui um fluxo de trabalho de exemplo. O fluxo de trabalho consiste em umaPolicyFromServiceatividade e duas variáveis,orderValueediscount, com relação às quais o RuleSet de destino é executado.Para usar o exemplo, crie a
RuleSetToolkitUsageSamplesolução. Em seguida, no menu principal da ferramenta RuleSet, clique em Importação de Dados e aponte para o arquivo DiscountRuleSet.rules na pasta RuleSetToolkitUsageSample. Clique na opção de menu Rule Store-Save para salvar o RuleSet importado no banco de dados.Porque o assembly de
PolicyActivitiesé referenciado de projeto de fluxo de trabalho de exemplo, a atividade dePolicyFromServiceaparece no fluxo de trabalho. No entanto, ele não aparece na caixa de ferramentas por padrão. Para adicioná-lo à caixa de ferramentas, faça o seguinte:Clique com o botão direito do mouse na caixa de ferramentas e selecione Escolher Itens (isso pode demorar um pouco).
Quando a caixa de diálogo Escolher Itens da Caixa de Ferramentas for exibida, clique na guia Atividades .
Navegue até o assembly
PolicyActivitiesna soluçãoExternalRuleSetToolkite clique em Abrir.Verifique se a
PolicyFromServiceatividade está selecionada na caixa de diálogo Escolher Itens da Caixa de Ferramentas e clique em OK.A atividade agora deve aparecer na caixa de ferramentas na categoria Componentes RuleSetToolkitUsageSample .
O serviço RuleSet já está configurado no host do aplicativo de console usando a instrução a seguir em Program.cs.
workflowRuntime.AddService(new RuleSetService());Você também pode configurar o serviço no host usando um arquivo de configuração; consulte a documentação do SDK para obter detalhes.
Um arquivo de configuração de aplicativo é adicionado ao projeto de fluxo de trabalho para especificar a cadeia de conexão para o banco de dados a ser usado pelo serviço. Essa deve ser a mesma cadeia de conexão usada pela ferramenta RuleSet, que aponta para o banco de dados que contém a tabela RuleSet.
Agora você pode executar o
RuleSetToolkitUsageSampleprojeto como faria com qualquer outro aplicativo de console de fluxo de trabalho. Pressione F5 ou Ctrl+F5 no Visual Studio ou execute o arquivo RuleSetToolkitUsageSample.exe diretamente.Observação
Você deve fechar a ferramenta de RuleSet para recompilar o exemplo de uso, porque a ferramenta carrega o assembly de exemplo de uso.