Saltar a contenido

PHP en desencadenadores

Un desencadenador es PHP que se ejecuta dentro del caso. Esta página explica qué recibe ese código, cómo lee y escribe los datos del caso, y cómo averiguar por qué falló.

Dónde se ejecuta el código

El desencadenador se ejecuta en el servidor, en el contexto del caso que lo disparó. Antes de ejecutarse, el código se analiza: un error de sintaxis detiene la ejecución y reporta el nombre del desencadenador y la línea, así que un desencadenador roto nunca corre a medias.

La salida se captura, no se imprime: echo y print no llegan al navegador. La forma de dejar evidencia es escribir en una variable, en una nota del caso o en un log.

Leer una variable del caso

Dentro del código, las variables del caso se escriben con el mismo prefijo que en una condición, y el motor las reemplaza por el valor guardado:

Prefijo Lee como
@@nombre Texto
@%nombre Número entero
@#nombre Número decimal
@=nombre El valor original, sin cambios
if (@@Priority == "high") {
    @@DueDate = date("Y-m-d", strtotime("+2 days"));
}

Una variable que el caso todavía no guardó se lee como un valor vacío. Eso es cómodo y peligroso: un error de tipeo en @@Prioroty no genera un error, simplemente evalúa como falso.

Escribir una variable del caso

Asigna al mismo nombre con prefijo:

@@Approved = "yes";
@%Attempts = @%Attempts + 1;

El valor se guarda en el caso cuando el desencadenador termina, y aparece en el registro de cambios como un valor escrito en un formulario.

Grillas y listas

Una grilla es un arreglo de filas. Llega a una celda con la fila y la columna:

$total = 0;
foreach (@@Items as $row) {
    $total += (float) $row["Price"];
}
@@Total = $total;

El mismo valor se puede leer directo: @@Items[0]["Price"].

Qué dice la sesión

El desencadenador corre en la sesión del caso, así que estas claves están disponibles:

Clave Valor
$_SESSION['APPLICATION'] El id del caso
$_SESSION['INDEX'] El índice de derivación de la tarea actual
$_SESSION['TASK'] El id de la tarea
$_SESSION['PROCESS'] El id del proceso
$_SESSION['USER_LOGGED'] El usuario que lo disparó

Prefiere las funciones que reciben un id explícito, como PMFNewCase() o PMFSendMessage(), cuando el desencadenador pueda ejecutarse desde más de un lugar.

Llamar funciones

Las funciones de Lurana están disponibles por nombre: casos, tareas, documentos, correo, usuarios, fechas y consultas. Son funciones PHP normales, así que se combinan:

$user = PMFGetNextAssignedUser($_SESSION["TASK"]);
if (!empty($user["USR_EMAIL"])) {
    PMFSendMessage($_SESSION["APPLICATION"], "no-reply@example.com", $user["USR_EMAIL"],
        "", "", "Case moved", "notification.html");
}

Cuando falla

  • Error de sintaxis — el desencadenador no se ejecuta; el mensaje nombra el desencadenador y la línea.
  • Error en ejecución — el error se captura y se guarda en el caso; el paso que lo disparó puede no completarse.
  • Error lógico silencioso — sin mensaje: una variable mal escrita, una comparación entre texto y número, una condición que nunca coincide.

La vista de depuración del caso muestra el desencadenador que se ejecutó, su código y las variables antes y después, y es donde conviene mirar primero.

Buenas prácticas

  • Mantén el desencadenador corto; mueve la lógica reutilizable a una función o a otro desencadenador.
  • No fijes ids de tareas o procesos: léelos del caso o búscalos por nombre.
  • Verifica que los valores no estén vacíos antes de usarlos en un cálculo.
  • No llames a exit ni a die: terminan la petición, no solo el desencadenador.
  • Un desencadenador que envía correo o crea un caso no es idempotente: ejecutarlo dos veces envía dos veces.

Relacionado