Usar .id con XPath

<< Click to Display Table of Contents >>

Navigation:  Bizagi Studio > Asistente de Procesos > Reglas de Negocio > Ejemplos de reglas de negocio >

Usar .id con XPath

La sentencia .id después de un XPath podría requerirse o no dependiendo de lo que usted desee hacer.

 

Cuando se agregan elementos a una colección

Imagine un Proceso de Solicitud de Crédito Personal, donde hay varios productos en cada solicitud. Hay una relación uno a muchos entre la Entidad de Proceso Solicitud y la Entidad de colección Productos.

La entidad uno se denomina Solicitud.

La entidad colección se denomina Productos.

La relación es Solicitud_Productos.

Productos tiene un atributo llamado Valor.

 

Usted necesita agregar un nuevo producto a la colección con US$10.000 como valor. Utilice las siguientes declaraciones:

USE:

var NuevoProducto = Me.newCollectionItem(“idSolicitud.Solicitud_Productos”);
NuevoProducto.setXPath(“Valor”, 10000);

 

NO USE:

NuevoProducto.setXPath(“idSolicitud”,<idSolicitud.id>);

 

Esta última declaración perjudica la relación debido a que la función newCollectionItem llena el id del atributo automáticamente..

 

Cuando utilice un setXPath con asignación directa

Cuando usted utiliza la declaración setXPath, asigne el objeto y no el entero de la relación.

 

Utilizando la imagen que se muestra a continuación, imagine que usted tiene un Proceso de Mesa de Ayuda que gestiona reportes de incidentes (o tickets) con el fin de minimizar interrupciones en los servicios de tecnología de la información.

De acuerdo a cómo evoluciona el ticket en el proceso cambiará su estado. Hay una relación de entidad-relacionada entre la Entidad de Proceso denominada Ticket y la entidad paramétrica denominada Estado. Los valores se muestran a continuación:

 

Business Rules Elements8

 

Utilizamos un elemento de asignación para establecer el estado del Ticket.

Como el Ticket es recibido por el departamento de Mesa de Ayuda, su estado será Abierto.

 

USE

var Estado = CHelper.getEntityAttrib("HelpDeskCaseStatus","idStatus","Code = 1","");
<Ticket.Status> = Estado;

 

NO USE:

var Estado = CHelper.getEntityAttrib("HelpDeskCaseStatus","idStatus","Code = 1","");
<Ticket.Status.id> = Estado;

 

NO USE:

var Estado = CHelper.getEntityAttrib("HelpDeskCaseStatus","idStatus","Code = 1","");
<Ticket.Status> = Status.id;

 

Cuando se utilice setXPath en la función newCollectionItem

Cuando utilice la función newCollectionItem usted necesita asignar los XPaths a los atributos del nuevo registro de la colección.

Hay un caso especial donde usted debe utilizar .id: Cuando la sentencia setXPath incluya una sentencia getXPath para asignar un valor.

 

Imagine que usted tiene un Proceso de Solicitud de Compras que puede incluir muchos clientes. Por lo tanto, hay una relación uno a muchos entre la Entidad de Proceso SolicituddeProductos y Clientes. También hay una relación de atributo relacionado entre SolicituddeProductos y Clientes que almacena el cliente principal de la solicitud.

Usted necesita agregar a la colección de clientes el nombre del cliente principal y su estado.

 

La entidad de Proceso se denomina SolicituddeProductos.

La entidad colección se denomina Clientes.

La relación de entidad relacionada es ClientePrincipal

La relación es SolicituddeProductos_Clientes

Clientes tiene un atributo llamado Nombre

 
var AgregarCliente=Me.newCollectionItem("SolicituddeProductos.SolicituddeProductos_Clientes");
AgregarCliente.setXPath("NombreCliente",Me.getXPath("ClientePrincipal.Nombre"));
AgregarCliente.setXPath("Estado",Me.getXPath("ClientePrincipal.Estado.id"));

 

Cuando se utilice getXPath con una colección filtrada

Cuando utilice la función getXPath en colecciones y necesite un filtro en una tabla con una variable, usted necesita utilizar .id.

 

Imagine que tiene una Política de Suscripción Colectiva donde hay muchos vehículos para cada solicitud. Usted necesita saber cuántos vehículos hay de un cierto tipo en una solicitud.

 

Hay una relación uno a muchos entre la Entidad de Proceso Solicitud y la entidad colección Vehículos.

La entidad uno se denomina Solicitud.

La entidad colección se denomina Vehiculos.

La relación es Solicitud_Vehiculos

Los Productos tienen un atributo denominado TipodeVehiculo que esta relacionado a la entidad paramétrica.

 

USE

var idTipodeVehiculo = CHelper.getEntityAttrib("TipodeVehiculo","idTipo","Code = 1","");
var CuentadeVehiculos = Me.getXPath("count(Solicutud.Solicitud_Vehiculos["TipodeVehiculo.id = "+idTipodeVehiculo+"])");

 

NO USE

var idTipodeVehiculo = CHelper.getEntityAttrib("TipodeVehiculo","idTipo","Code = 1","");
var CuentadeVehiculos = Me.getXPath("count(Solicutud.Solicitud_Vehiculos["TipodeVehiculo.id = "+idVehicleType.id+"])");

 

 

Cuando se compare XPath en sentencias con if

Cuando se comparan XPath en sentencias con if, se debe comparar contra el objeto que relaciona a la entidad y no id.

 

1. USE

if (!IsNull(Request.getXPath("VehicleType")))

 

NO USE

if (Request.getXPath("VehicleType.id") != null)

 

 

2. USE

if(idVehicleType == Request.getXPath("VehicleType.id"))

Si idVehicleType es un entero

 

if(idVehicleType == Request.getXPath("VehicleType"))

Si idVehicleType es una variable relacionada con una entidad

 

NO USE

if(idVehicleType == Request.getXPath("VehicleType.id"))

Si idVehicleType es una variable relacionada con una entidad

 

 

3. USE

if (Request.getXPath("VehicleType.Code") == "2")

 

NO USE

if (Request.getXPath("VehicleType.id")==CHelper.getEntityAttrib("VehicleType","idVehicleType","Code = '2'",""))