CEntityManager

<< Clic para mostrar Tabla de Contenidos >>

Navegación:  Automatización de Procesos con poco código > Studio Cloud -ambiente de autoría > Bizagi Studio > Asistente de Procesos > Reglas de Negocio > Funciones de Bizagi >

CEntityManager

Introducción

Este artículo ofrece una descripción general de los objetos CEntityManager y CEntity, que se emplean en la creación de reglas de negocio script para acceder a la información de la entidad sin depender de XPaths. El objeto CEntityManager resulta beneficioso para recuperar registros e información general directamente almacenados en las entidades de Bizagi. Al mismo tiempo, el objeto CEntity proporciona funciones para realizar operaciones con información de la entidad.

 

Funciones CEntity Manager

Las funciones del objeto CEntityManager utilizadas para obtener o modificar entidades y sus atributos son:

 

FUNCIÓN

DESCRIPCIÓN

SINTAXIS

ExistsEntityInstance

Comprueba si hay una instancia de entidad basándose en un nombre de entidad determinado sEntName y el ID de instancia de entidad (valor de llave Surrogate) oSurrogateKeyValue. La función devuelve un valor booleano, verdadero si se encuentra la instancia y falso en caso contrario.

CEntityManager.ExistsEntityInstance(sEntName, oSurrogateKeyValue)

 

sEntName: String que contiene el nombre de la entidad.

oSurrogateKeyValue: Entero que contiene el ID de la instancia.

GetEntity (objeto vacío)

Obtiene un objeto CEntity vacío de la entidad sEntName especificada, que se puede utilizar al agregar nuevos registros.

CEntityManager.GetEntity(sEntName)

 

sEntName: String que contiene el nombre de la entidad.

GetEntity

Obtiene una instancia de entidad con un nombre de entidad sEntName y el ID de instancia de entidad (valor de llave Surrogate) oSurrogateKeyValue. La función devuelve un objeto CEntity con valores, que se pueden utilizar al actualizar o eliminar la instancia.

CEntityManager.GetEntity(sEntName, oSurrogateKeyValue)

 

sEntName: String que contiene el nombre de la entidad.

oSurrogateKeyValue: Entero que contiene el ID de la instancia.

GetEntityFromPath

Obtiene una instancia de entidad dada una ruta de atributo sEntPath y el ID de instancia de entidad (valor de llave Surrogate) oSurrogateKeyValue. La función devuelve un objeto CEntity, que se puede utilizar al actualizar o eliminar la instancia.

CEntityManager.GetEntityFromPath(sEntPath, oSurrogateKeyValue)

 

sEntPath: String que contiene la ruta al atributo considerando el contexto actual.

oSurrogateKeyValue: Entero que contiene el ID de la instancia.

setAttrib

Configura un atributo sAttribName con un nuevo valor oAttribValue dada una instancia de entidad sEntityName y el ID de instancia de entidad (valor de llave Surrogate) oSurrogateKeyValue.

CEntityManager.setAttrib(sEntityName, oSurrogateKeyValue, sAttribName, oAttribValue)

 

sEntityName: String que contiene el nombre de la entidad.

oSurrogateKeyValue: Entero que contiene el ID de la instancia.

sAttribName: String con el nombre del atributo a configurar.

oAttribValue: Objeto con el nuevo valor de atributo.

getAttrib

Obtiene el valor de un atributo de una entidad dado el nombre de la entidad sEntityName, el ID de instancia de entidad (valor de llave Surrogate) oSurrogateKeyValue y el nombre del atributo sAttribName. La función devuelve un objeto con el valor del atributo.

CEntityManager.getAttrib(sEntityName, oSurrogateKeyValue, sAttribName)

 

sEntityName: String que contiene el nombre de la entidad.

oSurrogateKeyValue: Entero que contiene el ID de la instancia.

sAttribName: String con el nombre del atributo a obtener.

 

note_pin

Las funciones setAttrib y getAttrib también están disponibles en el objeto CHelper.

 

Funciones CEntity

Las funciones del objeto CEntity utilizadas para realizar operaciones con información de entidades son:

 

FUNCIÓN

DESCRIPCIÓN

SINTAXIS

Add

Agrega una nueva instancia de entidad.

oEntity.Add()

Update

