Personalizar el cierre de incidencias
La aplicación cuenta con eventos para personalizar el cierre de incidencias.
A continuación se explica cómo rellenar campos (personalizados) en el proceso de cierre de las incidencias, tanto en el movimiento de cierre que se genera automáticamente como, opcionalmente, en la propia cabecera de la incidencia.
En la página que se muestra al usuario al cerrar una incidencia, IDPIMG Close Incident, se publica un evento, OnBeforeInsertIncidentEntryWhenCloseIncident, para poder suscribirnos a él y añadir más campos personalizados en el movimiento de cierre de la incidencia.
local procedure OnBeforeInsertIncidentEntryWhenCloseIncident(var TempClosingIncident: Record "IDPIMG Incident Header" temporary; var IncidentEntry: Record "IDPIMG Incident Entry")
El evento se lanza justo antes de insertarse el movimiento de incidencia de tipo cierre que se genera automáticamente, y recibe como parámetros un registro temporal de la tabla "IDPIMG Incident Header (la incidencia que se cierra), y el registro correspondiente al movimiento de cierre.
En la codeunit IDPIMG Incident Management se lanza un evento, OnBeforeModifyIncidentHeaderWhenCloseIncident, en la función CloseIncident, a la que se llama al cerrar una incidencia, tras la creación del movimiento de cierre, para modificar el estado de la incidencia a cerrada, de modo que podamos suscribirnos a él y modificar más campos personalizados en la cabecera de la incidencia.
local procedure OnBeforeModifyIncidentHeaderWhenCloseIncident(var TempClosingIncident: Record "IDPIMG Incident Header" temporary; var IncidentHeader: Record "IDPIMG Incident Header")
El evento se lanza justo antes de modificarse la cabecera de la incidencia tras el cambio de estado y recibe como parámetros un registro temporal de la tabla "IDPIMG Incident Header (la incidencia que se cierra), y la propia cabecera de la incidencia con el estado ya como cerrada.
A continuación, se muestra un ejemplo de personalización usando estos eventos, donde el usuario, además de los datos que pide la app por defecto al cerrar una incidencia (razón de cierre, descripción, etc.), debe indicar la fecha y hora en la que se produjo el cierre real de la incidencia.
Se añaden los campos que se desee tanto en la tabla IDPIMG Incident Entry, como, de forma opcional, en la tabla IDPIMG Incident Header, que es en la que se basa la página para cerrar incidencias (IDPIMG Close Incident).
ConsejoSe recomienda que, si se duplican los campos en las tablas IDPIMG Incident Entry e IDPIMG Incident Header, estén como no editables en la tabla IDPIMG Incident Header para ser coherentes con el proceso de cierre de la app, que registra la información del cierre en los movimientos de incidencia. Se pueden añadir a la cabecera de la incidencia por comodidad para la explotación de datos y se pueden añadir como campos normales o como campos FlowField pero, en ningún caso editables ya que, cuando se cierra una incidencia, ya no se puede modificar.
tableextension 50104 "MYPRE Incident Entry" extends "IDPIMG Incident Entry"
{
fields
{
field(50100; "Closing Date Time"; DateTime)
{
Caption = 'Date Time of the closing';
DataClassification = CustomerContent;
}
}
}
tableextension 50102 "MYPRE Incident Header" extends "IDPIMG Incident Header"
{
fields
{
field(50103; "Closing Date Time"; DateTime)
{
Caption = 'Date Time of the closing';
Editable = false;
DataClassification = CustomerContent;
}
}
}
Se extiende la página que se muestra al cerrar incidencias, IDPIMG Close Incident, añadiendo la nueva información que se quiera rellenar. Los nuevos campos, aunque solo se fueran a rellenar en la tabla de mov. de incidencias, se deben añadir también en la tabla de cabecera de incidencias, al ser la tabla en la que se basa la página de cierre de incidencias.
ImportanteDeben añadirse como variables, no como campos, para que puedan ser editables, ya que la página se muestra en modo Lookup para que el usuario pueda cancelar el proceso de cierre de la incidencia. Por tanto, en esta PageExtension, en el trigger OnClosePage se tendrán que pasar el valor de las variables a los campos correspondientes de Rec para que, en el siguiente punto los podamos utilizar (no se puede hacer en el Validate de cada columna por estar la página en modo Lookup).
pageextension 50106 "MYPRE Close Incident" extends "IDPIMG Close Incident"
{
layout
{
addbefore("Reason Code")
{
group("MYPRE Closing DateTime")
{
Caption = 'Closing Date Time';
field(ClosingDate; ClosingDate)
{
ApplicationArea = All;
Caption = 'Closing Date';
ToolTip = 'The real date when the incident was closed.';
}
field(ClosingTime; ClosingTime)
{
ApplicationArea = All;
Caption = 'Closing Time';
ToolTip = 'The real time when the incident was closed.';
}
}
}
}
trigger OnOpenPage()
begin
ClosingDate := Today();
ClosingTime := Time();
end;
trigger OnClosePage()
begin
Rec."Closing Date Time" := CreateDateTime(ClosingDate, ClosingTime);
end;
var
ClosingDate: Date;
ClosingTime: Time;
}
Debemos suscribirnos a dos eventos:
OnBeforeInsertIncidentEntryWhenCloseIncident de la página IDPIMG Close Incident, para traspasar el valor de los nuevos campos añadidos en la pantalla de cierre de una incidencia al movimiento de cierre de incidencia que se crea de forma automática. También podría lanzarse un error si algún nuevo campo debe estar relleno y no lo está antes de cerrarse la incidencia.
NotaEl Rec en la pantalla de IDPIMG Close Incident se corresponde con la incidencia que se cierra (copia temporal).
[EventSubscriber(ObjectType::Page, Page::"IDPIMG Close Incident", 'OnBeforeInsertIncidentEntryWhenCloseIncident', '', false, false)]
local procedure OnBeforeInsertIncidentEntryWhenCloseIncident(var TempClosingIncident: Record "IDPIMG Incident Header"; var IncidentEntry: Record "IDPIMG Incident Entry")
begin
IncidentEntry.Validate("Closing Date Time", TempClosingIncident."Closing Date Time");
end;
- OnBeforeModifyIncidentHeaderWhenCloseIncident de la codeunit IDPIMG Incident Management, para traspasar el valor de los nuevos campos añadidos en la pantalla de cierre de una incidencia a la cabecera de la incidencia que se cierra, en el caso de querer añadir campos a esta cabecera para facilitar la explotación de la información de cierre, aunque esté redundante porque realmente se guarda en el movimiento de cierre.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPIMG Incident Management", 'OnBeforeModifyIncidentHeaderWhenCloseIncident', '', false, false)]
local procedure OnBeforeModifyIncidentHeaderWhenCloseIncident(var TempClosingIncident: Record "IDPIMG Incident Header"; var IncidentHeader: Record "IDPIMG Incident Header")
begin
IncidentHeader.Validate("Closing Date Time", TempClosingIncident."Closing Date Time");
end;