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
exitni adie: 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¶
- Desencadenadores — crearlos y adjuntarlos.
- Funciones de Lurana — la referencia de funciones.
- Condiciones — las mismas reglas de prefijos en expresiones.
- Depuración de un caso — la vista que muestra qué se ejecutó.