Actualiza valores de propiedad que hayan cambiado para una instancia de entidad en la base de datos.

oEntity.Update()

Delete

Elimina una instancia de entidad.

oEntity.Delete()

SetAttribValue

Configura un valor oNewValue para el último atributo de una ruta determinada sPath.

oEntity.SetAttribValue(sPath, oNewValue)

 

sPath: String con la cadena de atributos relacionados utilizados para llegar a la entidad del atributo.

oNewValue: Objeto con el nuevo valor del atributo.

 

Nota: El objeto oEntity no debe estar vacío y ya debe estar instanciado, ya sea mediante la función CEntityManager.GetEntity, CEntityManager.GetEntityFromPath o Add.

GetAttribValue

Obtiene el valor del último atributo de una ruta determinada sPath. La función devuelve un objeto con el valor del atributo.

oEntity.GetAttribValue(sPath)

 

sPath: String con la cadena de atributos relacionados utilizados para llegar a la entidad del atributo.

 

Nota: El objeto oEntity no debe estar vacío y ya debe estar instanciado, ya sea mediante la función CEntityManager.GetEntity, CEntityManager.GetEntityFromPath o Add.

GetEntityList

Obtiene una lista de registros para la entidad especificada. La lista se puede filtrar especificando el nombre del atributo sFilterAttrib y su valor correspondiente oFilterValue, o proporcionando un texto de filtro sFilterText. Además, la lista se puede ordenar especificando el nombre del atributo sOrderAttrib. La función devuelve un array CEntity que contiene los registros encontrados.

oEntity.GetEntityList(sFilterAttrib, oFilterValue, sFilterText, sOrderAttrib)

 

sFilterAttrib: String que contiene el nombre del atributo usado para filtrar.

oFilterValue: Objeto con el valor usado para filtrar.

sFilterText: String cque contiene el filtro utilizando el formato de cláusula WHERE (es decir, WHERE <condiciones>).

sOrderAttrib: String que contiene el nombre del atributo usado para ordenar.

GetEntityListCount

Obtiene el número de registros de una entidad, dado un filtro específico sFilterText.

oEntity.GetEntityListCount(sFilterText)

 

sFilterText: String cque contiene el filtro utilizando el formato de cláusula WHERE (es decir, WHERE <condiciones>).

 

Usando las funciones CEntityManager

Esta sección ofrece una serie de ejemplos que ilustran cómo utilizar las diversas funciones CEntityManager explicadas anteriormente.

 

1. ExistsEntityInstance

Para verificar la existencia de un registro o instancia de entidad dentro de la entidad Maestra mLiability Master en función de un valor de llave Surrogate determinado (1356), emplee la siguiente sintaxis:

 

var bEntityInstanceCheck = CEntityManager.ExistsEntityInstance("mLiability", 1356);

 

Después de la ejecución, el resultado es true si existe una instancia con SurrogateKeyValue = 1356; de lo contrario, devuelve false.

 

Alternativamente, puede realizar esta validación usando la función entity-list:

 

var oLiabObject = Me.getXPath("entity-list('mLiability','idmLiability = 1356')");
var ObjectSize = oLiabObject.size();

 

Si el valor de ObjectSize es mayor que cero, significa que la instancia existe.

 

2. GetEntityFromPath

Usted debe acceder a la entidad Maestra mLiability mediante el XPath mLiabilityCollect.kmSingleLiability.

 

CEntityManagerExamples01

 

La función requiere el Id (SurrogateKeyValue) de la entidad raíz (es decir, mLiabilityCollect).

 

La sintaxis es la siguiente:

 

var iLiabSGTKValue = <mLiabilityCollect.Id>;//SurrogateKeyValue de la entidad raíz

 

//Para obtener el objeto mLiability vinculado a la entidad raíz

var oEntFrmPathObjct = CEntityManager.GetEntityFromPath("mLiabilityCollect.kmSingleLiability", iLiabSGTKValue);

 

//Para obtener el monto del objeto mLiability vinculado a la entidad raíz

var cLiabilityAmount = oEntFrmPathObjct.Attributes["cAmount"].Value;

 

//Para obtener el valor de la llave Surrogate del objeto mLiability vinculado a la entidad raíz

var iLiabilitySGKV = oEntFrmPathObjct.SurrogateKeyValue;

 

 

