Codeunit de preejecución
La Codeunit de preejecución proporciona un punto de intervención para ejecutar lógica personalizada de Business Central inmediatamente antes de que Business Portals lea y serialice una tabla de dataset. Esto permite preparar, sincronizar, validar o registrar información antes de devolver el dataset al portal.
La codeunit se configura por separado para cada tabla de dataset. Como este punto de intervención forma parte de la carga del dataset, se puede utilizar el mismo enfoque con listas de productos, proyectos, facturas y otras tablas de Business Central.
Resultado del ejemplo
El ejemplo escribe una entrada de información en el registro existente de Business Portals. No modifica los registros que muestra el dataset.
La entrada del registro incluye el código del dataset, el código y el tipo de la tabla de dataset, el nombre de usuario de DPS, la empresa y el parámetro seleccionado. Para verla en Business Central, busque Business Portals – Log.
Cada carga inicial o actualización del dataset puede crear otra entrada. La acción Clear History de la página del registro permite eliminar las entradas que ya no sean necesarias.
Info
El comportamiento de registro es una demostración sencilla. Sustituya el procedimiento WriteLogEntry por la lógica de preparación que requiera su implementación, como actualizar una tabla de preparación o sincronizar datos.
Ejemplo de código
codeunit 5138173 "SIM_DPS Sample Pre Execute CU"
{
// Una codeunit de preejecución debe utilizar "SIM_DPS Temp Table" para que DPS pueda pasar el contexto de ejecución en Rec.
TableNo = "SIM_DPS Temp Table";
trigger OnRun()
var
LocalParamText: Text;
begin
// DPS ejecuta la codeunit sin parámetros desde la búsqueda de configuración para solicitar sus funciones disponibles.
LocalParamText := 'GETFUNCTIONS';
// Durante la ejecución del dataset, Rec.Param contiene la función seleccionada en "Pre Execute Codeunit Param".
if (Rec.Param <> '') then
LocalParamText := Rec.Param;
// Dirige la solicitud de configuración o ejecución a la lógica correspondiente.
case LocalParamText of
'Write Log Entry':
WriteLogEntry(Rec);
'GETFUNCTIONS':
// "Function List" se muestra en la búsqueda. Separe varios nombres de función con comas.
Rec."Function List" := 'Write Log Entry';
end;
end;
// Escribe el contexto proporcionado por DPS en el registro existente de Business Portals.
local procedure WriteLogEntry(ParamRecordSIMDPSTempTable: Record "SIM_DPS Temp Table")
var
LocalCodeunitSIMDPSLogMgt: Codeunit "SIM_DPS Log Mgt";
LocalDescriptionLabelMsg: Label 'The pre-execute sample codeunit was executed. Dataset Code: %1; Dataset Table Code: %2; Dataset Table Type: %3; DPS Username: %4; Company: %5; Parameter: %6', Comment = '%1 = Dataset Code, %2 = Dataset Table Code, %3 = Dataset Table Type, %4 = DPS Username, %5 = Company, %6 = Pre Execute Codeunit Parameter';
LocalSourceLabelMsg: Label 'Sample Pre Execute Codeunit';
begin
// Añade una entrada de información que los usuarios pueden consultar en la página "Business Portals - Log".
LocalCodeunitSIMDPSLogMgt.AddInformationInTheLog(
// Sustituye los marcadores de posición de la etiqueta por los valores recibidos del proceso de serialización.
StrSubstNo(
LocalDescriptionLabelMsg,
ParamRecordSIMDPSTempTable."Dataset Code",
ParamRecordSIMDPSTempTable."Dataset Table Code",
ParamRecordSIMDPSTempTable."Dataset Table Type",
ParamRecordSIMDPSTempTable.Username,
ParamRecordSIMDPSTempTable.Company,
ParamRecordSIMDPSTempTable.Param),
LocalSourceLabelMsg);
end;
}