| Docs Hilfe
  AppSource  
Docs  /  NAVAX Extension Base  /  Informationen für Entwickler

 Dropzone


2024/08/06 • 4 Min. Lesedauer
Eine NAVAX Dropzone kann sehr einfach in eine Page integriert werden. Jede hinzugefügte Dropzone wird dabei über eine eindeutige ID angesprochen bzw. identifiziert.

Hinweis

NAVAX Dropzones sind für Upload-Größen bis zu 15000 KB (15 MB) geeignet.
Das nachfolgende Beispiel zeigt, wie eine neue Dropzone hinzugefügt werden kann.

Szenario

  • Auf der Debitorenliste (Page 22 "Customer List") soll eine Dropzone bereitgestellt werden, mit der Beleganhänge per Drag & Drop hinzugefügt werden können:

    Hinweis

    Dieses Beispiel dient nur zur Veranschaulichung der einfachsten Implementierung. Für Beleganhänge wird empfohlen die NAVAX App NAVAX Drag & Drop Beleganhänge (Drag & Drop Document Attachments) zu verwenden. Diese App basiert ebenfalls auf der NAVAX Dropzone, integriert diese aber direkt in die Beleganhang-FactBox. Weitere Informationen dazu finden Sie unter [Docs] NAVAX Drag & Drop Beleganhänge - Allgemein

