Compartir por


Proceso de contratación

En el ejemplo HiringProcess se muestra cómo implementar un proceso empresarial mediante actividades de mensajería y dos flujos de trabajo hospedados como servicios de flujo de trabajo. Estos flujos de trabajo forman parte de la infraestructura de TI de una empresa ficticia denominada Contoso, Inc.

El HiringRequest proceso de flujo de trabajo (implementado como un Flowchart) solicita autorización de varios gerentes de la organización. Para lograr este objetivo, el flujo de trabajo utiliza otros servicios existentes en la organización (en nuestro caso, un servicio de bandeja de entrada y un servicio de datos organizativos implementados como servicios estándar de Windows Communication Foundation (WCF)).

El ResumeRequest flujo de trabajo (implementado como Sequence) publica una oferta de empleo en el sitio web externo de carreras de Contoso y gestiona la adquisición de currículos. Una publicación de trabajo está disponible en el sitio web externo durante un período de tiempo fijo (hasta que expire un tiempo de espera) o hasta que un empleado de Contoso decida quitarlo.

En este ejemplo se muestran las siguientes características de .NET Framework 4.6.1:

  • Flowchart y Sequence flujos de trabajo para modelar procesos empresariales.

  • Servicios de flujo de trabajo.

  • Actividades de mensajería.

  • Correlación basada en contenido.

  • Actividades personalizadas (declarativas y basadas en código).

  • Persistencia de SQL Server proporcionada por el sistema.

  • PersistenceParticipant personalizado.

  • Seguimiento personalizado.

  • Seguimiento de eventos para Windows (ETW).

  • Composición de actividades.

  • Actividades Parallel.

  • Actividad CancellationScope.

  • Temporizadores duraderos (actividadDelay).

  • Transacciones.

  • Más de un flujo de trabajo en la misma solución.

Descripción del proceso

Contoso, Inc. quiere tener un control estricto del número de empleados en cada uno de sus departamentos. Por lo tanto, siempre que cualquier empleado quiera iniciar un nuevo proceso de contratación, debe pasar por una aprobación del proceso de solicitud de contratación antes de que el reclutamiento pueda ocurrir realmente. Este proceso se denomina solicitud de proceso de contratación (definida en el proyecto HiringRequestService) y consta de los pasos siguientes:

  1. Un empleado (el solicitante) inicia la solicitud del proceso de contratación.

  2. El administrador del solicitante debe aprobar la solicitud:

    1. El administrador puede rechazar la solicitud.

    2. El administrador puede devolver la solicitud al solicitante para obtener información adicional:

      1. El solicitante revisa y envía la solicitud de vuelta al administrador.
    3. El administrador puede aprobar.

  3. Una vez aprobado el administrador del solicitante, el propietario del departamento debe aprobar la solicitud:

    1. El propietario del departamento puede rechazarla.

    2. El propietario del departamento puede aprobar.

  4. Una vez aprobado el propietario del departamento, el proceso requiere la aprobación de 2 administradores de RR. HH. o el CEO:

    1. El proceso puede transicionar al estado aceptado o rechazado.

    2. Si se acepta el proceso, se inicia una nueva instancia del ResumeRequest flujo de trabajo (ResumeRequest está vinculada a HiringRequest.csproj a través de una referencia de servicio).

Una vez que los gerentes aprueben la contratación de un nuevo empleado, los recursos humanos deben encontrar el candidato adecuado. Este proceso lo realiza el segundo flujo de trabajo (ResumeRequest, definido en ResumeRequestService.csproj). Este flujo de trabajo define el proceso para enviar una oferta de empleo con una oportunidad laboral al sitio web de empleo externo de Contoso, que recibe currículums de solicitantes y supervisa el estado de la oferta de empleo. Los puestos de trabajo están disponibles para un período de tiempo fijo (hasta que expire un período de tiempo) o hasta que un empleado de Contoso decida quitarlas. El ResumeRequest flujo de trabajo consta de los pasos siguientes:

  1. Un empleado de Contoso escribe la información sobre la vacante y una duración de tiempo de espera. Una vez que los empleados escriben esta información, la posición se publica en el sitio web de carreras.

  2. Una vez publicada la información, las partes interesadas pueden enviar sus currículum. Cuando se envía un currículum, se almacena en un registro vinculado a la apertura del trabajo.

  3. Los solicitantes pueden enviar sus currículums hasta que expire el tiempo de espera, o alguien del departamento de Recursos Humanos de Contoso decida explícitamente quitar la publicación deteniendo el proceso.

