Beschreibung

Erstellt einen Eintrag in der ECM-Warteschlange mit der übergebenen Datei. (Die Datei wird als BOLB-Feld in der TempECMJnlLine übergeben)


Syntax

AL
[ErrorCode:= ] SaveFileRequest(var TempECMJnlLine: Record "ECM Document Journal Line"; var ECMDocDef: Record "ECM Document Definition"; MainRecordVariant: Variant; var TempMetadataFieldValue: Record "ECM Metadata Field Value"; var TransactionNo: BigInteger)


Parameters

Variable: TempECMJnlLine

Typ: Record "ECM Document Journal Line" temporär

Wird als Datenobjekt ("Container") verwendet, um Daten an eine Funktion zu übergeben, für alle Felder, die in den Dokumentposten gefüllt werden müssen. Standardmäßig werden die Dokumentposten mit Hilfe des MainRecord und der Dokumentdefinition gefüllt.

Filename, BLOB und MD5 Hash sind Pflichtangaben

Optional können z.B.  "Externe Belegnummer" , "Dokumentenkategorie" und weiter Felder in den Datenkontainer übergeben werden.


Variable: ECMDocDef

Typ: Record "ECM Document Definition"

ECM Dokumentendefinition für den Datensatz. Die richtige Dokumentdefinition für den Datensatz wird mit dem API-Funktion FindDocDefByRRef gesucht.

Dem Datensatz der Dokumentdefinition können bei Bedarf abweichende Werte übergeben werden z.B. "Dokumentenkategorie".


MainRecordVariant

Typ: Variant

MainRecord (Datensatz) wird in die ECM Warteschlange eingetragen und für die Verarbeitung der Metadaten benötigt.

Tipp: Der MainRecord kann als Record, RecordID oder RecordRef übergeben werden.


Variable: TempMetadataFieldValue

Typ: Record "ECM Metadata Field Value" temporär

Wird als Datenobjekt ("Container") verwendet, um Daten an eine Funktion zu übergeben, für alle Felder, die als Metadaten an das Archiv (Repository) übergeben werden. Standardmäßig reicht es aus, die Tabelle leer zu übergeben, da die Metadaten mit Hilfe des MainRecord und der Dokumentdefinition vorbereitet werden. Alternativ können die gewünschten abweichenden oder zusätzlichen Metadaten hier vorbereitet werden.


Variable: TransactionNo

Typ: BigInteger

ECM Warteschlangen-Transaktionsnr., die zurückgegeben wird.

Mit der Transaktionsnummer und der Funktion ReleaseECMRepositoryRequest wird der ECM Warteschlangeneintrag für die weitere Verarbeitung freigegeben.



Rückgabewert:

ErrorCode

Typ: Integer

ErrorCode = 0 und TransactionNo <> 0, wenn der Vorgang erfolgreich war.

Mit der Funktion ShowMessage können die ErrorCodes angezeigt werden und mit der Funktion WriteLog können diese mitprotokoliert werden.



Bemerkungen:

Dies wird für das Ablagekonzept 2 verwendet. Interne Belege


Beispiel:

Dokumente per Code ablegen

AL
/// <summary>
/// StoreDocument2ECMQueue.
/// </summary>
/// <param name="MainRecordVariant">Variant.</param>
/// <param name="TempBlob">Codeunit "Temp Blob".</param>
/// <param name="FileName">Text[250].</param>
local procedure StoreDocument2ECMQueue(MainRecordVariant: Variant; TempBlob: Codeunit "Temp Blob"; FileName: Text[250])
var
ECMDocDef: Record "ECM Document Definition";
TempECMJnlLine: Record "ECM Document Journal Line" temporary;
TempMetadataFieldValue: Record "ECM Metadata Field Value" temporary;
ECMapi: Codeunit "ECM API";
NVOutStream: OutStream;
NVInStream: InStream;
TransactionNo: BigInteger;
ErrorCode: Integer;
begin
// https://docs.easy-cloud.de/365BC-cloud/de-DE/118033789.html
// Sucht eine ECM Dokumentdefinition anhand der Tabellennummer, Tabellenbelegart und einem Startdatum (Gültigkeitsdatum) einer Dokumentdefinition (in der jüngsten Vergangenheit).
if ECMapi.FindDocDefByRRef(ECMDocDef, MainRecordVariant, ECMDocDef."Purpose of use"::"Assign & File") then begin
if TempBlob.HasValue() then begin
 
// Trägt die Datei von einem Blob in eine temporary "ECM Document Journal Line"
TempECMJnlLine."Line No." := 10000;
 
TempECMJnlLine.Reset();
TempECMJnlLine.DeleteAll();
Clear(TempECMJnlLine);
 
TempECMJnlLine.File.CreateOutStream(NVOutStream);
TempBlob.CreateInStream(NVInStream);
CopyStream(NVOutStream, NVInStream);
TempECMJnlLine."File Name" := FileName; // Dieser Wert für den Dateinamen kann von der Dokumentdefinition überschrieben werden.    
// ECMDocDef."File Name Suggestion" := FileName; // Mit dieser optionalen Zeile kann der Wert für den Dateinamen nicht mehr von der Dokumentdefinition überschrieben werden.
 
// Generate MD5 Hash
TempECMJnlLine.GenerateMD5Hash();
// optional Fehlerhandling
IF TempECMJnlLine.md5 = '' THEN
ECMApi.WriteLog('', '', 75, Enum::"ECM Message Type"::Warning, MainRecordVariant, 0, 0);
 
TempECMJnlLine.Insert();
 
// https://docs.easy-cloud.de/365BC-cloud/de-DE/118035412.html
// Erstellt einen Eintrag in der ECM-Warteschlange mit der übergebenen Datei. (Die Datei wird als BOLB-Feld in der TempECMJnlLine übergeben)
ErrorCode := ECMapi.SaveFileRequest(TempECMJnlLine, TempMetadataFieldValue, ECMDocDef, MainRecordVariant, TransactionNo);
if ErrorCode <> 0 then
ECMApi.WriteLog('', '', ErrorCode, Enum::"ECM Message Type"::Error, MainRecordVariant, 0, TransactionNo)
else
if TransactionNo <> 0 then
// https://docs.easy-cloud.de/365BC-cloud/de-DE/118033732.html
//Setzt den Status eines Eintrages in der ECM Warteschlange von begonnen auf anstehend.
ECMapi.ReleaseECMRepositoryRequest(TransactionNo);
end;
end;
end;