Implementierung

  1. enumextension Eine NAVAX Dropzone löst bei einem erfolgreichen "Drag & Drop" das OnAfterUpload-Event aus. Der Parameter NCEXDropzoneID des Events gibt dabei an, welche Dropzone das Event ausgelöst hat. Für jede neue Dropzone muss eine eigene NCEXDropzoneID definiert werden, damit diese im Event auch eindeutig identifiziert werden kann. Eine neue NCEXDropzoneID wird über eine enumextension hinzugefügt bzw. angelegt:
    enumextension 50000 "NVXTEST NCEX Dropzone ID" extends "NCEX Dropzone ID"
    {
        value(50000; "NVXTEST Customer")
        {
            Caption = 'NVXTEST Customer', Comment = 'DEU="NVXTEST Debitor"';
        }
    }
    Durch diese Enum-Erweiterung hat der Kunde später auf der Seite NAVAX Dropzone-Einrichtung auch die Möglichkeit, die Einstellungen und Vorgaben für die neue Dropzone einzurichten:
  2. Dropzone hinzufügen Die neue Dropzone kann danach z.B. als FactBox zur Debitorenliste hinzugefügt werden:
    pageextension 50000 "NVXTEST Customer List" extends "Customer List"
    {
        layout
        {
            addfirst(factboxes)
            {
                part(NVXTESTDropzone; "NCEX Dropzone")
                {
                    ApplicationArea = All;
                    Visible = true;
                }
            }
        }
    
        trigger OnOpenPage()
        begin
            CurrPage.NVXTESTDropzone.Page.SetDropzoneID("NCEX Dropzone ID"::"NVXTEST Customer");
        end;
    
        trigger OnAfterGetCurrRecord()
        begin
            CurrPage.NVXTESTDropzone.Page.SetCurrRecord(Rec);
        end;
    }

    Hinweis

    Dieser Block:
    trigger OnAfterGetCurrRecord()
    begin
        CurrPage.NVXTESTDropzone.Page.SetCurrRecord(Rec);
    end;
    kann auch weggelassen werden, falls man z.B. eine Dropzone benötigt, die nicht Datensatzbezogen arbeitet. (z.B. Import von Zahlungsdateien der NAVAX App NCPI Zahlungsverkehr Import)

    Hinweis

    Für die Funktion SetDropzoneID steht auch eine Überladung mit folgenden zusätzlichen Parametern zur Verfügung:
    • AdditionalCallID Kann frei verwendet werden, und wird dem OnAfterUpload-Event übergeben. Teilen sich z.B. mehrere Pages die selbe NCEXDropzoneID, kann man z.B. als Parameter die ID der Page (z.B. Page::"Purchase Invoices") angeben und später im Event abfragen.
    • AdditionalDropzoneText Kann wenn erforderlich verwendet werden, um den Benutzern zusätzliche Informationen im Dropzone-Bereich anzuzeigen.

  3. OnAfterUpload-Event Im letzten Schritt muss jetzt auf das OnAfterUpload-Event der Dropzone reagiert werden:
    codeunit 50000 "NVXTEST Event Mgt."
    {
        [EventSubscriber(ObjectType::Codeunit, Codeunit::"NCEX Dropzone Mgt.", 'OnAfterUpload', '', false, false)]
        local procedure NVXTEST_NCEXDropzoneMgt_OnAfterUpload(NCEXDropzoneID: Enum "NCEX Dropzone ID"; CurrRecordVariant: Variant; var UploadedTempBlobList: Codeunit "Temp Blob List"; FileNameList: List of [Text]; AdditionalCallID: Integer)
        var
            Customer: Record Customer;
            DocumentAttachment: Record "Document Attachment";
            TempBlob: Codeunit "Temp Blob";
            ConfirmManagement: Codeunit "Confirm Management";
            RecordRef: RecordRef;
            InStream: InStream;
            FileName: Text;
            i: Integer;
            NoOfFiles: Integer;
            NoOfNoContentFiles: Integer;
            NoRecordSelectedErr: Label 'No %1 is selected.', Comment = 'DEU="Es ist kein %1 ausgewählt."';
            UploadMsg: Label 'Do you want to add %1 file(s) to the document attachments of %2 ''%3''?.', Comment = 'DEU="Möchten Sie %1 Datei(en) zu den Beleganhängen von %2 ''%3'' hinzufügen?"';
            NoContentFilesMsg: Label 'Files that have no content cannot be added to the document attachments.\\Number of files not added: %1\Number of files added: %2', Comment = 'DEU="Dateien, die keinen Inhalt haben, können nicht zu den Beleganhängen hinzugefügt werden.\\Anzahl nicht hinzugefügter Dateien: %1\Anzahl hinzugefügter Dateien: %2"';
        begin
            if (NCEXDropzoneID <> NCEXDropzoneID::"NVXTEST Customer") then
                exit;
    
            if (UploadedTempBlobList.Count() = 0) then
                exit;
    
            if not CurrRecordVariant.IsRecord() then
                Error(NoRecordSelectedErr, Customer.TableCaption());
            Customer := CurrRecordVariant;
            if (Customer."No." = '') then
                Error(NoRecordSelectedErr, Customer.TableCaption());
            Customer.Get(Customer."No.");
    
            if not ConfirmManagement.GetResponseOrDefault(StrSubstNo(UploadMsg, UploadedTempBlobList.Count(), Customer.TableCaption(), Customer."No."), true) then
                exit;
    
            RecordRef.GetTable(Customer);
            NoOfFiles := 0;
            NoOfNoContentFiles := 0;
            for i := 1 to UploadedTempBlobList.Count() do begin
                UploadedTempBlobList.Get(i, TempBlob);
                if TempBlob.HasValue() then begin
                    FileNameList.Get(i, FileName);
                    TempBlob.CreateInStream(InStream);
                    Clear(DocumentAttachment);
                    DocumentAttachment.Init();
                    DocumentAttachment.InitFieldsFromRecRef(RecordRef);
                    DocumentAttachment.SaveAttachmentFromStream(InStream, RecordRef, FileName);
                    NoOfFiles += 1;                
                end else
                    NoOfNoContentFiles += 1;
            end;
    
            if (NoOfNoContentFiles <> 0) then
                Message(NoContentFilesMsg, NoOfNoContentFiles, NoOfFiles);
        end;
    }

    Wichtig

    if (NCEXDropzoneID <> NCEXDropzoneID::"NVXTEST Customer") then
        exit;
    Diese if-Bedingung entscheidet darüber, für welche Dropzone der Code ausgeführt werden soll und darf auf keinen Fall weggelassen werden. Der Wert muss mit dem hinzugefügten Wert aus der enumextension übereinstimmen.


Feedback senden für
DE|EN Impressum