Zum Inhalt

Quellcodebasierte Speicherung von Dokumenten

Document Central kann mit Code erweitert werden, der das Hochladen von Dokumenten von einem BLOB zu Document Central über Code ermöglicht. Dieser Ansatz macht es möglich, automatisch einen Document Central Barcode zu generieren und hinzuzufügen, wenn ein Bericht gedruckt oder ein Dokument veröffentlicht oder konvertiert wird.

Die folgenden Anforderungen müssen erfüllt sein:

  • Das Document Central Modul muss lizenziert sein.
  • CORE muss in der Erweiterung als Referenz verfügbar sein.
  • Document Central muss in der Erweiterung als Referenz vorhanden sein.

Hinzufügen von eingehenden Dokumenten

Zum Hinzufügen von Dokumenten zur Eingangs-Liste können 2 Funktionen in der "SIM_DI Upload Mgt" verwendet werden: AddInboundDocumentFromExternal & AddInboundDocumentFromSilentUpload.

Wann welche Funktion verwendet werden soll

Szenario Zu verwendende Funktion
Ein Dokument wird automatisch generiert und hochgeladen während eines BC-Prozesses (z. B. Berichtsdruck, Dokumentenveröffentlichung, Dokumentenkonvertierung) AddInboundDocumentFromSilentUpload
Der Upload wird von einem externen System oder einer Integration ausgelöst (z. B. über API, von einer anderen Erweiterung, von Document Management) AddInboundDocumentFromExternal
Der Zieldatensatz darf zum Zeitpunkt des Uploads noch nicht festgeschrieben sein (z. B. während OnAfterInsert, während der Buchung) AddInboundDocumentFromSilentUpload
Der Zieldatensatz ist bereits vollständig festgeschrieben und die RecordId ist bekannt AddInboundDocumentFromExternal
Feldzuordnungs-/Zuweisungsmetadaten müssen als JSON übergeben werden AddInboundDocumentFromExternal
Eine spezifische Dokumentenbibliothek muss für das hochgeladene Dokument festgelegt werden AddInboundDocumentFromExternal
Der anfängliche Status (Offen / Ausstehend / Archiviert) muss explizit gesteuert werden AddInboundDocumentFromSilentUpload
Der Benutzer oder Prozess, der den Upload ausgelöst hat, sollte verfolgt werden (Ursprung) AddInboundDocumentFromSilentUpload

Zusammenfassung: Verwenden Sie AddInboundDocumentFromSilentUpload für automatisierte Hintergrund-Uploads, die aus Business Central stammen (z. B. ausgelöst durch Buchungen oder Druck). Verwenden Sie AddInboundDocumentFromExternal, wenn Sie von außerhalb von BC integrieren oder wenn eine metadatengetriebene Zuweisung oder ein Dokumentbibliothekscode erforderlich ist.


AddInboundDocumentFromSilentUpload

Var Name Datentyp Untertyp Länge Beschreibung
Nein Filename Text Der ursprüngliche Dateiname des Dokuments
Nein Base64File Text Die Datei als Base64-String
Nein InboundListCode Code 20 Code der Eingangs-Liste
Nein StatusCheckText Text Statusprüfung
Nein Recordref RecordRef Die Datenaufzeichnungsreferenz, zu der das Dokument hochgeladen werden muss.
Nein ParamContentTypeText Text Der Text des Content-Typs
Nein InfoTagText Text Infotag
Nein EnumSIMDIInboundDocSource Enum "SIM_DI Inbound Doc Source" Der Quellstatus
Nein OriginText Text Ursprungstext
Beispielcode anzeigen
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 'Alle Dateien (*.*)|*.*', Comment = '{Split=r''\|''}{Locked=s''1''}';
    DialogCaptionTxt: Label 'Wählen Sie die Upload-Datei';
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 Name Datentyp Untertyp Länge Beschreibung
Nein ParamFileNameText Text Der ursprüngliche Dateiname des Dokuments
Nein ParamBase64Text Text Die Datei als Base64-String
Nein ParamInboundListCode Code 20 Code der Eingangs-Liste, in die das Dokument eingefügt werden soll
Nein ParamMetadataJsonText Text Metadaten als JSON-String
Nein ParamRecordId RecordId Die Datensatz-ID, zu der das Dokument verknüpft werden muss
Nein ParamContentTypeText Text Der Text des Content-Typs
Nein ParamDocumentLibraryCode Code 20 Code der Dokumentenbibliothek
Nein ParamInfoTagText Text Ein Infotag
Nein ParamEnumSIMDIInboundDocSource Enum "SIM_DI Inbound Doc Source" Die Quelle des Dokuments
Beispielcode anzeigen
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 'Alle Dateien (*.*)|*.*', Comment = '{Split=r''\|''}{Locked=s''1''}';
    DialogCaptionTxt: Label 'Wählen Sie die Upload-Datei';
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); // Format oder andere Extraktionsmethoden

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

    UploadMgt.AddInboundDocumentFromExternal(
        Filename,                                       // ParamFileNameText
        Base64File,                                     // ParamBase64Text
        'INBOUND-LIST',                                 // ParamInboundListCode
        MetadataJsonText,                               // ParamMetadataJsonText - Kann auch ein leerer Text sein
        SalesHeader.RecordId(),                         // ParamRecordId - Notwendig, wenn die Zuweismethode die Record Id ist
        'INVOICE',                                      // ParamContentTypeText
        'DOC-LIB-SALESINV',                             // ParamDocumentLibraryCode
        '',                                             // ParamInfoTagText
        Enum::"SIM_DI Inbound Doc Source"::Upload       // ParamEnumSIMDIInboundDocSource
    );
end;