Personalizar la reapertura de incidencias
La aplicación cuenta con eventos para personalizar la reapertura de incidencias.
A continuación se explica cómo rellenar campos (personalizados) en el proceso de reapertura de las incidencias, tanto en el movimiento de reapertura que se genera automáticamente como, opcionalmente, en la propia cabecera de la incidencia.
En la página que se muestra al usuario al reabrir una incidencia, IDPIMG Reopen Incident, se publica un evento, OnBeforeInsertIncidentEntryWhenReopenIncident, para poder suscribirnos a él y añadir más campos personalizados en el movimiento de reapertura de la incidencia.
local procedure OnBeforeInsertIncidentEntryWhenReopenIncident(var TempReopeningIncident: 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 reapertura que se genera automáticamente, y recibe como parámetros un registro temporal de la tabla IDPIMG Incident Header (la incidencia que se reabre), y el registro correspondiente al movimiento de reapertura.
En la codeunit IDPIMG Incident Management se lanza un evento, OnBeforeModifyIncidentHeaderWhenReopenIncident, en la función ReopenIncident, a la que se llama al reabrir una incidencia, tras la creación del movimiento de reapertura, para modificar el estado de la incidencia a abierta, de modo que podamos suscribirnos a él y modificar más campos personalizados en la cabecera de la incidencia.
local procedure OnBeforeModifyIncidentHeaderWhenReopenIncident(var TempReopeningIncident: 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 reabre), y la propia cabecera de la incidencia con el estado ya como abierta.
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 reabrir una incidencia (razón de reapertura, descripción, etc.), debe indicar la fecha y hora en la que se produjo la reapertura real de la incidencia, así como un nuevo check en la cabecera de incidencia (Reabierta), que debe quedar marcado automáticamente.
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 reabrir incidencias (IDPIMG Reopen 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 reapertura de la app, que registra la información de reapertura 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 reabre una incidencia, ésta vuelve a ser editable pero, el movimiento de reapertura, no lo es y no debería ser incoherente la información en uno y otro sitio.
tableextension 50104 "MYPRE Incident Entry" extends "IDPIMG Incident Entry"
{
fields
{
field(50102; "Reopening Date Time"; DateTime)
{
Caption = 'Date Time of the reopening';
DataClassification = CustomerContent;
}
}
}
tableextension 50102 "MYPRE Incident Header" extends "IDPIMG Incident Header"
{
fields
{
field(50106; "Reopening Code"; Code[10])
{
Caption = 'Reopening Reason Code';
TableRelation = "IDPIMG Incident Reopen Reason".Code;
Editable = false;
DataClassification = CustomerContent;
}
field(50107; Reopened; Boolean)
{
Caption = 'Reopened';
FieldClass = FlowField;
CalcFormula = exist("IDPIMG Incident Entry" where("Incident No." = field("No."),
Action = const(Reopen)));
}
}
}
Se extiende la página que se muestra al reabrir incidencias (IDPIMG Reopen Incident) añadiendo la nueva información que se quiere 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 reapertura 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 reapertura 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 porque causa error de no poder actualizar la página al estar en modo Lookup).
pageextension 50107 "MYPRE Reopen Incident" extends "IDPIMG Reopen Incident"
{
layout
{
addbefore("Reason Code")
{
group("MYPRE Reopening DateTime")
{
Caption = 'Reopening Date Time';
field(ReopeningDate; ReopeningDate)
{
ApplicationArea = All;
Caption = 'Reopening Date';
ToolTip = 'The real date when the incident was reopened.';
}
field(ReopeningTime; ReopeningTime)
{
ApplicationArea = All;
Caption = 'Reopening Time';
ToolTip = 'The real time when the incident was reopened.';
}
}
}
}
trigger OnOpenPage()
begin
ReopeningDate := Today();
ReopeningTime := Time();
end;
trigger OnClosePage()
begin
Rec."Reopening Date Time" := CreateDateTime(ReopeningDate, ReopeningTime);
end;
var
ReopeningDate: Date;
ReopeningTime: Time;
}
Debemos suscribirnos a dos eventos:
OnBeforeInsertIncidentEntryWhenReopenIncident de la página IDPIMG Reopen Incident, para traspasar el valor de los nuevos campos añadidos en la pantalla de reapertura de una incidencia al movimiento de reapertura 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 reabrirse la incidencia.
NotaEl Rec en la pantalla de IDPIMG Reopen Incident se corresponde con la incidencia que se reabre (copia temporal).
[EventSubscriber(ObjectType::Page, Page::"IDPIMG Reopen Incident", 'OnBeforeInsertIncidentEntryWhenReopenIncident', '', false, false)]
local procedure OnBeforeInsertIncidentEntryWhenReopenIncident(var TempReopeningIncident: Record "IDPIMG Incident Header"; var IncidentEntry: Record "IDPIMG Incident Entry")
begin
IncidentEntry.Validate("Reopening Date Time", TempReopeningIncident."Reopening Date Time");
end;
- OnBeforeModifyIncidentHeaderWhenReopenIncident de la codeunit IDPIMG Incident Management, para traspasar el valor de los nuevos campos añadidos en la pantalla de reapertura de una incidencia a la cabecera de la incidencia que se reabre, en el caso de querer añadir campos a esta cabecera para facilitar la explotación de la información de reapertura, aunque esté redundante porque realmente se guarda en el movimiento de reapertura.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPIMG Incident Management", 'OnBeforeModifyIncidentHeaderWhenReopenIncident', '', false, false)]
local procedure OnBeforeModifyIncidentHeaderWhenReopenIncident(var TempReopeningIncident: Record "IDPIMG Incident Header"; var IncidentHeader: Record "IDPIMG Incident Header")
begin
IncidentHeader.Validate("Reopening Date Time", TempReopeningIncident."Reopening Date Time");
end;