3. setAttrib

En la entidad Maestra mLiability, usted debe actualizar el valor almacenado en el atributo sLiabilityStatus de un registro, utilizando el valor de llave Surrogate del registro (idmLiability = 901). El valor actual es Pending Collection y debe actualizarlo a Collected.

 

CEntityManagerExamples02

 

La sintaxis es la siguiente:

 

CEntityManager.setAttrib("mLiability", 901, "sLiabilityStatus", "Collected");

 

note_pin

La función setAttrib no es soportada por la función Me.getXPath("entity-list()").

 

Alternativamente, si el ID del registro de entidad está disponible o se ha obtenido previamente, puede usar la función CHelper.setAttrib de la siguiente manera:

 

CHelper.setAttrib("mLiability", 901, "sLiabilityStatus", "Collected");//Configura un valor en el atributo sLiabilityStatus para el registro con idmLiability = 901

 

4. getAttrib

En la entidad Maestra mLiability, debe obtener el valor almacenado en el atributo DebtorID para un registro, utilizando el valor de llave Surrogate del registro (idmLiability = 901).

 

La sintaxis es la siguiente:

 

var DebtorID = CEntityManager.getAttrib("mLiability", 901, "iDebtorID");

 

Como alternativa, puede utilizar la función entity-list:

 

var oLiability = Me.getXPath("entity-list('mLiability', 'idmLiability = 901')");
for(var j = 0; j < oLiability.size(); j++){
  var oLiabRecord = oLiability.get(j);
  var DebtorID = oLiabRecord.getXPath("iDebtorID");
}

 

Asimismo, si el Id del registro de la entidad está disponible o se ha obtenido previamente, puede utilizar la función CHelper.getAttrib de la siguiente manera:

 

var DebtorID = CHelper.getAttrib("mLiability", 901, "iDebtorID");//Obtiene el DebtorID para el registro con idmLiability = 901

 

Usando las funciones CEntity

Esta sección ofrece una serie de ejemplos que ilustran cómo utilizar las diversas funciones de CEntity explicadas anteriormente:

 

1. GetEntityList

Usted debe iterar sobre los registros de la entidad mPendingLiability que se han seleccionado para procesamiento. El criterio de filtrado se basa en un único atributo bSelect4Processing.

 

CEntityExamples06

 

Para obtener todos los registros que coinciden con los criterios de filtrado, debe utilizar la función GetEntityList. La sintaxis es la siguiente:

 

var oPndngLblty = CEntityManager.GetEntity("mPendingLiability").GetEntityList("bSelect4Processing","true", "","");

 

Alternativamente, puede recuperar los registros utilizando la función entity-list:

 

var oPndngLblty = Me.getXPath("entity-list('mPendingLiability','bSelect4Processing = true')");

 

Cuando se utiliza un filtro con más de un criterio:

 

CEntityExamples07

 

La sintaxis debe ser la siguiente:

 

var oEntEntityNameList = CEntityManager.GetEntity("mLiability").GetEntityList("", "", "dDueDate BETWEEN '2023-05-01' AND '2023-06-30' AND iUncollected = 1", "");

 

También puede obtener los registros utilizando la función entity-list:

 

var oPndngLblty = Me.getXPath("entity-list(mLiability,' dDueDate BETWEEN '2023-05-01' AND '2023-06-30' AND iUncollected = 1')");

 

2. GetEntityListCount

Puede contar la cantidad de registros existentes en una entidad utilizando la función GetEntityListCount. Utilice condiciones de filtrado para contar el número de registros coincidentes o no incluya criterios de filtrado para obtener el número total de registros.

 

CEntityExamples08

 

Opción 1 – con filtros

var oLiabCllct = CEntityManager.GetEntity("mLiabilityCollect");
var iLiabCollectCount = oLiabCllct.GetEntityListCount("bLiabDataLoad = true");

 

Opción 2 – sin filtros

var oLiabCllct = CEntityManager.GetEntity("mLiabilityCollect");
var iLiabCollectCount = oLiabCllct.GetEntityListCount("");

 

Filtros

Al construir filtros, puede utilizar operadores y fechas de la siguiente manera:

 

Operadores

Puede utilizar los siguientes operadores en los filtros:

 

OPERADOR

