Actualizar informacion basada en XML en casos (con scope)

<< Clic para mostrar Tabla de Contenidos >>

Navegación:  Bizagi Studio > Asistente de Procesos > Reglas de Negocio > Ejemplos de reglas de negocio > XML Helper para interfaces >

Actualizar informacion basada en XML en casos (con scope)

Introducción

XML Helper hace parte del API de reglas de negocio de Bizagi, provee acceso a la información de sus procesos cuando trabaja con información estructurada XML, como se describe en XML Helper.

Esta sección muestra un ejemplo de cómo usar uno de los métodos de XML Helper, el método saveCasesAsString, que está orientado a insertar o actualizar información en cualquier caso, dependiendo de lo que esté almacenado en su scope.

 

Ejemplo

En el siguiente proceso de ejemplo, asumimos que tenemos una entidad proceso llamado SimplePurchaseRequest.

Este proceso tiene el siguiente modelo de datos:

 

xmlhelper_02datamodel

 

 

Para lograrlo, debemos revisar primero la definición del XML de la entidad, a través de las definiciones de esquema creadas en Bizagi Studio.

Tenga en cuenta que necesitará asegurarse de usar un esquema para la entidad de proceso del cual se tiene la instancia a partir del ID del caso.

 

xmlhelper_03schema

 

El esquema generado incluye los atributos que se piensan actualizar o insertar:

 

xmlhelper_ex2_simpleprocess_schema

 

Para más información sobre predefinir esquemas, refiérase a Esquemas XML del modelo de datos.

 

note_pin

Usted puede utilizar la definición del esquema XSD para generar un XML con la información y asegurándose de que sea compatible utilizando servicios gratuitos en línea tal como http://xsd2xml.com/.

Sin embargo, hay que considerar que esto es sólo una parte de lo que se debe enviar dentro de la cadena de texto con la estructura XML.

 

xmlhelper_ex4_output

 

Envuelva la porción del contenido XML de Vendor dentro del nodo <BizAgiWSParam> conteniendo al sub-elemento <Entities>:

<?xml version="1.0" encoding="utf-8"?><BizAgiWSParam><Entities>...</Entities></BizAgiWSParam>

 

Esto nos ayudará a segurar que se esté enviando una entrada compatible con la usada por el método SOAP web saveEntityAsString (Cuando se utiliza la API de web services de Bizagi).

Para mayor información sobre esta estructura y opciones de filtrado, refiérase a Guardar Entidades.

 

note_pin

Tenga en cuenta que si se esta asignando información al caso, con registros existentes, puede utilizar las definiciones de las llaves de negocio de las entidades involucradas para evitar crear nuevos registros durante la invocación.

Para más información sobre cómo reutilizar la definición de llaves de negocio existentes, consulte Usando llaves de negocio en archivos XML.

 

En este ejemplo los registros de Vendor se identifican de manera única por el atributo Code:

 

xmlhelper_ex4_bizkeys

 

Para que estos registros sean insertados y actualizados de la manera que se muestra en esta sección, recomendamos que se desmarque la casilla que obliga el uso de llaves de negocio como cláusula en XMLs en Bizagi Studio

 

xmlhelper_bizkeyEnforce

 

Si esta casilla está desmarcada recomendamos que el parámetro de entrada businessKey sea falso.

 

Ahora, para poder guardar la información compatible XML en el caso dado, puede utilizar el método CEntityXmlHelper.saveEntityAsString.

Esto se puede hacer dentro de una expresión en una regla de negocio Bizagi:

 

xmlhelper_ex4_rule

 

El código de la expresión en la imagen anterior es el siguiente:

var processentity_input = '<?xml version="1.0" encoding="utf-8"?><BizAgiWSParam><Entities>' +

'<SimplePurchaseRequest><WalletID>cc95807e-b896-4d0d-9299-73d111f8cee7</WalletID>' +

'<Requestedproduct><Code>TS</Code></Requestedproduct><Approved>0</Approved>' +

'<Vendors><Vendors><Applicable>0</Applicable><Vendor><Code>V001</Code><Name>IBM</Name></Vendor>' +

'</Vendors><Vendors><Applicable>0</Applicable><Vendor><Code>V003</Code><Name>Apple</Name></Vendor>' +

'</Vendors><Vendors><Applicable>1</Applicable><Vendor><Code>V004</Code><Name>Microsoft</Name></Vendor>' +

'</Vendors><Vendors><Applicable>1</Applicable><Vendor><Code>V002</Code><Name>Dell</Name></Vendor>' +

'</Vendors></Vendors></SimplePurchaseRequest></Entities></BizAgiWSParam>';

 

var processentity_result =  CEntityXmlHelper.saveCaseAsString(Me.Case.Id, processentity_input, false);

CHelper.trace("my_trace",processentity_result);

 

Note que como estos registros en la entidad Vendor ya existen (tienen información en el atributo Code: V001, V002, V003 y V004, como valores en sus llaves de negocio), no se crearán estos registros sino referenciados para este caso.

La información para actualizar considera:

Asignar cuatro registros existentes de Vendor a una colección, teniendo los dos primeros como Applicable=No y los otros dos con Applicable=Yes:

<Vendors><Vendors><Applicable>0</Applicable><Vendor><Code>V001</Code><Name>IBM</Name></Vendor></Vendors><Vendors><Applicable>0</Applicable><Vendor><Code>V003</Code><Name>Apple</Name></Vendor></Vendors><Vendors><Applicable>1</Applicable><Vendor><Code>V004</Code><Name>Microsoft</Name></Vendor></Vendors><Vendors><Applicable>1</Applicable><Vendor><Code>V002</Code><Name>Dell</Name></Vendor></Vendors></Vendors>

Configurar el attributo Wallet ID como:

<WalletID>cc95807e-b896-4d0d-9299-73d111f8cee7</WalletID>

Asignar el valor para el atributo Approved (Booleano como falso)

<Approved>0</Approved>

Asignar un registro existente como Requested Product por su atributo Code:

<Requestedproduct><Code>TS</Code></Requestedproduct>

 

A pesar de que el método no genera salidas de respuesta, la información actualizada se verá inmediatamente reflejada en la actividad actual que maneja el scope (eso se puede verificar al trabajar en el proceso por medio del Portal de Trabajo).

 

xmlhelper_ex4_workportal

 

 

note_pin

En el ejemplo, se hace uso de CHelper.trace de manera opcional, dado que nos ayuda a imprimir trazas personalizadas de los valores y las respuestas en la ejecución de las reglas.

Para más información sobre la opción de trazas, refiérase a Validar mi regla de negocio.