Skip to main content

Archivierten Beleg per Suche finden

Die Seite Anhang Download beschreibt, wie Anhänge eines bereits gefundenen Archiv-Datensatzes heruntergeladen werden. Diese Seite beschreibt den vorgelagerten Schritt: Wie findet man den passenden Archiv-Datensatz – auch mandantenübergreifend, z. B. um im Intercompany-Szenario aus einer EK-Rechnung den zugehörigen VK-Beleg des Partnermandanten zu ermitteln.

Ablauf

  1. Suchbegriff (Lucene-Query) zusammenstellen
  2. Suche an Freeze absetzen
  3. Treffer + Anhänge in temporäre Tabellen übernehmen
  4. Anhänge herunterladen (siehe Seite „Anhang Download")

Verwendete öffentliche Prozeduren

DXP Freeze Search Mgt. (Codeunit 70954893)

Prozedur Zweck
GetSearchCombinationForTable(SystemId: Guid; TableNo: Integer): Text FertigerFertige Query für einen lokalen Beleg (SysLink + Kunde/Lieferant + aktuelle Company).
ToSafeSearchTerm(OldSearchTerm: Text): Text Escaping (Lucene) + URL-Encoding eines Suchwertes. Für jeden dynamischen Wert verwenden.
SystemLinkSearchQuery(SystemId: Guid; TableNo: Integer): Text Baustein SysLink:{GUID}-{TableNo}.

Mandantenübergreifend: GetSearchCombinationForTable ist hier nicht nutzbar – die Prozedur benötigt die SystemId des Originalbelegs und hängt automatisch die eigene CompanyName() an. Für die Suche in einem anderen Mandanten daher eineneine eigeneneigene Query bauen und die Partner-Company explizit als Feld Company setzen.

DXP Freeze API Mgt. (Codeunit 70954891)

Prozedur Zweck
SubmitSearch(SearchQuery: Text): JsonObject Suche absetzen (1 Treffer/Seite).
SubmitSearch(SearchQuery: Text; ItemsPerPage: Integer): JsonObject Suche mit Seitengröße.
SubmitSearch(SearchQuery: Text; StoreName: Text[30]): JsonObject Suche in einem bestimmten Store.

DXP FRZ Result Mgt. (Codeunit 70954894)

Prozedur Zweck
CreateResultForAttachments(QueryResult: JsonObject; var TempFrzResultRecordHeader; var TempFrzAttachmentResult; SearchQueryTxt: Text) Übernimmt Treffer + Anhang-Metadaten aus dem JSON in temporäre Tabellen.
HasRecord(SearchString: Text): Boolean Prüft, ob es überhaupt einen Treffer gibt.
GetEffectiveResultsCount(SearchString: Text): Integer Liefert die Trefferanzahl.

Query-Aufbau

EinEine Query besteht aus Feldname:"Wert"-Paaren, verknüpft mit AND / OR. Feldnamen verwenden _ statt Leerzeichen/Sonderzeichen (z. B. Sell_to_Customer_No). Werte immer über ToSafeSearchTerm escapen.

Beispiel – VK-Rechnung anhand Belegnummer, Belegtyp und Mandant:

(No:"VK-2026-001" AND Document_Type:"2" AND Company:"VERKAUF AG")

Document_Type:"2" entspricht dem Belegtyp Invoice.

Codebeispiel

procedure FindSalesDocInArchive(SalesDocNo: Code[20]; PartnerCompany: Text): Boolean
var
    TempResultHeader: Record "DXP FRZ Record Result Header" temporary;
    TempAttachment: Record "DXP FRZ Attachment Result" temporary;
    FrzApiMgt: Codeunit "DXP Freeze API Mgt.";
    FrzResultMgt: Codeunit "DXP FRZ Result Mgt.";
    FrzSearchMgt: Codeunit "DXP Freeze Search Mgt.";
    QueryResult: JsonObject;
    SearchQuery: Text;
    Base64: Text;
begin
    // 1) Query bauen (mandantenübergreifend)
    SearchQuery := StrSubstNo(
        '(No:"%1" AND Document_Type:"2" AND Company:"%2")',
        FrzSearchMgt.ToSafeSearchTerm(SalesDocNo),
        FrzSearchMgt.ToSafeSearchTerm(PartnerCompany));

    // 2) Suche absetzen
    QueryResult := FrzApiMgt.SubmitSearch(SearchQuery, 50);

    // 3) Treffer + Anhänge übernehmen
    FrzResultMgt.CreateResultForAttachments(
        QueryResult, TempResultHeader, TempAttachment, SearchQuery);
    if TempAttachment.IsEmpty() then
        exit(false);

    // 4) Anhang als Base64 abrufen (siehe Seite „Anhang Download")
    TempAttachment.FindSet();
    repeat
        Base64 := FrzApiMgt.GetSpecificRecordAttachment(
            TempAttachment."File Link",
            TempAttachment.ID,
            TempAttachment.Filename,
            false); // false = kein direkter Browser-Download
        // ... Base64 weiterverarbeiten (z. B. in Beleganhang speichern)
    until TempAttachment.Next() = 0;

    exit(true);
end;

Hinweis: Das Speichern in den Beleganhang (Tabelle „Document Attachment", 1173) ist Standard-Business-Central-Funktionalität und nicht Teil des Freeze-Moduls.