<< Clic para mostrar Tabla de Contenidos >> 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 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.
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.
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>
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:
https://[project_environment]-[your_project]-[your_company].bizagi.com/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.
El código del botón al hacer clic sería:
private void button1_Clic(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 https://[project_environment]-[your_project]-[your_company].bizagi.com, 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:
Last Updated 2/8/2022 2:36:08 PM