Proyectos en la muestra

En la tabla siguiente se muestran los proyectos de la solución de ejemplo.

Proyecto Descripción
ContosoHR Contiene contratos de datos, objetos empresariales y clases de repositorio.
HiringRequestService Contiene la definición del flujo de trabajo del proceso de solicitud de contratación.

Este proyecto se implementa como una aplicación de consola que hospeda automáticamente el flujo de trabajo (archivo xaml) como servicio.
ServicioDeSolicitudDeReanudación Un servicio de gestión de procesos que recopila currículums de candidatos hasta que expire un tiempo de espera o alguien decida que el proceso debe detenerse.

Este proyecto se implementa como un servicio de flujo de trabajo declarativo (xamlx).
OrgService Un servicio que expone información organizativa (Empleados, Posiciones, PositionTypes y Departamentos). Puede considerar este servicio como el módulo organización de la empresa de un plan de recursos empresariales (ERP).

Este proyecto se implementa como una aplicación de consola que expone un servicio de Windows Communication Foundation (WCF).
Servicio de Inbox Bandeja de entrada que contiene tareas accionables para los empleados.

Este proyecto se implementa como una aplicación de consola que expone un servicio WCF.
InternalClient Una aplicación web para interactuar con el proceso. Los usuarios pueden iniciar, participar y ver sus flujos de trabajo de HiringProcess. Con esta aplicación, también pueden iniciar y supervisar los procesos resumeRequest.

Este sitio se implementa para que sea interno en la intranet de Contoso. Este proyecto se implementa como un sitio web de ASP.NET.
CareersWebSite Un sitio web externo que expone las posiciones abiertas en Contoso. Cualquier posible candidato puede navegar a este sitio y enviar un currículum.

Resumen de características

En la tabla siguiente se describe cómo se usa cada característica en este ejemplo.

Característica Descripción Proyecto
Diagrama de flujo El proceso de negocio se representa como un diagrama de flujo . Esta descripción del diagrama de flujo representa el proceso de la misma manera en que una empresa lo habría dibujado en una pizarra. HiringRequestService
Servicios de flujo de trabajo El diagrama de flujo con la definición de proceso se hospeda en un servicio (en este ejemplo, el servicio se hospeda en una aplicación de consola). HiringRequestService
Actividades de mensajería El diagrama de flujo usa actividades de mensajería de dos maneras:

- Para obtener información del usuario (para recibir las decisiones y la información relacionada en cada paso de aprobación).
- Para interactuar con otros servicios existentes (InboxService y OrgDataService, que se usan a través de las referencias de servicio).
HiringRequestService
Correlación basada en contenido Los mensajes de aprobación se correlacionan por la propiedad ID de la solicitud de contratación:

- Cuando se inicia un proceso, el identificador de correlación se inicializa con el identificador de la solicitud.
- Los mensajes de aprobación entrantes se correlacionan con su identificador (el primer parámetro de cada mensaje de aprobación es el identificador de la solicitud).
HiringRequestService/ResumeRequestService
Actividades personalizadas (declarativas y basadas en código) Hay varias actividades personalizadas en este ejemplo:

