Saltar al contenido

Codeunit de asignación dinámica de ejemplo

La codeunit 5138174 "SIM_DPS Sample Dyn. Mapping CU" muestra cómo la lógica AL personalizada puede proporcionar un valor a una asignación de datos de Simova CORE utilizada por Business Portals.

Utiliza SIM_CORE Temp Table como tabla de origen. El motor pasa el contexto por este registro temporal, ejecuta la función seleccionada y consume Dyn Mapping Return Value.

Cuándo utilizar una codeunit de asignación

Una línea normal obtiene un valor de un campo, constante, filtro o función predefinida. Utilice CODEUNIT cuando se necesite lógica AL para combinar registros, calcular o formatear valores, resolver valores no expresables mediante líneas estándar o devolver estados específicos del portal.

Consulte Crear asignaciones de datos.

Descubrimiento y distribución

Durante el lookup del parámetro, Rec.Param está vacío. OnRun utiliza GETFUNCTIONS y devuelve Execute en Rec."Function List".

AL
'GETFUNCTIONS':
    Rec."Function List" := 'Execute';

Durante la ejecución, CORE copia Execute Codeunit Param en Rec.Param. El ejemplo distribuye Execute al procedimiento público Execute. Las funciones adicionales deben añadirse a Function List y a case.

Contexto de ejecución

Campo Finalidad
RecID Identifica el registro de origen.
Company Identifica la empresa de Business Central.
Param Contiene el nombre de función, como Execute.
Function List Devuelve las funciones disponibles durante la configuración.
Dyn Mapping Return Value Devuelve el resultado como texto.

El campo de retorno es Text[250]; convierta otros tipos a una representación de texto adecuada.

Comportamiento del ejemplo

El ejemplo devuelve THIS RETURN WILL BE SHOWN ON PAGE, lo que únicamente confirma la llamada y la ruta de retorno.

AL
ParamRecordSIMCORETempTable."Dyn Mapping Return Value" := 'THIS RETURN WILL BE SHOWN ON PAGE';

LocalRecordId nunca se asigna antes de LocalRecordRef.Get(LocalRecordId), por lo que no se carga el registro del contexto. Una implementación real debe utilizar ParamRecordSIMCORETempTable.RecID, opcionalmente ParamRecordSIMCORETempTable.Company, validar la tabla y calcular el valor.

Configuración

  1. Abra CORE Data Mapping y cree o abra la asignación utilizada por Business Portals.
  2. Añada una línea y establezca Type en CODEUNIT.
  3. Establezca Execute Codeunit en 5138174 o en la copia personalizada.
  4. Abra Execute Codeunit Param y seleccione Execute.
  5. Asigne el código al campo, field mapping, marcador u otra configuración correspondiente.
  6. Pruebe registros y empresas representativos.

La codeunit debe estar incluida en los conjuntos de permisos del usuario o cuenta de servicio. El ejemplo estándar ya está incluido en los permisos de Business Portals.

Consideraciones de implementación

  • Mantenga TableNo = "SIM_CORE Temp Table".
  • CORE transmite el contexto de asignación mediante Rec.
  • Lea el identificador de Rec.RecID, no de una RecordId local sin inicializar.
  • Respete Rec.Company y utilice RecordRef.Open con la empresa necesaria.
  • Compruebe RecID.TableNo, los registros ausentes y el límite de 250 caracteres.
  • Formatee los valores de manera uniforme.
  • Evite llamadas a interfaz, confirmaciones y páginas.
  • Conceda solo los permisos de lectura necesarios.

Código de ejemplo completo

AL
codeunit 5138174 "SIM_DPS Sample Dyn. Mapping CU"
{
    TableNo = "SIM_CORE Temp Table";

    trigger OnRun()
    var
        LocalParamText: Text;
    begin
        LocalParamText := 'GETFUNCTIONS';

        if (Rec.Param <> '') then
            LocalParamText := Rec.Param;

        case LocalParamText of
            'Execute':
                Execute(Rec);

            'GETFUNCTIONS':
                Rec."Function List" := 'Execute';
        end;
    end;

    procedure Execute(var ParamRecordSIMCORETempTable: Record "SIM_CORE Temp Table")
    var
        LocalRecordRef: RecordRef;
        LocalRecordId: RecordId;
    begin
        if LocalRecordRef.Get(LocalRecordId) then;

        ParamRecordSIMCORETempTable."Dyn Mapping Return Value" := 'THIS RETURN WILL BE SHOWN ON PAGE';
    end;
}