Personalizar el nº de serie de las incidencias
La aplicación cuenta con eventos para personalizar el nº de serie a utilizar al crear las incidencias.
Incidencias manuales
Al crear una incidencia de forma manual, por omisión, se numera usando la serie especificada en la configuración de iDynamics Incident Management; No obstante, puede seleccionar otra serie de las definidas en el sistema a través del AssistEdit (3 puntos a la derecha del nº).
Si quisiera modificar el comportamiento del AssistEdit, puede utilizar el evento OnBeforeAssistEdit, lanzado por la tabla IDPIMG Incident Header
local procedure OnBeforeAssistEdit(var IncidentHeader: Record "IDPIMG Incident Header"; OldIncidentHeader: Record "IDPIMG Incident Header"; var IsHandled: Boolean; var Result: Boolean)
El evento se lanza al principio de la función, recibiendo como parámetros:
- IncidentHeader: cabecera de la incidencia con el nº ya modificado por el que se suscribe al evento.
- OldIncidentHeader: cabecera de la incidencia tal y como está antes de pinchar en los 3 puntos para modificar el n de serie a utilizar para numerar la incidencia.
- IsHandled: hay que ponerlo a verdadero para indicar que se ha personalizado (si nos hemos suscrito al evento y hemos modificado el nº) y no queremos que se ejecute el código que hay por defecto.
Incidencias creadas desde los documentos
Cuando una incidencia es reportada desde un documento, el usuario no tiene la posibilidad de cambiar la serie a aplicar. Si quisiera usar una serie distinta a la especificada en la configuración de iDynamics Incident Management, tiene disponible el evento OnBeforeGetNoSeriesCode, lanzado por la tabla la tabla IDPIMG Incident Header.
local procedure OnBeforeGetNoSeriesCode(var IncidentHeader: Record "IDPIMG Incident Header"; var NewNoSeriesCode: Code[20]; var Handled: Boolean)
El evento se lanza al principio de la función, recibiendo como parámetros:
- IncidentHeader: cabecera de la incidencia.
- NewSeriesCode: se debe devolver el nº de serie a utilizar para numerar la incidencia.
- Handled: hay que ponerlo a verdadero para indicar que se ha personalizado (si nos hemos suscrito al evento y hemos modificado el código de la serie) y no queremos que se ejecujte el código que hay por defecto.
A continuación, se muestra un ejemplo de personalización que consiste en aplicar una serie diferente para las incidencias que se creen desde los documentos de servicios. La serie para estos documentos de define añadiendo un campo personalizado en la configuración de iDynamics Incident Management.
- Se añade un campo en la configuración de iDynamics Incident Management (IDPIMG Incidents Setup) donde poder indicar la serie a utilizar para incidencias procedentes de documentos de servicios.
tableextension 50105 "MYPRE Incident Setup" extends "IDPIMG Incidents Setup"
{
fields
{
field(50100; "MYPRE Service Incident Nos."; Code[20])
{
Caption = 'Service Incident Nos.';
TableRelation = "No. Series".Code where("MYPRE Incident Series" = const(true));
DataClassification = CustomerContent;
}
}
}
pageextension 50108 "MYPRE Incident Setup" extends "IDPIMG Incidents Setup"
{
layout
{
modify("Incident Nos.")
{
Caption = 'Default Incident Nos.';
}
addlast(General)
{
field("MYPRE Service Incident Nos."; Rec."MYPRE Service Incident Nos.")
{
ApplicationArea = All;
ToolTip = 'The series that will be used for incidents generated from service documents.';
}
}
}
}
- Se personaliza la creación de incidencias desde los documentos origen para que, en el caso de que se generen desde documentos de servicio, rellenen el campo "No. Series" de la incidencia (campo de la app iDynamics Incident Management) con el nuevo campo creado en el punto anterior en la configuración de la app. (ejemplo hecho solo para pedidos de servicio).
// ***** PERSONALIZACIÓN PARA AÑADIR MÁS CAMPOS AL CREAR INCIDENCIAS AUTO
[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
case TempIncSourceDoc."Document Type" of
TempIncSourceDoc."Document Type"::"Service Order":
begin
if IncidentSetup.Get() then
if IncidentSetup."MYPRE Service Incident Nos." <> '' then
IncidentHeader.Validate("No. Series", IncidentSetup."MYPRE Service Incident Nos.");
end;
end;
end;
- Debemos suscribirnos al evento OnBeforeGetNoSeriesCode de la tabla IDPIMG Incident Header para que la incidencia se genere con el nº de serie deseado: el configurado para documentos de servicio si la incidencia procede de un documento de servicio o el nº de serie por defecto para el resto de los documentos.
// ***** PERSONALIZACIÓN Nº SERIE INCIDENCIAS UTILIZADO AL CREAR INCIDENCIAS AUTO *****
[EventSubscriber(ObjectType::Table, Database::"IDPIMG Incident Header", 'OnBeforeGetNoSeriesCode', '', false, false)]
local procedure OnBeforeGetNoSeriesCode(var IncidentHeader: Record "IDPIMG Incident Header";
var NewNoSeriesCode: Code[20]; var Handled: Boolean)
var
NoSeries: Record "No. Series";
NoSeriesLine: Record "No. Series Line";
begin
// Usar nº de serie diferente según el tipo doc. origen.
if IncidentHeader."No. Series" <> '' then begin
NewNoSeriesCode := IncidentHeader."No. Series";
Handled := true;
end;
end;
El campo No. Series de la tabla de cabecera de incidencia se rellena de forma automática al insertarse un registro si el nº está en blanco o al seleccionar una serie diferente con el AssistEdit pero, en ningún caso se muestra al usuario.
Para rellenarlo, se llama a una función local GetNoSeriesCode donde se ha creado el evento OnBeforeGetNoSeriesCode de modo que,
- Si alguien se ha suscrito y pone el Handled = True, devuelve la serie que hayan personalizado.
- En caso contrario, devuelve la serie especificada por defecto en configuración de iDynamics Incident Management.