Personalizar la creación de incidencias
La aplicación cuenta con eventos para personalizar la creación de incidencias.
Cabecera de incidencias creadas desde documentos
A continuación se explica cómo añadir campos (personalizados) en la cabecera de las incidencias reportadas desde los documentos origen.
El evento OnBeforeCreateIncidentHeaderFromSource, lanzado por la página IDPIMG Create Incident al reportar una incidencia desde un documento, permite por ejemplo añadir campos personalizados a la cabecera de la incidencia y rellenarlos.
local procedure OnBeforeCreateIncidentHeaderFromSource(var TempIncSourceDoc: Record "IDPIMG Inc. Source Doc." temporary; var IncidentHeader: Record "IDPIMG Incident Header")
El evento se lanza justo antes de insertarse la cabecera de la nueva incidencia que se crea, y recibe como parámetro un registro temporal de la tabla "IDPIMG Inc. Source Doc.", que identifica el documento origen y el registro correspondiente a la cabecera de la incidencia que se va a crear.
A continuación, se muestra un ejemplo de personalización usando este evento, donde el usuario, además de los datos que pide la app por defecto al reportar una incidencia desde documento origen (descripción, fecha/hora, categoría, tipo, etc.), debe indicar la ciudad en la que se produjo la incidencia y, adicionalmente, debe rellenarse automáticamente el nº de cliente del documento origen, en caso de que haya uno.
- Se tendrán que añadir los campos que se desee tanto en la tabla IDPIMG Incident Header, como, opcionalmente, en la tabla IDPIMG Inc. Source Doc., que es la tabla en la que se basa la página de creación de incidencia desde documento origen. Se trata de una tabla temporal donde los únicos campos que hay son los que identifican al documento origen (Document Type, Document No. y “Service Item Line No.” y “Service Item No.”, para el caso de los documentos de servicio con dos niveles). En el ejemplo, se añade el campo “Incident City”.
tableextension 50103 "MYPRE Inc. Source Doc." extends "IDPIMG Inc. Source Doc."
{
fields
{
field(50108; "Incident City"; Text[250])
{
Caption = 'Incident City';
DataClassification = CustomerContent;
}
}
}
tableextension 50102 "MYPRE Incident Header" extends "IDPIMG Incident Header"
{
fields
{
field(50100; "MYPRE Customer No."; Code[20])
{
Caption = 'Customer No.';
TableRelation = Customer."No.";
DataClassification = CustomerContent;
}
field(50108; "Incident City"; Text[250])
{
Caption = 'Incident City';
DataClassification = CustomerContent;
}
}
}
Se tendrá que hacer una PageExtension de la página que se muestra al crearse incidencias desde documentos origen, IDPIMG Create Incident, que se basa en la tabla "IDPIMG Inc. Source Doc.", temporal, añadiendo los nuevos campos de la tabla "IDPIMG Inc. Source Doc.", si es que los hay.
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 creación de incidencias. 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 encontrarse en modo Lookup).
pageextension 50102 "MYPRE Create Incident" extends "IDPIMG Create Incident"
{
layout
{
addlast("New Incident Details")
{
field("Incident City"; IncidentCity)
{
ApplicationArea = All;
MultiLine = true;
ToolTip = 'Specify the city in which the incident occurred.';
}
}
}
trigger OnClosePage()
begin
Rec."Incident City" := IncidentCity;
end;
var
IncidentCity: Text[250];
}
Debemos suscribirnos al evento OnBeforeCreateIncidentHeaderFromSource de la página IDPIMG Create Incident, para traspasar el valor de las nuevas columnas añadidas en la pantalla de creación de una incidencia a la cabecera de la incidencia que se crea, o para rellenar nuevos campos en la cabecera de la incidencia a partir de los documentos origen. En el ejemplo, se añade el campo “Incident City”, que debe rellenar el usuario y se rellena también el campo Nº cliente, que también se ha añadido a la cabecera de las incidencias, a partir del documento origen de la incidencia, es decir, no tiene que rellenarlo el usuario en la pantalla de creación de incidencia desde doc. origen. Se ha puesto un ejemplo en el case con solo un tipo, pero, obviamente, se deben añadir todos los tipos desde donde deba rellenarse el cliente. También se podría lanzar error si algún nuevo campo debe estar relleno y no lo está antes de crearse la incidencia.
NotaEl Rec en la pantalla de IDPIMG Create Incident tiene indicados los campos que identifican al documento origen, "Document Type" y "Document No.", así como el "Service Item Line No." y "Service Item No.", por lo que pueden recuperarse valores del documento origen (mediante un case de todos los posibles tipos origen de incidencias) que pasen directamente desde el documento origen a la cabecera de incidencia, sin necesidad de añadir ninguno en la tabla IDPIMG Inc. Source Doc.
// ***** PERSONALIZACIÓN PARA AÑADIR MÁS CAMPOS AL CREAR INCIDENCIAS
[EventSubscriber(ObjectType::Page, Page::"IDPIMG Create Incident", 'OnBeforeCreateIncidentHeaderFromSource', '', false, false)]
local procedure OnBeforeCreateIncidentHeaderFromSource(var TempIncSourceDoc: Record "IDPIMG Inc. Source Doc.";
var IncidentHeader: Record "IDPIMG Incident Header")
var
ServiceHeader: Record "Service Header";
IncidentSetup: Record "IDPIMG Incidents Setup";
begin
// Campos que debe rellenar el usuario.
if TempIncSourceDoc."Incident City" <> '' then
IncidentHeader.Validate("Incident City", TempIncSourceDoc."Incident City");
case TempIncSourceDoc."Document Type" of
TempIncSourceDoc."Document Type"::"Service Order":
begin
// Campos que provienen del documento origen.
if ServiceHeader.Get(ServiceHeader."Document Type"::Order, TempIncSourceDoc."Document No.") then
IncidentHeader.Validate("MYPRE Customer No.", ServiceHeader."Customer No.");
end;
end;
end;
Líneas de incidencia
Las líneas de una incidencia, además de los campos que identifican la línea del documento origen (tipo y nº documento, nº línea documento, nº sublínea documento), tienen una serie de campos que permiten identificar rápidamente los conceptos clave sin tener que navegar al documento origen (producto, cliente, proveedor, vendedor, transportista). Estos campos se rellenan automáticamente en el OnValidate del campo Nº línea documento (o Nº sublínea documento para líneas de servicio), tanto al insertarse líneas desde la ficha de una incidencia, como cuando se insertan automáticamente al reportar inciencias desde documentos origen.
Por ello, sin necesidad de ningún evento adicional, si se desean añadir más campos en las líneas de incidencia a partir de las líneas del documento origen, solo hay que suscribirse al OnAfterValidate del campo Nº línea documento (o Nº sublínea documento para líneas de servicio).
A continuación, se muestra un ejemplo de personalización usando este evento donde, además de los datos que se rellenan automáticamente al insertarse una línea del documento origen, debe rellenarse la cantidad.
tableextension 50100 "MYPRE Incident Line" extends "IDPIMG Incident Line"
{
fields
{
modify("Document Line No.")
{
trigger OnAfterValidate()
var
ServiceLine: Record "Service Line";
begin
// ***** PERSONALIZACIÓN PARA AÑADIR MÁS CAMPOS AL CREAR LÍNEAS DE INCIDENCIAS *****
case Rec."Document Type" of
Rec."Document Type"::"Service Invoice":
if ServiceLine.Get(ServiceLine."Document Type"::Invoice, Rec."Document No.", Rec."Document Line No.") then
Rec."MYPRE Quantity" := ServiceLine.Quantity;
end;
end;
}
field(50100; "MYPRE Quantity"; Decimal)
{
Caption = 'Quantity';
DataClassification = CustomerContent;
}
}
}