Processo de aluguer
O exemplo HiringProcess demonstra como implementar um processo enterprise usando as atividades de mensagem e os dois fluxos de trabalho hospedados como serviços de fluxo de trabalho. Esses fluxos de trabalho são parte da infraestrutura de TI de uma empresa fictícia chamada Contoso, Inc.
O processo de fluxo de trabalho de HiringRequest
(implementado como Flowchart) solicita a autorização de vários gerentes na organização. Para alcançar essa meta, o fluxo de trabalho usa outros serviços existentes na organização (no nosso caso, um serviço de caixa de entrada e um serviço de dados organizacionais implementados como serviços do Windows Communication Foundation [WCF] simples).
O fluxo de trabalho ResumeRequest
(implementado como Sequence) publica um anúncio de emprego externa no site de carreiras de Contoso e gerencia a aquisição de resumos. Um anúncio de emprego está disponível no site externo por um período de tempo fixo (até que um tempo limite expire) ou até que um funcionário de Contoso decida o remover.
Este exemplo demonstra os seguintes recursos do .NET Framework 4.6.1:
Flowchart e fluxos de trabalho Sequence para modelar processos comerciais.
Serviços de fluxo de trabalho.
Atividades de mensagem.
Correlação conteudo base.
Atividades personalizados (declarativo e o código baseado).
Sistema forneceu persistência de servidor SQL.
PersistenceParticipantpersonalizado.
Controle personalizado.
Rastreamento de evento para acompanhar do Windows (ETW).
Composição de atividades.
atividades deParallel .
atividade deCancellationScope .
Timers duráveis (atividade deDelay ).
Transações.
Mais de um fluxo de trabalho na mesma solução.
Descrição do processo
Contoso, Inc. deseja ter o controle próximo do headcount em cada um dos departamentos. Portanto, quando qualquer funcionário deseja iniciar um novo processo de aluguer, precisam fazer uma aprovação de aluguer do processo de solicitação antes que o recrutamento possa realmente acontecer. Esse processo é chamado solicitação de aluguer de processo (definida no projeto de HiringRequestService) e consiste as seguintes etapas:
Um funcionário (solicitador) começa a solicitação de aluguer do processo.
O gerenciador do solicitador deve aprovar a solicitação:
O gerenciador pode descartar a solicitação.
O gerenciador pode retornar a solicitação ao solicitador para informações adicionais:
- O solicitador revise e envia a solicitação de volta ao gerenciador.
O gerenciador pode aprovar.
Depois que o gerenciador do solicitador aprova, o proprietário do departamento deve aprovar a solicitação:
O proprietário do departamento pode descartar.
O proprietário do departamento pode aprovar.
Depois que o proprietário do departamento aprova, o processo requer a aprovação de gerentes de 2 horas ou de CEO:
O processo pode fazer a transição de estado aceito ou descartado.
Se o processo é aceito, uma nova instância do fluxo de trabalho
ResumeRequest
é iniciada (ResumeRequest
é associado a HiringRequest.csproj com uma referência de serviço.)
Uma vez que os gerentes aprovam o aluguer de um novo empregado, a hora deve encontrar o candidato apropriado. Esse processo é executado pelo segundo fluxo de trabalho (ResumeRequest
, definido em ResumeRequestService.csproj). Este fluxo de trabalho define o processo para enviar um anúncio de emprego com uma oportunidade de carreira a carreiras externos site de Contoso, recebe resumos dos candidatos, e monitora o estado do anúncio de emprego. As posições estão disponíveis por um período de tempo fixo (até que uma hora expirem) ou até que um funcionário de Contoso decida o remover. O fluxo de trabalho ResumeRequest
consiste as seguintes etapas:
Um funcionário de Contoso em informações sobre a posição e uma duração de tempo limite. Uma vez que o funcionário nessa informação, a posição é remetida no site de carreiras.
Uma vez que a informação é publicado, as partes interessadas podem enviar seus resumos. Quando um resumo é enviado, é armazenado em um registro associado à oportunidade de emprego.
Os candidatos podem enviar resumos até que o tempo limite expire ou alguém departamento de Contoso hora decidir remover explicitamente a postagem parando o processo.
Projetos no exemplo
A tabela a seguir mostra os projetos na solução de exemplo.
Projeto | Descrição |
---|---|
ContosoHR | Contém contratos de dados, objetos comerciais e classes de armazenamento. |
HiringRequestService | Contém a definição do fluxo de trabalho aluguer do processo de solicitação. Este projeto é implementado como um aplicativo de console que são host o fluxo de trabalho (arquivo de xaml) como um serviço. |
ResumeRequestService | Um serviço de fluxo de trabalho que coleta resumos dos candidatos até que um tempo limite expire ou alguém decidir que o processo tem que ser interrompido. Este projeto é implementado como um serviço declarativa de fluxo de trabalho (xamlx). |
OrgService | Um serviço que expõem informações de organização (funcionários, posições, PositionTypes, e departamentos). Você pode pensar esse serviço como o módulo de organização de um plano (ERP) de recurso de empresa. Este projeto é implementado como um aplicativo de console que expõe um serviço WCF (Windows Communication Foundation). |
InboxService | Um caixa de entrada que contém tarefas acionáveis para funcionários. Este projeto é implementado como um aplicativo de console que expõe um serviço windows. |
InternalClient | Um aplicativo da Web para interagir com o processo. Os usuários podem começar, participar, e exibir seus fluxos de trabalho HiringProcess. Usando este aplicativo, também podem iniciar e monitorar processos de ResumeRequest. Esse site é implementada para ser interna a intranet de Contoso. Este projeto é implementado como uma página web ASP.NET. |
CareersWebSite | Um site externo que expõe as posições abertas em Contoso. Qualquer candidato potencialmente pode navegar para esse site e enviar um resumo. |
Resumo de recursos
A tabela a seguir descreve como cada recurso é usado neste exemplo.
Recurso | Descrição | Project |
---|---|---|
Fluxograma | O processo empresarial é representado como um fluxograma. Esta descrição do fluxograma representa o processo da mesma maneira na qual um negócio o desenharia em um whiteboard. | HiringRequestService |
Serviços de fluxo de trabalho | O fluxograma com a definição de processo é hospedado em um serviço (nesse exemplo, o serviço está hospedado em um aplicativo de console). | HiringRequestService |
Atividades de mensagem | O fluxograma usa atividades de mensagem de duas maneiras: – Para obter informações do usuário (para receber decisões e informações relacionadas em cada etapa de aprovação). – Para interagir com outros serviços existentes (InboxService e OrgDataService, usados com referências de serviço). |
HiringRequestService |
Correlação baseada em conteúdo | As mensagens aprovação de correlacionam na propriedade ID de solicitação de aluguer: – Quando um processo é iniciado, o identificador de correlação é inicializada com a ID da solicitação. – As mensagens de entrada aprovação de correlacionam em sua ID (o primeiro parâmetro de cada mensagem de aprovação é a ID da solicitação). |
HiringRequestService/ResumeRequestService |
Atividades personalizados (declarativas e código com base) | Há várias atividades personalizados nesse exemplo: - SaveActionTracking : essa atividade emite um TrackingRecord (usando Track) personalizado. Esta atividade foi criada usando código obrigatório que estende NativeActivity.- GetEmployeesByPositionTypes : esta atividade recebe uma lista de IDs de tipo de posição e retorna uma lista de pessoas que têm essa posição em Contoso. Esta atividade foi criado declarativamente (usando o designer de atividade).- SaveHiringRequestInfo : esta atividade salva as informações de um HiringRequest (usando HiringRequestRepository.Save ) personalizado. Esta atividade foi criada usando código obrigatório que estende CodeActivity. |
HiringRequestService |
Sistema forneceu persistência do SQL Server | A instância de WorkflowServiceHost que hospeda a definição de processo do fluxograma é configurado para usar o sistema forneceu persistência do SQL Server. | HiringRequestService/ResumeRequestService |
Rastreamento personalizada | O exemplo inclui um participante personalizado de rastreamento que salva o histórico de HiringRequestProcess (esse registro que ação foi feita, por quem, e quando). O código-fonte está na pasta de rastreamento de HiringRequestService. |
HiringRequestService |
Rastreamento de ETW | Sistema forneceu o rastreamento de ETW é configurado no arquivo App.config no serviço de HiringRequestService. | HiringRequestService |
Composição de atividades | A definição de processo usa a composição livre de Activity. O fluxograma contém vários a sequência e as atividades paralelas que contêm ao mesmo tempo outras atividades (e assim por diante). | HiringRequestService |
Atividades paralelas | - ParallelForEach<T> é usado para registrar paralelamente na caixa de entrada de gerentes de CEO e a hora (aguardando a etapa de aprovação de dois gerentes de hora). - Parallel é usado para fazer algumas tarefas de limpeza nas etapas concluídas e descartadas |
HiringRequestService |
Cancelar modelo | O fluxograma usa CancellationScope para criar o comportamento de cancelamento (neste caso faz qualquer limpeza.) | HiringRequestService |
Participante de persistência do cliente | HiringRequestPersistenceParticipant salva dados de uma variável de fluxo de trabalho a uma tabela armazenada na base de dados de Contoso hora. |
HiringRequestService |
Serviços de fluxo de trabalho | ResumeRequestService é implementado usando serviços de fluxo de trabalho. A definição de fluxo de trabalho e as informações de serviço estão contidas no ResumeRequestService.xamlx. O serviço está configurado para usar a persistência e o rastreamento. |
ResumeRequestService |
Timers duráveis | ResumeRequestService usa timers duráveis para definir a duração de um anúncio de emprego (uma vez para o tempo limite expirar, o anúncio de emprego é fechado). |
ResumeRequestService |
Transactions | TransactionScope é usado para garantir a consistência de dados dentro da execução de várias atividades (quando um novo resumo é recebido). | ResumeRequestService |
Transactions | O participante personalizado de persistência (HiringRequestPersistenceParticipant ) e uso personalizado de participante de rastreamento (HistoryFileTrackingParticipant ) a mesma transação. |
HiringRequestService |
Usando o WF em aplicativos ASP.NET. | Fluxos de trabalho são acessados de dois aplicativos do ASP.NET. | InternalClient/CareersWebSite |
Armazenamento de dados
Os dados são armazenados em uma base de dados SQL Server (chamado ContosoHR
script para criar este base de dados está localizado na pasta de DbSetup
). As instâncias de fluxo de trabalho são armazenadas em uma base de dados SQL Server chamada InstanceStore
(os scripts para criar o armazenamento de instância são parte da distribuição do .NET Framework 4.6.1).
Ambos os bancos de dados são criados executando-se o script Setup.cmd a partir de um Prompt de Comando do Desenvolvedor para o Visual Studio.
Executando o exemplo
Para criar os bases de dados
Abra um Prompt de Comando do Desenvolvedor para o Visual Studio.
Navegue até a pasta de exemplo.
Executar Setup.cmd.
Verifique se os dois bases de dados
ContosoHR
eInstanceStore
foram criados em SQL express.
Para configurar a solução para a execução
Execute o Visual Studio como administrador. HiringRequest.sln aberto.
Clique com o botão direito do mouse na solução em Gerenciador de Soluções e selecione Propriedades.
Selecione a opção Vários projetos de inicialização e defina CareersWebSite, InternalClient, HiringRequestService, e ResumeRequestService como Iniciar. Deixe ContosoHR, InboxService e OrgService como None.
Crie a solução. CTRL+SHIFT+B pressionando. Verifique se a compilação foi bem-sucedida.
Para executar a solução
Após criar a solução, pressione CTRL+F5 para executar sem depuração. Verifique se todos os serviços comecem.
Clique com o botão direito do mouse em InternalClient na solução e selecione Exibir no navegador. A página padrão para
InternalClient
é exibida. Certifique-se de que os serviços estão sendo executado, clique o link.O módulo de HiringRequest é exibido. Você pode seguir o cenário detalhado aqui.
Uma vez que
HiringRequest
estiver concluída, você pode começarResumeRequest
. Você pode seguir o cenário detalhado aqui.Quando
ResumeRequest
é enviado, está disponível no site pública (site de carreiras de Contoso.) Para ver o anúncio de emprego (e para aplicar para a posição), navegue para o site de carreiras.Clique com o botão direito do mouse em CareersWebSite na solução e selecione Exibir no navegador.
Navegue de volta a
InternalClient
clicando com o botão direito do mouse em InternalClient na solução e selecionando Exibir no navegador.Vá para a seção de JobPostings clicando no link de Anúncios de emprego no menu da parte superior da caixa de entrada. Você pode seguir o cenário detalhado aqui.
Cenários
Solicitação de aluguer
Michael Alexander (Software Engineer) deseja solicitar uma nova posição para contratar uma Software Engineer no teste (SDET) no departamento de engenharia que tenha pelo menos 3 anos de experiência em C#.
Após a criação, a solicitação aparecerá na caixa de entrada de Michael (clique em Atualizar se você não vir a solicitação) esperando a aprovação de Peter Brehm, que é o gerente de Michael.
Peter deseja atuar na solicitação de Michael. Pense as demandas da posição 5 anos de experiência C# em vez de 3, o que envia comentários volta para revisão.
Michael vê uma mensagem na caixa de entrada de seu gerente e quer agir. Michael vê o histórico do pedido de posição e concorda com Peter. Michael altera a descrição para exigir 5 anos de experiência de C# e aceitar a alteração.
Peter age na solicitação modificada de Michael e a aceita. A solicitação agora deve ser aprovada pelo diretor de engenharia, Tsvi Reiter.
Tsvi Reiter deseja expedir a solicitação, o que colocados em um comentário para dizer que a solicitação é urgente e aceitar-la.
A solicitação agora tem que ser aprovada por dois gerentes de hora ou por CEO. O CEO, Brian Richard Goldstein, consulta a solicitação urgente por Tsvi. Atua na solicitação aceitando a assim, ignorando a aprovação por dois gerentes de hora.
A solicitação é removida da caixa de entrada de Michael e o processo de contratação de um SDET começa.
Solicitação de resumo de Início
Agora, a posição de trabalho está aguardando para ser postada em um site externo onde as pessoas podem se candidatar (veja isso clicando no link Anúncios de emprego). Atualmente, a posição de trabalho é sentando-se com um representante de hora que é responsável para finalizar a posição de trabalho e a postagem.
O RH deseja editar esse trabalho (ao clicar no link Editar) definindo um tempo limite de 60 minutos (na vida real, isso pode ser dias ou semanas). O tempo limite permite que a posição de trabalho é decolada o site externo de acordo com os momentos especificados.
Depois de salvar a posição de trabalho editada, ela aparecerá na guia Recebendo currículos (atualize a página da Web para ver a nova posição).
Coletando resumos
A posição de trabalho deve aparecer no site externo. Como uma pessoa interessada em aplicar para o trabalho, você pode usar para essa posição e enviar seu resumo.
Se você voltar ao serviço Lista de Postagens de Trabalho, poderá "ver os currículos" que foram coletados até o momento.
A hora também pode parar de coletar resumos (por exemplo, uma vez que o candidato à direita foi identificado).
Solução de problemas
Confirme se você está executando o Visual Studio com privilégios de administrador.
Se a solução não compilar, verifique o seguinte:
- A referência a
ContosoHR
não está faltando nos projetos deInternalClient
ou deCareersWebSite
.
- A referência a
Se a solução não executa, verifique o seguinte:
Todos os serviços estão executando.
Referências de serviço são atualizadas.
Abra a pasta App_WebReferences
Clique com o botão direito do mouse em Contoso e selecione Update Web/Service References.
Recriar a solução pressionando CTRL+SHIFT+B no Visual Studio.
Desinstalação
Exclua o armazenamento da instância do SQL Server em execução Cleanup.bat, localizado na pasta de DbSetup.
Exclua o formulário de origem seu disco rígido.