- SaveActionTracking: esta actividad emite un TrackingRecord personalizado (usando Track). Esta actividad se ha creado mediante código imperativo que extiende NativeActivity.
- GetEmployeesByPositionTypes: esta actividad recibe una lista de identificadores de tipo de posición y devuelve una lista de personas que tienen esa posición en Contoso. Esta actividad se ha creado declarativamente (mediante el diseñador de actividades).
- SaveHiringRequestInfo: Esta actividad guarda la información de un HiringRequest (mediante HiringRequestRepository.Save). Esta actividad se ha creado mediante código imperativo que extiende CodeActivity.
HiringRequestService
Persistencia de SQL Server proporcionada por el sistema La instancia de WorkflowServiceHost que hospeda la definición de proceso de Diagrama de flujo se configura para utilizar la persistencia de SQL Server proporcionada por el sistema. HiringRequestService/ResumeRequestService
Seguimiento personalizado El ejemplo incluye un participante de seguimiento personalizado que guarda el historial de un HiringRequestProcess objeto (registra qué acción se ha hecho, por quién y cuándo). El código fuente está en la carpeta Tracking de HiringRequestService. HiringRequestService
Seguimiento ETW El seguimiento ETW proporcionado por el sistema se configura en el archivo App.config en el servicio HiringRequestService. HiringRequestService
Composición de actividades La definición del proceso usa la composición libre de Activity. El diagrama de flujo contiene varias actividades secuencia y paralelas que al mismo tiempo contienen otras actividades (etc.). HiringRequestService
Actividades paralelas - ParallelForEach<T> se utiliza para registrarse en la Bandeja de entrada del CEO y los responsables de Recursos Humanos en paralelo (a la espera del paso de aprobación de los dos responsables de Recursos Humanos).
- Parallel se utiliza para realizar algunas tareas de limpieza en los pasos Completed y Rejected.
HiringRequestService
Cancelación del modelo El Diagrama de flujo utiliza CancellationScope para crear el comportamiento de cancelación (en este caso, se lleva a cabo alguna limpieza). HiringRequestService
Participante de persistencia del cliente HiringRequestPersistenceParticipant guarda los datos de una variable de flujo de trabajo en una tabla almacenada en la base de datos contoso HR. HiringRequestService
Servicios de flujo de trabajo ResumeRequestService se implementa mediante servicios de flujo de trabajo. La definición del flujo de trabajo y la información del servicio se incluyen en ResumeRequestService.xamlx. El servicio está configurado para usar la persistencia y el seguimiento. ServicioDeSolicitudDeReanudación
Temporizadores duraderos ResumeRequestService usa temporizadores duraderos para definir la duración de un registro de trabajos (una vez que expira un tiempo de espera, se cierra el registro de trabajos). ServicioDeSolicitudDeReanudación
Transacciones TransactionScope se usa para garantizar la coherencia de los datos dentro de la ejecución de varias actividades (cuando se recibe un nuevo currículum). ServicioDeSolicitudDeReanudación
Transacciones El participante de persistencia personalizada (HiringRequestPersistenceParticipant) y el participante de seguimiento personalizado (HistoryFileTrackingParticipant) usan la misma transacción. HiringRequestService
Uso de WF en aplicaciones de ASP.NET. Se accede a los flujos de trabajo desde dos aplicaciones ASP.NET. InternalClient/CareersWebSite

Almacenamiento de datos

Los datos se almacenan en una base de datos de SQL Server denominada ContosoHR (el script para crear esta base de datos se encuentra en la DbSetup carpeta ). Las instancias de flujo de trabajo se almacenan en una base de datos de SQL Server denominada InstanceStore (los scripts para crear el almacén de instancias forman parte de la distribución de .NET Framework 4.6.1).

Ambas bases de datos se crean mediante la ejecución del script Setup.cmd desde un símbolo del sistema para desarrolladores de Visual Studio.

Ejecución del ejemplo

Para crear las bases de datos

  1. Abra el Símbolo del sistema para desarrolladores de Visual Studio.

  2. Navegue hasta la carpeta de ejemplos.

  3. Ejecute Setup.cmd.

  4. Compruebe que las dos bases de datos ContosoHR y InstanceStore se crearon en SQL Express.

Para configurar la solución para su ejecución

  1. Ejecute Visual Studio como administrador. Abra el archivo HiringRequest.sln.

  2. Haga clic con el botón derecho en la solución en el Explorador de soluciones y seleccione Propiedades.

  3. Seleccione la opción Varios proyectos de inicio y establezca CareersWebSite, InternalClient, HiringRequestService y ResumeRequestService en Start. Deje ContosoHR, InboxService y OrgService como Ninguno.

  4. Compile la solución presionando CTRL+MAYÚS+B. Compruebe que la compilación se ha realizado correctamente.

Para ejecutar la solución

  1. Cuando se compile la solución, presione CTRL+F5 para ejecutarla sin depuración. Compruebe que todos los servicios se han iniciado.

  2. Haga clic con el botón derecho en InternalClient en la solución y seleccione Ver en el explorador. Se muestra la página predeterminada de InternalClient . Asegúrese de que los servicios se están ejecutando y haga clic en el vínculo.

  3. Se muestra el módulo HiringRequest . Puede seguir el escenario que se detalla aquí.

  4. Cuando HiringRequest se haya completado, puede iniciar ResumeRequest. Puede seguir el escenario que se detalla aquí.

  5. Cuando se expone ResumeRequest, está disponible en el sitio web público (sitio web de ofertas de trabajo de Contoso). Para ver la publicación de trabajos (y solicitar la posición), vaya al sitio web de carreras.

  6. Haga clic con el botón derecho en CareersWebSite en la solución y seleccione Ver en el explorador.

  7. Regrese navegando al InternalClient haciendo clic con el botón derecho en InternalClient en la solución y seleccionando Visualizar en el navegador.

  8. Vaya a la sección JobPostings haciendo clic en el vínculo Publicar trabajos en el menú superior de la bandeja de entrada. Puede seguir el escenario que se detalla aquí.

