Cómo iniciar Procesos en Bizagi desde otras aplicaciones

<< Click to Display Table of Contents >>

Navigation:  Bizagi Studio > ¿Cómo hacer? .... > Temas de integración >

Cómo iniciar Procesos en Bizagi desde otras aplicaciones

Introducción

Un requerimiento común en los proyectos Bizagi, es la posibilidad de iniciar procesos de Bizagi desde un portal o sistema externo, por ejemplo desde SharePoint, un correo electrónico, o desde un aplicación desarrollada de manera personalizada.

 

En Bizagi, esta opción se presenta desde la Capa SOA de Bizagi y sus servicios web, para crear de manera automática uno o más casos de cualquier proceso de Bizagi.

 

Vea mayor información de esta funcionalidad Invocar servicios Bizagi desde aplicaciones externas.

 

Lo que se debe hacer

Para iniciar uno o más procesos en Bizagi desde otras aplicaciones todo lo que debe hacer es invocar el método web createCasesAsString del servicio web "WorkflowEngineSOA", publicado en todos los proyectos de Bizagi.

 

Este método Web pertenece a los servicios Web WorkflowEngineSOA , que se publican de forma predeterminada en http://[su_servidor]/[su_proyecto]/WebServices/WorkflowEngineSOA.asmx?wsdl.

Para obtener información completa acerca de la dirección URL de acceso a estos servicios web, consulte la URL Capa SOA y consideraciones.

 

Al invocar los métodos Web createCasesAsString, o createCases disponibles para Bizagi .NET, se enviará información estructurada  XML de entrada que contiene principalmente: el usuario que crea del caso o los casos, el proceso o procesos para iniciar y cualquier otra información considerada relevante de negocio (datos, adjuntos, etc).

 

Para ver más detalles sobre la estructura de entrada y salida de createCasesAsString  consulte createCasesAsString.

 

Ejemplo

El siguiente ejemplo se lleva a cabo usando el proceso de Solicitud de Vacaciones de Mi Primer Proceso.

Para este proceso, vamos a crear casos desde una aplicación externa.

 

 

HowToCreateACaseUsingSOA_Image001

 

Para poder hacer esto, es importante estar familiarizado con el modelo de datos.

Queremos enviar la información mostrada en la primera actividad del proceso que corresponde a: Las fechas de inicio y fin de vacaciones y el número de días solicitados.

Esta información corresponde a los siguientes atributos de nuestro proceso llamado VacationRequest.

 

PerformActivity_03DataModel

 

 

Para incluir información tanto del proceso como información de negocio en las instancias de proceso (casos creados), es importante utilizar el nombre exacto de los elementos como se espera en Bizagi en la estructura XML.

 

Por ejemplo, el valor del tag <Process> debe ser el nombre del proceso, no su nombre visual.

De igual modo el primer tag bajo <Entities> será el nombre del atributo de la Aplicación (en este caso App) que referencia a la entidad del proceso. Se debe usar siempre el nombre correspondiente del atributo, entidad, o colección y no el nombre visual, y tener en cuenta que los tags de la estructura XML son sensibles a mayúsculas (y minúsculas).

 

Para revisar cómo se espera la información de negocio en el modelo de datos Bizagi, refiérase a Esquemas del modelo de datos de Bizagi XML.

 

 

Definir el XML de entrada

Para crear un nuevo caso para este proceso, el XML que necesita ser enviado a createCases es como el siguiente:

 

<BizAgiWSParam>

  <domain>domain</domain>

  <userName>admon</userName>

  <Cases>

     <Case>

        <Process>VacationRequest</Process>

        <Entities>

              <VacationRequest>

                 <VacationStartingDate>2012-03-18T12:00:00-05:00</VacationStartingDate>

                 <VacationEndingDate>2012-03-26T12:00:00-05:00</VacationEndingDate>

                 <NumberOfOfficeDaysReques>6</NumberOfOfficeDaysReques>

              </VacationRequest>

        </Entities>

     </Case>

  </Cases>

</BizAgiWSParam>

 

El XML anterior crea un caso para el proceso VacationRequest, y el creador sería el usuario domain\admon.

 

Para crear más de un caso en una misma invocación, incluya un tag <Case> para cada caso necesario dentro del tag "Cases".

El creador puede también ser cambiado pero tenga en cuenta que:

1. Debe ser un usuario que exista para el proyecto de Bizagi creado en el Portal de Trabajo

2. Debe tener permisos para iniciar un nuevo caso del proceso deseado.

 

 

Por ejemplo crearemos múltiples casos con el siguiente XML:

 

