Archivierten Beleg per Suche finden
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
- Suchbegriff (Lucene-Query) zusammenstellen
- Suche an Freeze absetzen
- Treffer + Anhänge in temporäre Tabellen übernehmen
- Anhänge herunterladen (siehe Seite „Anhang Download")
Verwendete öffentliche Prozeduren
DXP Freeze Search Mgt. (Codeunit 70954893)
| Prozedur | Zweck |
|---|---|
GetSearchCombinationForTable(SystemId: Guid; TableNo: Integer): Text |
Fertiger 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:
GetSearchCombinationForTableist hier nicht nutzbar – die Prozedur benötigt dieSystemIddes Originalbelegs und hängt automatisch die eigeneCompanyName()an. Für die Suche in einem anderen Mandanten daher einen eigenen Query bauen und die Partner-Company explizit als FeldCompanysetzen.
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
Ein 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.