NOMBRE

EJEMPLO

=

Igual a

idClient = <idClient>

<>

Diferente

ClientName <> 'John'

>

Mayor que

balance > 600

<

Menor que

balance < 600

>=

Mayor o igual que

balance >= 600

<=

Menor o igual que

balance <= 600

AND

Y

balance >= 600 AND idClient = <idClient>

OR

O

balance = 600 OR balance = 100

BETWEEN

Entre

balance BETWEEN 200 AND 500

IN ()

En

balance IN (600, 650, 700)

IS NULL

Igual a nulo

CityName IS NULL

IS NOT NULL

Diferente de nulo

CityName IS NOT NULL

 

Fechas

Las fechas guardadas en el modelo de datos a través del Portal de Trabajo se almacenan en la base de datos con minutos y segundos, dado que todas las fechas se registran como Fecha-Hora. Por lo tanto, al acceder a estas fechas usando CEntityManager, debe convertir la fecha a un formato que se pueda leer fácilmente.

 

Para ilustrar este escenario, consideremos un proceso de Solicitud de compra en el que las órdenes de compra se generan una vez que se elige un proveedor. Todos los detalles de la orden de compra, incluidas las fechas de pago, se ingresan en el Portal de Trabajo.

 

Ahora, imagine otro proceso llamado Cuentas por pagar, donde necesita identificar todas las órdenes de compra pendientes programadas para pagar la próxima semana. Para lograr esto, debe utilizar CEntityManager para seleccionar de la entidad Órdenes de compra todos los pedidos que permanecen sin pagar y tienen una fecha de pago próxima.

 

El código requerido para la expresión que selecciona de la entidad especificada (es decir, la entidad Órdenes de compra) y filtra por fecha es:

 

FirstDate = Convert.ToDateTime(<Process.Date1>);

DateToFilter = CHelper.FormatDate(Date, "yyyy-MM-dd HH:mm:ss");

ListOfRecords =

CEntityManager.GetEntity("EntityToFilter").GetEntityList("","","DateAttribute = '" + DateToFilter + "'","");

 

3. Agregar nuevo(s) registro(s)

El uso de funciones CEntityManager para agregar o modificar registros de entidades Paramétricas no es recomendado. Este proceso debe realizarse exclusivamente a través de Bizagi Studio, el Portal de Trabajo (Admin>Administración de Procesos>Entidades), o la API de Bizagi.

 

Como buena práctica, se debe abordar la adición de registros a entidades Maestras para una persistencia inmediata en la base de datos después de un análisis exhaustivo de los escenarios de casos de negocios. Este análisis debe considerar todos los impactos potenciales, ya sean positivos o negativos, en los datos y comportamientos posteriores en actividades, reglas, formas, integraciones, etc. Se recomienda agregar registros a entidades Maestras utilizando formas de Actividad o Evento, reglas de negocio (expresiones), al recibir una respuesta de un sistema externo a través de una invocación de servicio web, o cuando un sistema externo invoca OData o a la Capa SOA de Bizagi.

 

Puede haber escenarios en los que se considere necesario agregar registros a entidades Maestras mediante expresiones (por ejemplo, debido a consideraciones de desempeño o escenarios de negocio complejos). En tales casos, estos escenarios deben ser revisados meticulosamente por el equipo del proyecto.

 

Ejemplo A

Usted debe crear nuevos registros en dos entidades Maestras diferentes, considerando la relación uno a muchos previamente configurada. La entidad mLiabilityCollect se puede asociar con varios registros (uno o varios) de la entidad mPendingLiability.

 

CEntityExamples03

 

Para crear los nuevos registros y vincularlos, siga los siguientes pasos:

Paso 1: Agregue el nuevo registro en la entidad mLiabilityCollect y almacene el SurrogateKeyValue del nuevo registro.

 

//Paso 1
var oLiabCllctEntity = CEntityManager.GetEntity("mLiabilityCollect");
oLiabCllctEntity.Attributes["bLiabDataLoad"].Value = false;
oLiabCllctEntity.Attributes["bDeleteBadCorrupt"].Value = false;
oLiabCllctEntity.Add();
var iLiabCllctSgtKeyValue = oLiabCllctEntity.SurrogateKeyValue;

 

