Este ejemplo muestra cómo utilizar las API REST de alertas de BPM para crear un panel de control en la consola de administración de procesos que se visualice cuando el número de instancias de proceso o tareas desencadena una alerta.
El ejemplo consta de un objeto de negocio que debe contener la información de alerta, un servicio de integración para llamar a las API JavaScript para recuperar la información de alerta y una interfaz de usuario para visualizar las alertas en Process Admin Console. El panel de control es similar a la captura de pantalla siguiente:

En el ejemplo, el objeto de negocio AlertStatusSummary contiene información sobre las definiciones de alerta que el usuario ve en el panel de control.
El panel de control de ejemplo utiliza una tabla en la que cada fila representa una definición de alerta diferente de una instancia distinta de AlertStatusSummary.
| Nombre de parámetro | Descripción |
|---|---|
| status(String) | Indica si se ha desencadenado una alerta para esta definición de alerta o algún otro estado. |
| displayName(String) | El nombre de la definición de alerta visible para los usuarios. |
| condition(String) | La expresión que determina si el valor real del parámetro supervisado supera el valor de umbral. |
| currentValue(String) | El valor del parámetro supervisado. |
| thresholdOperator(String) | Indica si el atributo debe ser igual a, menor que o mayor que el valor de umbral para desencadenar la alerta. |
| thresholdValue(String) | El valor que desencadena la alerta. |
| projectDisplayName(String) | La aplicación de proceso cuyas condiciones de alerta se están supervisando. |
| snapshotDisplayName(String) | El nombre visible de la instantánea de aplicación de proceso cuyas condiciones de alerta se están supervisando. |
| bpdDisplayName(String) | El nombre de la BPD visible para los usuarios. |
| instanceStatus (String) | Indica si se ha desencadenado una alerta para la instancia de proceso o algún otro estado. |
| taskStatus(String) | Indica si se ha desencadenado una alerta para la instancia de tarea o algún otro estado. |
En el ejemplo, el servicio de integración recupera la lista de definiciones de alerta en función de un filtro.
En el ejemplo, el usuario selecciona los filtros mediante la interfaz de usuario siguiente en el panel de control:

El servicio acepta esta entrada para determinar qué tipo de definiciones de alertas debe recuperar.
La variable de salida contiene la lista de definiciones de alertas que el servicio ha recuperado en función del tipo de alertas que el usuario desea ver. El tipo BPMAlertDefinitionStatus se encuentra en el kit de herramientas Datos del sistema para dar soporte a alertas de BPM.


var ids = null;
// si se ha establecido categoryFilter, utilizarlo para obtener las definiciones de alerta
if(tw.local.categoryFilter != null) {
var alertDefinitions = tw.system.getAlertDefinitions(tw.local.categoryFilter, true);
ids = new tw.object.listOf.String();
for (var i=0; i<alertDefinitions.length; i++) {
ids.insertIntoList(i, alertDefinitions[i].id);
}}
// obtener el estado de las definiciones de alerta recuperadas
if(ids == null || ids.length > 0) {
var alertStatusResponse = tw.system.getAlertDefinitionsStatus(ids, true);
tw.local.alertDefinitionsStatus = alertStatusResponse.alertDefinitionStatus;
}
El ejemplo utiliza un servicio de usuario de herencia para definir el flujo entre el servicio de integración y la interfaz de usuario definida en un coach.
| Variable privada | Valor predeterminado | Descripción |
|---|---|---|
| refresh(Boolean) | Se establece en true para desencadenar un suceso de límite que llama al servicio de integración para recuperar de nuevo las definiciones de alertas. | |
| refreshInterval (Integer) | 60 | El número de segundos entre renovaciones. |
| categoryFilter(String)(List) | El tipo de filtro a utilizar para recuperar definiciones de alertas si el usuario ha seleccionado alertas de instancia de proceso o alertas de tarea. Los valores válidos son "INSTANCE" o "TASK". Es opcional y, si no tiene un valor, se recuperan ambos tipos de definiciones de alertas. | |
| alertDefinitionsStatus(BPMAlertDefinitionStatus)(List) | El estado de las definiciones de alerta recuperadas, como por ejemplo si se han desencadenado. | |
| alertStatusSummaries(AlertStatusSummary)(List) | La lista preparada de alertas a visualizar. | |
| selectedCategoryFilter(String) | "" | Si el usuario desea ver las definiciones de alertas para instancias de proceso, para tareas o ambas. |
| selectedTriggeredFilter(String) | "true" | Si el usuario desea ver sólo las definiciones de alerta que han desencadenado una alerta o todas las definiciones de alertas. |
| Artefacto | Nombre nuevo |
|---|---|
| Servicio anidado | Recuperar definiciones de alertas |
| Script de servidor | Correlacionar estado con AlertSummary |
| Script de servidor (1) | Evaluar selección de categorías |
| Coach | Panel de control Mis alertas |

