Saltar al contenido

Rellenar marcadores de posición de Document Dispatch con una codeunit propia

Utilice una codeunit propia para generar el valor de texto completo de un marcador de posición de Document Dispatch. La codeunit recibe el documento actual y puede devolver una combinación del número de factura, el nombre del cliente y sus propios cálculos. Document Dispatch inserta este texto en el marcador asignado de la plantilla de correo.

La asignación se realiza en el perfil de envío mediante Configuración del tipo de salida → Marcadores de posición de correo electrónico → Data Mapping Code. La asignación de datos de CORE seleccionada contiene una línea de tipo CODEUNIT que llama a su codeunit. Seleccione la asignación adecuada para cada marcador necesario, como %1 o %2, para definir su contenido. El siguiente ejemplo muestra la configuración completa para una factura de venta registrada.

Documento actual → asignación de datos de CORE (CODEUNIT) → codeunit propia → texto devuelto → marcador en la plantilla de correo.

Requisitos previos

  • Una extensión AL propia con una dependencia de CORE by Simova y sus símbolos.
  • Permisos para configurar las asignaciones de datos de CORE, ejecutar su codeunit y leer los registros utilizados.
  • Para el ejemplo de correo: Document Dispatch con una plantilla de correo y un perfil de envío para Sales Invoice Header (tabla 112, cabecera de factura de venta registrada).

1. Implementar la codeunit

Añada la siguiente codeunit a su extensión. Adapte el identificador y el nombre del objeto a su extensión y publíquela antes de seleccionar la codeunit en la asignación.

codeunit 50100 "My Placeholder Mapping"
{
    TableNo = "SIM_CORE Temp Table";

    trigger OnRun()
    var
        SalesInvoiceHeader: Record "Sales Invoice Header";
        SourceRecordRef: RecordRef;
        DocumentTextLbl: Label '%1 | %2', Locked = true;
        UnsupportedFunctionErr: Label 'Unsupported function: %1.', Comment = '%1 = Function name';
        MissingRecordErr: Label 'The source record could not be found.';
        WrongTableErr: Label 'This function requires a posted sales invoice.';
    begin
        Rec."Function List" := 'DOCUMENTTEXT';
        Clear(Rec."Dyn Mapping Return Value");

        if Rec.Param = '' then
            exit;

        if Rec.Param <> 'DOCUMENTTEXT' then
            Error(UnsupportedFunctionErr, Rec.Param);

        if not SourceRecordRef.Get(Rec.RecID) then
            Error(MissingRecordErr);
        if SourceRecordRef.Number <> Database::"Sales Invoice Header" then
            Error(WrongTableErr);
        SourceRecordRef.SetTable(SalesInvoiceHeader);
        SourceRecordRef.Close();

        Rec."Dyn Mapping Return Value" := CopyStr(
            StrSubstNo(DocumentTextLbl,
                SalesInvoiceHeader."No.",
                SalesInvoiceHeader."Bill-to Name"),
            1, MaxStrLen(Rec."Dyn Mapping Return Value"));
    end;
}

Para una factura registrada con el número INV-1001 y el nombre de facturación Contoso, el resultado es INV-1001 | Contoso. Su codeunit define el separador y la composición del texto.

CORE ejecuta la codeunit mediante el desencadenador OnRun con un búfer de la tabla SIM_CORE Temp Table:

Campo Uso
RecID Identificador del registro de origen actual, por ejemplo, la factura de venta registrada.
Param Valor de Execute Codeunit Param, aquí DOCUMENTTEXT (máximo 50 caracteres).
Company Nombre de la empresa actual, limitado a 30 caracteres. El ejemplo lee en la empresa actual.
Function List Nombres de funciones separados por comas para la selección del parámetro. Con un parámetro vacío, el ejemplo solo rellena esta lista.
Dyn Mapping Return Value Texto devuelto al marcador de posición, máximo 250 caracteres.

Escriba el resultado en Rec."Dyn Mapping Return Value". Esta salida de texto no requiere un registro de devolución ni un valor en el BLOB Return Value. El ejemplo utiliza CopyStr para recortar los resultados largos a la longitud del campo. Si admite otras tablas de origen, adapte el tratamiento y la validación del registro.

2. Configurar la asignación de datos de CORE

  1. Busque CORE - Data Mappings y seleccione Nuevo.
  2. Introduzca DOC-TEXT en Código y una Descripción significativa.
  3. Establezca la tabla inicial (Starting Table) de la ficha en Sales Invoice Header (112).
  4. Añada exactamente una línea de asignación y seleccione primero Tipo CODEUNIT.
  5. Rellene la línea como se indica a continuación. Los nombres de los campos corresponden al cliente en inglés.
Campo de la línea de asignación Valor
Type CODEUNIT
Starting Table Sales Invoice Header (112)
Execute Codeunit 50100 (o su propio identificador de objeto)
Execute Codeunit Param DOCUMENTTEXT

Introduzca DOCUMENTTEXT directamente o selecciónelo mediante la búsqueda del parámetro. Esta búsqueda ejecuta la codeunit con un parámetro vacío y lee Function List. Por eso, el ejemplo procesa esta llamada sin leer un registro de origen.

Deje vacíos Source Table, Source Field, Starting Field y Field Filter para este ejemplo. No añada líneas RETURN, RETURNFIELD ni CODEUNITRECORD: esta asignación devuelve el texto directamente mediante la codeunit. Utilice la misma tabla inicial en la línea y en la ficha para que Test Data Mapping pueda ofrecer registros de la tabla correcta.

3. Asignar la asignación de datos a un marcador de posición

  1. Abra el perfil de envío de Document Dispatch para facturas de venta registradas y su configuración del tipo de salida.
  2. Seleccione Marcadores de posición de correo electrónico (Email Placeholders) y seleccione o cree un marcador, por ejemplo %1.
  3. Seleccione DOC-TEXT en Data Mapping Code. Deje Campo vacío y Rellenar con saludo de BC (Fill with BC Salutation) desactivado para este marcador.
  4. Utilice %1 en la plantilla de correo asignada, por ejemplo Documento: %1.

Al resolver el marcador, CORE pasa el registro actual a la codeunit y utiliza el texto devuelto. El texto de la plantilla del ejemplo se convierte en Documento: INV-1001 | Contoso.

4. Comprobar el resultado

  1. En la ficha de asignación, seleccione Test Data Mapping y una factura de venta registrada. Compare el texto mostrado con su número y nombre de facturación.
  2. Prepare un correo mediante el perfil de Document Dispatch configurado y compruebe el marcador resuelto en el cuerpo antes de enviarlo.
  3. Repita el proceso con otra factura para verificar que el valor procede del documento actual.

Si el valor está vacío, compruebe el código de asignación seleccionado, Tipo, identificador de codeunit, parámetro y la asignación a Dyn Mapping Return Value. Si no aparece la selección de registros durante la prueba, compruebe Starting Table en la línea de asignación. Si se produce un error, compruebe también la tabla de origen y los permisos para ejecutar la codeunit y leer el registro. Acorte el resultado si supera los 250 caracteres; el asunto del correo tiene además un límite de longitud total.

Documentación relacionada