Saltar al contenido

Almacenamiento de documentos basado en código fuente

Document Central se puede extender con código que permite cargar documentos desde un BLOB a Document Central a través de código. Este enfoque hace posible generar y agregar automáticamente un código de barras de Document Central cuando se imprime un informe o cuando se publica o convierte un documento.

Los siguientes requisitos deben cumplirse:

  • El módulo Document Central debe estar licenciado.
  • CORE debe estar disponible en la extensión como referencia.
  • Document Central debe estar presente en la extensión como referencia.

Agregar Documentos Entrantes

Para agregar documentos a la lista de Entrantes, se pueden usar 2 funciones en "SIM_DI Upload Mgt": AddInboundDocumentFromExternal y AddInboundDocumentFromSilentUpload.

Cuándo usar qué función

Escenario Función a usar
Un documento se genera y se carga automáticamente durante un proceso de BC (por ejemplo, impresión de informes, publicación de documentos, conversión de documentos) AddInboundDocumentFromSilentUpload
La carga se activa desde un sistema o integración externa (por ejemplo, a través de API, desde otra extensión, desde Gestión de Documentos) AddInboundDocumentFromExternal
El registro objetivo puede no estar aún comprometido en la base de datos en el momento de la carga (por ejemplo, durante OnAfterInsert, durante la publicación) AddInboundDocumentFromSilentUpload
El registro objetivo ya está completamente comprometido y se conoce el RecordId AddInboundDocumentFromExternal
Se necesita pasar la asignación de campos / metadatos como JSON AddInboundDocumentFromExternal
Se debe establecer una Biblioteca de Documentos específica para el documento cargado AddInboundDocumentFromExternal
El estado inicial (Abierto / Pendiente / Archivado) debe controlarse explícitamente AddInboundDocumentFromSilentUpload
Se debe rastrear el usuario o proceso que activó la carga (Origen) AddInboundDocumentFromSilentUpload

Resumen: Use AddInboundDocumentFromSilentUpload para cargas automáticas en segundo plano que se originan desde dentro de Business Central (por ejemplo, activadas por publicación o impresión). Use AddInboundDocumentFromExternal al integrar desde fuera de BC o cuando se requiere una asignación impulsada por metadatos o un código de Biblioteca de Documentos.


AddInboundDocumentFromSilentUpload

Var Nombre Tipo de Datos Subtipo Longitud Descripción
No Filename Texto El nombre de archivo original del documento
No Base64File Texto El archivo como una cadena base64
No InboundListCode Código 20 Código de la lista de Entrantes
No StatusCheckText Texto Verificación de estado
No Recordref RecordRef La referencia del registro de datos al que debe cargarse el documento.
No ParamContentTypeText Texto El texto del tipo de contenido
No InfoTagText Texto Etiqueta de información
No EnumSIMDIInboundDocSource Enum "SIM_DI Inbound Doc Source" El estado de origen
No OriginText Texto Texto de origen
Mostrar código de ejemplo
AL
var
    SalesHeader: Record "Sales Header";
    UploadMgt: Codeunit "SIM_DI Upload Mgt";
    FileManagement: Codeunit "File Management";
    Base64Convert: Codeunit "Base64 Convert";
    TempBlob: Codeunit "Temp Blob";
    RecordReference: RecordRef;
    InStr: InStream;
    Filename: Text;
    Base64File: Text;
    AllFilesFilterTxt: Label '*.*', Locked = true;
    AllFilesDescriptionTxt: Label 'All Files (*.*)|*.*', Comment = '{Split=r''\|''}{Locked=s''1''}';
    DialogCaptionTxt: Label 'Choose Upload File';