tw.local.alertStatusSummaries = new tw.object.listOf.AlertStatusSummary();
var alerts = tw.local.alertDefinitionsStatus;
// correlacionar el estado con alertStatusSummaries
var num = 0;
var numOfAlerts = 0;
if(alerts != null) {
for(var i=0; i<alerts.listLength; i++) {
var status = alerts[i];
// correlacionar sólo si el resumen de estado de alerta es necesario
if(status.conditionMet || tw.local.selectedTriggeredFilter == "true") {
// crear AlertSummary
var alertSummary = new tw.object.AlertStatusSummary();
alertSummary.currentValue = status.actualValue;
alertSummary.displayName = status.definition.displayName;
alertSummary.thresholdValue = status.definition.thresholdValue;
// buscar el nombre de proyecto correcto
var project = null;
var invalid = false;
if(status.definition.projectId != null) {
project = tw.system.model.findProcessAppByID(status.definition.projectId);
if(project != null) {
alertSummary.projectDisplayName = project.name;
} else {
alertSummary.projectDisplayName = status.definition.projectId;
invalid = true;
}
}
// buscar el nombre de instantánea correcto
if(status.definition.snapshotId != null && project != null) {
var snapshot = project.findSnapshotByID(status.definition.snapshotId);
if(snapshot != null) {
alertSummary.snapshotDisplayName = snapshot.name;
} else {
alertSummary.snapshotDisplayName = status.definition.snapshotId;
invalid = true;
}
}
// concatenar resumen de condiciones
if(status.definition.thresholdOperator == "GREATER") {
alertSummary.condition = "More than ";
alertSummary.thresholdOperator = ">"
} else if (status.definition.thresholdOperator == "LESS") {
alertSummary.condition = "Less than ";
alertSummary.thresholdOperator = "<"
} else {
alertSummary.condition = "Exactly ";
alertSummary.thresholdOperator = "=";
}
if(!invalid) {
alertSummary.condition += status.definition.thresholdValue;
alertSummary.condition += " " + status.definition.category.toLowerCase() + "(s)";
if(alertSummary.projectDisplayName != null) {
alertSummary.condition += " in project '" + alertSummary.projectDisplayName + "'";
}
if(alertSummary.snapshotDisplayName != null) {
alertSummary.condition += " and snapshot '" + alertSummary.snapshotDisplayName + "'";
}
}
// si la alerta está activa o para visualizar alertas no activas, añadirlas a la lista
if(status.conditionMet) {
alertSummary.status = "Triggered";
tw.local.alertStatusSummaries.insertIntoList(0, alertSummary);
num++;
numOfAlerts++;
} else if (invalid) {
alertSummary.condition = "Esta definición de alerta hace referencia a una aplicación de proceso o instantánea que ya no está disponible en el sistema.";
alertSummary.status = "Invalid";
tw.local.alertStatusSummaries.insertIntoList(numOfAlerts, alertSummary);
num++;
numOfAlerts++;
} else if (tw.local.selectedTriggeredFilter == "true") {
tw.local.alertStatusSummaries.insertIntoList(num, alertSummary);
num++;
}
}
}
}
// si se ha seleccionado la categoría "All"
if (tw.local.selectedCategoryFilter == "") {
tw.local.categoryFilter = null;
// si se ha seleccionado otra categoría, crear el categoryFilter correcto
} else {
tw.local.categoryFilter = new tw.object.listOf.String();
tw.local.categoryFilter.insertIntoList(0, tw.local.selectedCategoryFilter);
El ejemplo tiene una interfaz de usuario que se visualiza como un panel de control en la consola de administración de procesos.
this.context.trigger();


| Nombre | Valor |
|---|---|
| Alertas desencadenadas | false |
| Todas | true |

| Nombre | Valor |
|---|---|
| Alertas de instancia de proceso | INSTANCE |
| Alertas de tarea | TASK |
| Todas |
<div id="spacer"> </div>
El objetivo de este control es añadir algún espacio entre los dos filtros.| Etiqueta de control predeterminada | Nueva etiqueta |
|---|---|
| Nombre de visualización | Nombre |
| Operador de umbral | |
| Valor del umbral | Umbral |
| Nombre de visualización de proyecto | Aplicación de proceso |
| Nombre de visualización de instantánea | Instantánea |
| Nombre de visualización de Bpd | Proceso |
El ejemplo tiene una interfaz de usuario que se visualiza como un panel de control en la consola de administración de procesos.
| Desde | Hasta |
|---|---|
| Iniciar | Recuperar definiciones de alertas |
| Recuperar definiciones de alertas | Correlacionar estado con AlertSummary |
| Correlacionar estado con AlertSummary | Panel de control Mis alertas |
| Panel de control Mis alertas | Recuperar definiciones de alertas utilizando el suceso de límite del Controlador de servicio |
| Panel de control Mis alertas | Correlacionar estado con AlertSummary utilizando el suceso de límite del Filtro de alertas triggeredFilter |
| Panel de control Mis alertas | Evaluar selección de categorías utilizando el suceso de límite del Filtro de alertas categoryFilter |
| Evaluar selección de categorías | Recuperar definiciones de alertas |