Paso 2: Agregue el nuevo registro en la entidad mPendingLiability.

 

//Paso 2
var oPndngLblty = CEntityManager.GetEntity("mPendingLiability");
oPndngLblty.Attributes["bSelect4Processing"].Value = false;

 

Paso 3: Vincule el registro recién creado en mPendingLiability con el nuevo registro en mLiabilityCollect asignando el SurrogateKeyValue almacenado en el Paso 1 al atributo kmLiabilityCollect_FK. Este atributo debe configurarse durante la creación de la relación de uno a muchos entre estas dos entidades.

 

//Paso 3
oPndngLblty.Attributes["kmLiabilityCollect_FK"].Value = iLiabCllctSgtKeyValue;
oPndngLblty.Add();

 

Ejemplo B

Usted debe crear registros en dos entidades maestras diferentes, mLiabilityCollect y mLiability, que están vinculadas a través de una relación 1:1, como se ilustra en el modelo de datos a continuación:

 

CEntityManagerExamples01

 

Para crear los nuevos registros y vincularlos, siga los siguientes pasos:

Paso 1: Agregue el nuevo registro en la entidad mLiability y almacene el SurrogateKeyValue del nuevo registro en una variable temporal (iLiabilitySgtKeyValue).

 

//Paso 1

var oPndngLblty = CEntityManager.GetEntity("mLiability");
oPndngLblty.Attributes["cAmount"].Value = 1250;
oPndngLblty.Attributes["iUncollected"].Value = 1;
oPndngLblty.Attributes["sLiabilityStatus"].Value = "Uncollected";
oPndngLblty.Attributes["dRegistrationDate"].Value = DateTime.Today;
oPndngLblty.Add();
var iLiabilitySgtKeyValue = oPndngLblty.SurrogateKeyValue;

 

Paso 2: Agregue el nuevo registro en la entidad mLiabilityCollect y vincule el nuevo registro mLiability del Paso 1.

 

//Paso 2

var oLiabCllctEntity = CEntityManager.GetEntity("mLiabilityCollect");
oLiabCllctEntity.Attributes["bLiabDataLoad"].Value = false;
oLiabCllctEntity.Attributes["bDeleteBadCorrupt"].Value = false;
oLiabCllctEntity.Attributes["kmSingleLiability"].Value = iLiabilitySgtKeyValue;//Link new mLiability record
oLiabCllctEntity.Add();

 

Ejemplo C

Considere la entidad Maestra mLiability como ejemplo. Antes de ejecutar el proceso de negocio automatizado diseñado para cobrar pasivos (consulte la imagen a continuación), es necesario poblar sus valores. Para ello se utiliza una hoja de Excel que contiene toda la información pertinente. Un proceso de Bizagi le permite cargar el archivo de Excel y, al enviar la creación del caso, se genera un nuevo registro en la entidad mLiability para cada fila de la hoja de Excel.

 

CEntityExamples01

 

CEntityExamples02

 

La sintaxis es la siguiente:

 

var bFileExists = <exists(mLiabilityCollect.uExcelDataLoad1)>;
if(BAIsTrue(bFileExists)){
oDataFile = Chelper.GetValueAsCollection(<mLiabilityCollect.uExcelDataLoad1>);
  for(f = 0; f < oDataFile.size(); f++){
    oFile = oDataFile.get(f);
    oFileData = oFile.getXPath("Data");
    FileContent = Chelper.GetDataTableFromWorkSheetAsString(oFileData, 0);
iRowsCount = FileContent.Rows.Count;
for(g=0; g < iRowsCount; g++){
    oCEntLiability = null;
        var oExcelRow = FileContent.Rows[g]; //Objeto que contiene los datos de fila del Excel
var oCEntLiability = CentityManager.GetEntity("mLiability");//Devuelve un objeto vacío
 
//Configuración de valores para el nuevo registro mLiability
oCEntLiability.Attributes["cAmount"].Value = Chelper.ToInt( oExcelRow["cAmount"]);
oCEntLiability.Attributes["iUncollected"].Value = oExcelRow["iUncollected"];
oCEntLiability.Attributes["iDebtorID"].Value = oExcelRow["iDebtorID"];
oCEntLiability.Attributes["sLiabilityStatus"].Value = oExcelRow["sLiabilityStatus"];
oCEntLiability.Add();//Llamada a función para crear el nuevo registro mLiability
}
}
}

 