begin
    Filename := FileManagement.BLOBImportWithFilter(TempBlob, DialogCaptionTxt, '', AllFilesDescriptionTxt, AllFilesFilterTxt);
    Filename := FileManagement.GetFileName(Filename);
    if Filename = '' then exit;

    Clear(InStr);
    TempBlob.CreateInStream(InStr);
    Base64File := Base64Convert.ToBase64(InStr);

    SalesHeader.Reset();
    SalesHeader.FindFirst();
    RecordReference.GetTable(SalesHeader);

    UploadMgt.AddInboundDocumentFromSilentUpload(
        Filename,                                       // ParamFileNameText
        Base64File,                                     // ParamBase64Text
        'INBOUND-LIST',                                 // ParamInboundListCode
        '',                                             // ParamStatusCheckText
        RecordReference,                                // ParamRecordRef
        'INVOICE',                                      // ParamContentTypeText
        '',                                             // ParamInfoTagText
        Enum::"SIM_DI Inbound Doc Source"::Upload,      // ParamEnumSIMDIInboundDocSource
        UserId()                                        // ParamOriginText
    );
end;

AddInboundDocumentFromExternal

Var Nombre Tipo de Datos Subtipo Longitud Descripción
No ParamFileNameText Texto El nombre de archivo original del documento
No ParamBase64Text Texto El archivo como una cadena base64
No ParamInboundListCode Código 20 Código de la lista de Entrantes a la que se debe insertar el Documento
No ParamMetadataJsonText Texto Metadatos como una cadena JSON
No ParamRecordId RecordId El ID del registro al que debe vincularse el documento
No ParamContentTypeText Texto El texto del tipo de contenido
No ParamDocumentLibraryCode Código 20 Código de la Biblioteca de Documentos
No ParamInfoTagText Texto Una etiqueta de información
No ParamEnumSIMDIInboundDocSource Enum "SIM_DI Inbound Doc Source" La fuente del Documento
Mostrar código de ejemplo
AL
var
    SalesHeader: Record "Purchase Header";
    UploadMgt: Codeunit "SIM_DI Upload Mgt";
    FileManagement: Codeunit "File Management";
    Base64Convert: Codeunit "Base64 Convert";
    TempBlob: Codeunit "Temp Blob";
    InStr: InStream;
    Filename: Text;
    Base64File: Text;
    MetadataJsonText: Text;
    MetadataJsonObject: JsonObject;
    AllFilesFilterTxt: Label '*.*', Locked = true;
    AllFilesDescriptionTxt: Label 'All Files (*.*)|*.*', Comment = '{Split=r''\|''}{Locked=s''1''}';
    DialogCaptionTxt: Label 'Choose Upload File';
begin
    Filename := FileManagement.BLOBImportWithFilter(TempBlob, DialogCaptionTxt, '', AllFilesDescriptionTxt, AllFilesFilterTxt);
    Filename := FileManagement.GetFileName(Filename);
    if Filename = '' then exit;

    Clear(InStr);
    TempBlob.CreateInStream(InStr);
    Base64File := Base64Convert.ToBase64(InStr);

    MetadataJsonObject.Add('dmssalesinvoiceno', 'PI-10000');
    MetadataJsonObject.Add('dmscustomerno', 'Adatum Corporation');
    MetadataJsonText := Format(MetadataJsonObject); // Formato u otros métodos de extracción

    SalesHeader.Get(SalesHeader."Document Type"::Invoice, 'PI-10000');

    UploadMgt.AddInboundDocumentFromExternal(
        Filename,                                       // ParamFileNameText
        Base64File,                                     // ParamBase64Text
        'INBOUND-LIST',                                 // ParamInboundListCode
        MetadataJsonText,                               // ParamMetadataJsonText - También puede ser un texto vacío
        SalesHeader.RecordId(),                         // ParamRecordId - Necesario si el método de asignación es el ID del registro
        'INVOICE',                                      // ParamContentTypeText
        'DOC-LIB-SALESINV',                             // ParamDocumentLibraryCode
        '',                                             // ParamInfoTagText
        Enum::"SIM_DI Inbound Doc Source"::Upload       // ParamEnumSIMDIInboundDocSource
    );
end;