<< Clic para mostrar Tabla de Contenidos >> 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:
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.
El esquema generado incluye los atributos que se piensan actualizar o insertar:
Para más información sobre predefinir esquemas, refiérase a Esquemas XML del modelo de datos.
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.
|
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.
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:
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
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:
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).
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. |
Last Updated 1/26/2022 4:12:59 PM