note_pin

La adición de registros en entidades no es soportada por la función entity-list.

 

4. Actualizar registro(s)

Usted debe actualizar todos los registros con una fecha de registro vacía en la entidad mLiability con la fecha actual (DateTime.Today). Para lograr esto, necesita obtener un objeto que contenga todos los registros existentes que cumplan con esta condición específica, iterar sobre este objeto y ejecutar la función de actualización para cada registro.

 

CEntityExamples04

 

La sintaxis es la siguiente:

 

var dToday = DateTime.Today;
var oLiability = CEntityManager.GetEntity("mLiability");
oLiabRecords = oLiability.GetEntityList("", "", "dRegistrationDate is null", "");//Returns object with records matching the filtering criteria
for(u = 0; u < oLiabRecords.Length; u++){
  var oRecord2Update = oLiabRecords [u];
  oRecord2Update.Attributes["dRegistrationDate"].Value = dToday;
  oRecord2Update.Update();//Llamada a función para actualizar el registro
}

 

5. Eliminar registro(s)

Considere que en la entidad mLiability existen registros que carecen de fechas de registro o vencimiento. En consecuencia, usted debe eliminar estos registros de la entidad. Para realizar esta tarea, puede:

Utilizar la función GetEntity para obtener todos los registros de la entidad.

Utilizar la función GetEntityList con un filtro para mantener solo los registros con fechas vacías.

Utilizar la función GetEntityListCount para contar los registros a eliminar. Este recuento se utiliza luego para definir el número de iteraciones.

Utilizar la función Delete para eliminar cada registro que coincida con los criterios de filtrado.

 

La sintaxis es la siguiente:

 

var oLiability = CEntityManager.GetEntity("mLiability");
Filter = "dDueDate is null OR dRegistrationDate is null";//Filtrar para recuperar registros de mLiability con fechas vacías
var oBadRecords = oLiability.GetEntityList("", "", Filter, "");//Devuelve un objeto con registros que coinciden con los criterios de filtrado
var iRecordCount = oLiability.GetEntityListCount(Filter);
for(var r = 0; r < iRecordCount; r++){
    oRecord2Delete = oBadRecords[r];
    oRecord2Delete.Delete();//Llamada a función para eliminar registro
  }

note_pin

IMPORTANTE: La acción Delete() no se puede revertir una vez ejecutada. Debe asegurarse de que se hayan realizado todas las validaciones de negocio necesarias antes de utilizar esta función para eliminar cualquier registro de entidad.

La eliminación de registros en entidades no es soportada por la función entity-list.

 

6. SetAttribValue

Usted debe actualizar el valor de Amount en la entidad mLiability utilizando el XPath mLiabilityCollect.kmSingleLiability.

 

CEntityExamples05

 

La función requiere el Id (SurrogateKeyValue) de la entidad raíz (es decir, mLiabilityCollect).

 

La sintaxis es la siguiente:

 

var idLiabCllct = <mLiabilityCollect.Id>;
 
var oDbtrRcrds = CEntityManager.GetEntity("mLiabilityCollect", idLiabCllct);//Obtiene el registro específico de mLiabilityCollect según el SurrogateKeyValue proporcionado
 
oDbtrRcrds.SetAttribValue("kmSingleLiability.cAmount", 560);//Actualiza el valor de Amount

 

7. GetAttribValue

Usted debe obtener el valor de DebtorID en la entidad mLiability utilizando el XPath mLiabilityCollect.kmSingleLiability.

 

CEntityExamples05

 

La función requiere el Id (SurrogateKeyValue) de la entidad raíz (es decir, mLiabilityCollect).

 

La sintaxis es la siguiente:

 

var idLiabCllct = <mLiabilityCollect.Id>;
 
var oDbtrRcrds = CEntityManager.GetEntity("mLiabilityCollect", idLiabCllct);//Obtiene el registro específico de mLiabilityCollect según el SurrogateKeyValue proporcionado
 
//Obtiene el valor de DebtorID en el registro mLiability relacionado
var iDbtrID = oDbtrRcrds.GetAttribValue("kmSingleLiability.iDebtorID");


Last Updated 12/22/2023 2:12:33 PM