<BizAgiWSParam>

  <domain>domain</domain>

  <userName>admon</userName>

  <Cases>

     <Case>

        <Process>VacationRequest</Process>

        <Entities>

              <VacationRequest>

                 <VacationStartingDate>2012-03-18T12:00:00-05:00</VacationStartingDate>

                 <VacationEndingDate>2012-03-26T12:00:00-05:00</VacationEndingDate>

                 <NumberOfOfficeDaysReques>6</NumberOfOfficeDaysReques>

              </VacationRequest>

        </Entities>

     </Case>

     <Case>

        <Process>VacationRequest</Process>

        <Entities>

              <VacationRequest>

                 <VacationStartingDate>2012-07-19T12:00:00-05:00</VacationStartingDate>

                 <VacationEndingDate>2012-07-23T12:00:00-05:00</VacationEndingDate>

                 <NumberOfOfficeDaysReques>4</NumberOfOfficeDaysReques>

              </VacationRequest>

        </Entities>

     </Case>

     <Case>

        <Process>VacationRequest</Process>

        <Entities>

              <VacationRequest>

                 <VacationStartingDate>2011-12-16T12:00:00-05:00</VacationStartingDate>

                 <VacationEndingDate>2012-01-07T12:00:00-05:00</VacationEndingDate>

                 <NumberOfOfficeDaysReques>17</NumberOfOfficeDaysReques>

              </VacationRequest>

        </Entities>

     </Case>

  </Cases>

</BizAgiWSParam>

 

 

note_pin

Nótese que para crear casos sin incluir información de negocio, no haría falta incluir el tag <Entities>. Puede crear casos sin datos algunos.

 

 

La aplicación externa

Usando en este ejemplo una Aplicación de Windows como la aplicación externa que dispara el caso nuevo (como se muestra en la siguiente imágen), se ingresa la información necesaria y seguidamente mediante un botón se invoca la creación de un nuevo caso por medio del método web de la Capa SOA.

 

Dado que este ejemplo se trabaja con la Edición Enterprise .NET, podemos invocar el método createCasesAsString  o createCases.

 

Para este ejemplo trabajado en una aplicación .NET en Visual Studio, que se ha definido previamente una referencia Web que señala a nuestra dirección web createCases:

http://myServer/MyFirstProcess/webservices/WorkflowEngineSOA.asmx?wsdl

 

Una vez que se pulsa el botón, el caso se crea utilizando la Capa SOA de Bizagi. Dentro de la información de respuesta (output), recibimos el número de caso, junto con otra información adicional.

 

HowToCreateACaseUsingSOA_Image005

 

 

El código del botón al hacer clic sería:  

private void button1_Click(object sender, EventArgs e)

{

   //Dates are converted to string using this command to avoid problems with different dates formats

   string sStartingDate = XmlConvert.ToString(dateTimePicker1.Value, XmlDateTimeSerializationMode.Unspecified);

   string sSEndingDate = XmlConvert.ToString(dateTimePicker2.Value, XmlDateTimeSerializationMode.Unspecified);

 

   //We build the input XML

   string sXml = "<BizAgiWSParam>";

   sXml += "<domain>domain</domain>";

   sXml += "<userName>admon</userName>";

   sXml += "<Cases>";

   sXml += "<Case>";

   sXml += "<Process>VacationRequest</Process>";

   sXml += "<Entities>";

   sXml += "<VacationRequest>";

   sXml += "<VacationStartingDate>" + sStartingDate + "</VacationStartingDate>";

   sXml += "<VacationEndingDate>" + sSEndingDate + "</VacationEndingDate>";

   sXml += "<NumberOfOfficeDaysReques>" + textBox1.Text + "</NumberOfOfficeDaysReques>";

   sXml += "</VacationRequest>";

   sXml += "</Entities>";

   sXml += "</Case>";

   sXml += "</Cases>";

   sXml += "</BizAgiWSParam>";

 

   XmlDocument xDoc = new XmlDocument();

   xDoc.LoadXml(sXml);

 

   //We use the set web reference and invoke the createCases method

   MyFirstProcessWE.WorkflowEngineSOA ws = new MyFirstProcessWE.WorkflowEngineSOA();

   XmlNode xn = ws.createCases(xDoc);

 

   //If the response information is succesful, we retrieve the new case's Id.

   if (xn.SelectSingleNode("process/processId").InnerText != "0")

   {

       textBox2.Text = xn.SelectSingleNode("process/processRadNumber").InnerText;

   }

}

 

 

 

Verificación en el Portal

En nuestro Portal de Trabajo http://myServer/MyFirstProcess/, verificamos que el número de caso 502 se ha creado satisfactoriamente.

Este caso será mostrado en las actividades pendientes con la información inicial enviada.

Note que la actividad justo cuando empieza el proceso se llama Register Vacation Request:

 

Execution_WorkPortal