Escenarios

Solicitud de contratación

  1. Michael Alexander (Ingeniero de Software) quiere solicitar una nueva posición para contratar a un ingeniero de software en prueba (SDET) en el departamento de ingeniería que tiene al menos 3 años de experiencia en C#.

  2. Después de crearse, la solicitud aparece en la bandeja de entrada de Michael (haga clic en Actualizar si no ve la solicitud) esperando la aprobación de Peter Brehm, quien es el administrador de Michael.

  3. Peter quiere actuar sobre la solicitud de Michael. Cree que la posición exige 5 años de experiencia en C# en lugar de 3, por lo que envía sus comentarios para su revisión.

  4. Michael ve un mensaje en su bandeja de entrada de su gerente y quiere actuar. Michael ve la historia de la solicitud de posición y está de acuerdo con Peter. Michael modifica la descripción para requerir 5 años de experiencia de C# y acepta la modificación.

  5. Peter actúa en la solicitud modificada de Michael y lo acepta. La solicitud ahora debe ser aprobada por el Director de Ingeniería, Tsvi Reitera.

  6. Tsvi Reiter quiere acelerar la solicitud, por lo que añade un comentario para decir que la solicitud es urgente y la acepta.

  7. La solicitud ahora debe ser aprobada por dos gerentes de RR. HH. o el CEO. El CEO, Brian Richard Goldstein, ve la solicitud urgente de Tsvi. Actúa sobre la solicitud al aceptarla, eludiendo así la aprobación por parte de dos gerentes de RR. HH.

  8. La solicitud se quita de la bandeja de entrada de Michael y el proceso de contratación de un SDET ha comenzado.

Iniciar solicitud de reanudación

  1. Ahora, el puesto de trabajo está esperando ser publicado en un sitio web externo donde las personas pueden presentar solicitudes (puede verlo haciendo clic en el vínculo Ofertas de Trabajo). Actualmente, el puesto de trabajo está bajo revisión por un representante de RR. HH., quien es responsable de finalizar el puesto y publicarlo.

  2. HR quiere editar esta posición de trabajo (haciendo clic en el vínculo Editar ) estableciendo un tiempo de espera de 60 minutos (en la vida real, esto podría ser días o semanas). El tiempo de espera permite retirar el puesto de trabajo del sitio web externo según el tiempo especificado.

  3. Una vez guardada la oferta de trabajo editada, aparece en la pestaña Recepción de currículums (actualizar la página web para ver la nueva oferta de trabajo).

Recopilación de currículums vitae

  1. La posición del trabajo debe aparecer en el sitio web externo. Como persona interesada en solicitar el trabajo, puede solicitar esta posición y enviar su currículum.

  2. Si regresa al servicio Lista de anuncios de vacantes, puede "ver los currículums" recopilados hasta ahora.

  3. Los recursos humanos también pueden detener la recopilación de currículum vitae (por ejemplo, una vez identificado el candidato adecuado).

Solución de problemas

  1. Asegúrese de que ejecuta Visual Studio con privilegios de administrador.

  2. Si la solución no se compila, compruebe lo siguiente:

    • La referencia a ContosoHR no falta en los proyectos InternalClient ni en los CareersWebSite.
  3. Si la solución no se ejecuta, compruebe lo siguiente:

    1. Todos los servicios están funcionando.

    2. Las referencias de servicio se actualizan.

      1. Abra la carpeta App_WebReferences

      2. Haga clic con el botón derecho en Contoso y seleccione Actualizar referencias web o de servicio.

      3. Vuelva a generar la solución presionando CTRL+MAYÚS+B en Visual Studio.

Desinstalación

  1. Elimine el almacén de instancias de SQL Server ejecutando Cleanup.bat, ubicado en la carpeta DbSetup.

  2. Elimine el código fuente del disco duro.