Document Queues Automation

<< Click to Display Table of Contents >>

Navigation:  Zetadocs SDK Guide > Creating a Per Tenant Extension >

Document Queues Automation

Zetadocs AutoLink allows you to archive the documents from the Zetadocs Document Queue against the records in Business Central. The logic is usually reliant on use of barcodes and will require a Per Tenant Extension and to be enabled in the Document Queue Settings.

 

Autolink Example

The following code illustrates how use the OnBeforeCapture event to autolink a document in the Zetadocs Document Queue to a Business Central record by barcodes:

 

    [EventSubscriber(ObjectType::CodeunitCodeunit::"Zetadocs Customize", 'OnBeforeCapture''', true, true)]

    procedure OnBeforeCapture(var onBeforeCaptureHandler: Codeunit "Zetadocs OnBeforeCapture")

    var

        PurcahseHeader: Record "Purchase Header";

        SalesHeader: Record "Sales Header";

        documentKeys: List of [Text];

        docKey: Text;

        documentBarcodes: List of [Text];

        barcode: Text;

        documentLink: Text;

        barcodeFilter: Text;

    begin

        //Get the list of documents

        onBeforeCaptureHandler.GetDocumentIds(documentKeys);

 

        //Business logic to assign the documents to a record

        foreach docKey in documentKeys do begin

            onBeforeCaptureHandler.GetDocumentBarcodes(docKey, documentBarcodes);

 

            // Loop over the barcodes and stop when the required one is found.

            foreach barcode in documentBarcodes do begin

                barcodeFilter := CopyStr(barcode, 15);

                documentLink := CopyStr(barcode, 6);

                case barcodeFilter of

 

                    'ZD-SO':

                        begin

                            Salesheader.Reset;

                            SalesHeader."Document Type" := SalesHeader."Document Type"::Order;

                            SalesHeader."No." := documentLink;

                            if (Salesheader.Find()) then begin

                                onBeforeCaptureHandler.SetRecordId(docKey, Salesheader.RecordId);

                                //Exit the foreach if we have a match

                                break;

                            end;

                        end;

 

                    'ZD-PO':

                        begin

                            PurcahseHeader.Reset;

                            PurcahseHeader."Document Type" := PurcahseHeader."Document Type"::Order;

                            PurcahseHeader."No." := documentLink;

                            if (PurcahseHeader.Find()) then begin

                                onBeforeCaptureHandler.SetRecordId(docKey, PurcahseHeader.RecordId);

                                //Exit the foreach if we have a match

                                break;

                            end;

                        end;

                end;

            end;

        end;

 

        //Propagate any error to the caller

        onBeforeCaptureHandler.PropagateLastError();

    end;

 

Scheduled AutoLink Example

Once covered by AutoLink, the document queue processing can be scheduled using a Business Central Job Queue Entry.

 

To do so, you will need to:

 

Consolidate record information after Zetadocs Capture Example

The following code illustrates how use the OnAfterGenerateCaptureResults event to add Dimension information to a Business Central record process using Zetadocs Capture based on Shipping Address or barcodes:

 

 

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Zetadocs Customize", 'OnAfterGenerateCaptureResults', '', true, true)]

    local procedure OnAfterGenerateCaptureResults(var onAfterGenerateCaptureResultsHandler: Codeunit "Zdd OnAfterGenerateCaptureRes")

    var

        purchaseHeader: record "Purchase Header";

        recId: RecordId;

        shippingAddress: Text;

        barcodes: List of [Text];

        firstBarcode: Text;

    begin

        onAfterGenerateCaptureResultsHandler.GetGeneratedRecordId(recId);

 

        if (GuiAllowed) then

            if (purchaseHeader.Get(recId)) then begin

                shippingAddress := onAfterGenerateCaptureResultsHandler.GetShippingAddressInput();

 

                if shippingAddress <> '' then begin

                    if shippingAddress.Contains('Ashford Street London W2 8HG') then begin

                        SetDimension(1, 'ADM', purchaseHeader);

                    end else begin

                        SetDimension(1, 'PROD', purchaseHeader);

                    end;

                end;

 

                onAfterGenerateCaptureResultsHandler.GetDocumentBarcodes(barcodes);

                if (barcodes.Count <> 0) then begin

                    firstBarcode := barcodes.Get(1);

                    if firstBarcode.Contains('SO-') then begin

                        SetDimension(2, 'TOYOTA', purchaseHeader);

                    end else begin

                        SetDimension(2, 'MERCEDES', purchaseHeader);

                    end;

                end;

            end;

    end;

 

    local procedure SetDimension(ShortcutDimensionIndex: integer; ShortcutDimensionValueCode: Code[20]; var PurchaseHeader: Record "Purchase Header")

    begin

        PurchaseHeader.SetHideValidationDialog(true);

 

        //Values from Demo Business Central

        // [1]:'DEPARTMENT'

        // [2]:'PROJECT'

        // [3]:'CUSTOMERGROUP'

        // [4]:'AREA'

        // [5]:'BUSINESSGROUP'

        // [6]:'SALESCAMPAIGN'

        // [7]:''

        // [8]:''

 

        case ShortcutDimensionIndex of

            1:// Set Shortcut 1

                if PurchaseHeader."Shortcut Dimension 1 Code" <> ShortcutDimensionValueCode then begin

                    PurchaseHeader."Shortcut Dimension 1 Code" := ShortcutDimensionValueCode;

                    PurchaseHeader.VALIDATE("Shortcut Dimension 1 Code");

                end;

            2:// Set Shortcut 2

                if PurchaseHeader."Shortcut Dimension 2 Code" <> ShortcutDimensionValueCode then begin

                    PurchaseHeader."Shortcut Dimension 2 Code" := ShortcutDimensionValueCode;

                    PurchaseHeader.VALIDATE("Shortcut Dimension 2 Code");

                end;

            else begin

                    PurchaseHeader.ValidateShortcutDimCode(ShortcutDimensionIndex, ShortcutDimensionValueCode);

                end;

        end;

    end;