Generischer Blob-Speicher
Einführung
ExFlow verwendet derzeit die Business Central-Datenbank zum Speichern importierter Dokumente. Dokumente sind hauptsächlich XML und PDF. Es könnten potenziell auch andere Formate sein, wie DOCX oder PNG.
Bei der Verwendung von Business Central für die Speicherung neigt der zugewiesene Speicherplatz dazu, sich radikal zu erweitern, basierend auf der Anzahl der Rechnungen, die der Kunde erhält. Da importierte Dokumente Bilder enthalten können, wird sich der zugewiesene Speicherplatz in BC Online radikal erweitern.
Es besteht die Notwendigkeit, importierte Dokumente an alternativen Standorten für günstigere oder effizientere Speicherung speichern zu können.
Allgemein
Blobs sind Dateien im eher traditionellen Sinne des Denkens. Ein Blob ist jedoch der Inhalt von etwas, das wir als Datei betrachten. Eine Datei bezieht sich mehr auf die Metadaten wie Name, Erstellungsdatum, Änderungsdatum, Content-Type und mehr. Blobs sind binäre Datenfolgen, die die Metadaten beschreiben. Die Metadaten sagen uns oder der Anwendung, die den Blob verwendet, wie der Inhalt zu verwenden ist.
Um Blobs effizienter zu handhaben, müssen sie von der Anwendung abstrahiert werden. Wenn ExFlow also nach einem Blob fragt, erhält es Metadaten und den binären Inhalt. Die tatsächliche Quelle ist der Anwendung unbekannt.
Diese Lösung verwendet mehrere Ebenen, um die Funktionalität zu abstrahieren und zu isolieren.
ExFlow-Anwendung
Die Anwendung, die die Blobs durch Lesen, Schreiben, Löschen und Auflisten von Blobs oder Dateien verwenden wird.
Speicherverwaltung
Verwaltet, wo, wann und wie ein Blob gespeichert wird. Cache-Verwaltung und Speicherung werden in dieser Schicht gehandhabt. Übertragen und Abrufen von Blobs wird in dieser Schicht durchgeführt.
Speicherimplementierung (Storage Interface)
Dies ist die Implementierung eines Speichertypen. Zu implementierende Funktionen sind die primitivsten wie Get oder Put.
Architektur
Die Architektur für Blob-Speicher wird die Anwendung von der Art und Weise isolieren, wie auf Blobs zugegriffen wird.
ExFlow-Anwendung
In Business Central werden Blobs in Blob-Feldern in Tabellen gespeichert. Wenn ein Blob gelesen wird, werden Streams verwendet, um Daten aus dem Blob zu extrahieren. Wenn ein Blob geschrieben wird, werden Streams verwendet, um Daten in eine Tabelle zu schreiben. Derzeit werden Blobs in den folgenden Bereichen verwendet oder referenziert:
- ExFlow PDF-Add-In
- Eingehende Dokumentenanhänge
- InStream
- OutStream
- Strg+I-Verknüpfung in ExFlow, um den Hauptanhang auf den lokalen Computer herunterzuladen
- Klicken Sie auf einen Dateinamen in Business Central, um einen Anhang auf den lokalen Computer herunterzuladen
Isolation: Jede Anforderung zum Lesen eines Blobs wird über die Speicherverwaltung gesendet, die den Blob zurückgibt. Der Blob kann als Stream zurückgegeben oder auf den Client heruntergeladen werden.
Jede Anforderung zum Speichern eines Blobs wird über die Speicherverwaltung gesendet. Der Verweis wird SystemId zusammen mit TableID und FieldID sein, um es möglich zu machen, zwei Blobs in derselben Tabelle zu "speichern" und dennoch den externen Speicher zu verwenden.
Die Blob-Funktionalität wird hauptsächlich Standard-Blob-Methoden nachahmen, wenn sie für die Verwendung sinnvoll sind.
Speicherverwaltung
Die Speicherverwaltung (SM) wird Funktionen zum Lesen oder Schreiben von Blobs entweder direkt oder durch das Hören von Ereignissen bereitstellen.
Business Central löst Ereignisse aus, wenn Blobs gelesen werden, bevor Daten aus dem primären, am häufigsten verwendeten Speicher, dem Eingehenden Dokumentenanhang, extrahiert werden.
SM wird einen Cache von Blobs in Verwendung pflegen. Blobs in Verwendung können Blobs sein, die sich auf Importjournal oder Genehmigungsstatus beziehen, um nur einige zu nennen. Blobs können auch in archivierten Bereichen wie gebuchten Einkaufsrechnungen oder Kreditorenposten verwendet werden.
Wenn ein Blob angefordert wird, das sich auf gebuchte Dokumente bezieht, wird der Blob aus dem Blob-Speicher abgerufen und lokal zwischengespeichert, dann an die Anwendung zurückgegeben. Der Blob wird für eine gut definierte Zeit basierend auf der Einrichtung im Cache behalten.
Blobs, die für Bereiche wie das Importjournal angefordert werden, bleiben im Eingehenden Dokumentenanhang, bis die Rechnung gebucht wurde. Zu diesem Zeitpunkt wird der Eingehende Dokumentenanhang als ungültig markiert und wird regelmäßig durch eine geplante Aufgabe entfernt. Wenn eine Anforderung für einen Blob gestellt wird, der sich auf einen neu gebuchten Eintrag bezieht und der Cache-Eintrag noch existiert, wird der Blob nicht erneut abgerufen und der Cache wird als gültig gesetzt und bleibt für die in der Einrichtung festgelegte Zeit gültig.
Die Blob-Benennungskonvention wird generisch sein, wobei Blob-Details in einer separaten Tabelle gespeichert werden, die den Namen des Blobs enthält. Der Blob muss einer generischen Benennungskonvention folgen, um keine Probleme mit der Dateinamenlänge zu verursachen. Ein empfohlener Name ist GUID, wobei Teile davon als Pfad verwendet werden können.
Speicherimplementierung
Die physische Speicherung von Blobs erfolgt unter Verwendung einer Schnittstelle in Business Central. Eine Schnittstelle ist eine Abstraktion ohne Code, sie kann als Definition einer API betrachtet werden. Die Schnittstelle enthält nur Funktionssignaturen. Es liegt an den Implementierern, den Code zur Unterstützung der Schnittstelle hinzuzufügen.
Die Schnittstelle definiert eine oder mehrere überladene Funktionen im Zusammenhang mit Get, Put, Exist, List und Delete. Die Schnittstelle definiert auch überladene Funktionen im Zusammenhang mit Setup, Funktionen wie GetFieldCaption, SetFieldValue und GetFieldValue.

Blob Storage Einrichtung
Gehen Sie zu: ExFlow Setup --> Aktionen --> Funktionen --> Blob Storage Verwaltung (--> Storage Setup)
Die Einrichtung für Blob Storage basiert auf der Schnittstelle, die zur Speicherimplementierung definiert ist. Die Blob Storage Einrichtung ist generisch und allgemein. Sie enthält einige generische Textfelder wie Code, Beschreibung und Blob-Quelle.
Die Implementierung wird ihre eigene Einrichtung gegen ihre eigenen Tabellen nach Bedarf ausführen. Da die Implementierung möglicherweise OAuth oder eine andere Art der Authentifizierung erfordert, liegt es an der Implementierung, dies zu implementieren. Eine Implementierung der Schnittstelle kann wählen, alle Konfigurationsparameter innerhalb des isolierten Speichers zu speichern.
Minimale Blob Storage Einrichtungswerte sind Code, Beschreibung, Blob Storage Typ und ob es aktiviert ist oder nicht.
Es kann mehr als eine Blob Storage Einrichtung pro Blob Storage Typ geben, es hängt von der Nutzung ab.

Im Beispiel ist die gewählte Implementierung „Azure Container“.
Der Azure Container wird eine Einrichtung präsentieren, die Informationen sammelt, die für die Implementierung benötigt werden, wenn Sie auf Einrichtung drücken.
Es liegt an der Implementierung, Parameter auf relevante Weise unter Verwendung physischer Tabellen, isoliertem Speicher oder anderen Mitteln zu speichern.
Alle Felder in der Blob Storage Einrichtung sind für ExFlow oder die Blob Storage Verwaltung irrelevant und machen nur für die Implementierung Sinn. Die Implementierung verwendet die Blob Storage Einrichtung, um zu wissen, welche Einrichtung verwendet werden soll und aus ihrem eigenen Speicher, ihrer Tabelle oder ihrem isolierten Speicher abzurufen. Wenn also ein Aufruf an die Schnittstelle Get(Name, …) gemacht wird, wird die Implementierung die benötigte Einrichtung und Verbindungen herstellen, um es möglich zu machen, das angeforderte Blob abzurufen.
In diesem Fall ist die Speicherverwaltung physisch speicheragnostisch, sie weiß nicht, wie die Datei oder das Blob abgerufen wird, das überlässt sie der Implementierung.
Ein Aufruf der Speicherverwaltung an Get(Name, …) wird sich gleich verhalten und das Blob zurückgeben, egal ob die Implementierung Azure Container, Datenbank, Azure Share, lokales Dateisystem, Amazon WS, Dropbox oder eine andere Methode zur technischen Handhabung von Blobs ist.
Speicherverwaltung
Die Speicherverwaltung (SM) wird allgemeine Funktionalität für die Anwendung bereitstellen, um Blobs basierend auf einer Schlüssel-/Namenskombination zu erhalten, zu setzen, aufzulisten oder zu löschen. SM wird das Blob an seinen ursprünglichen Ort wiederherstellen, wenn eine Anfrage dafür gestellt wird.
SM wird Blobs lokal in einer Tabelle innerhalb der Blob Storage Funktionalität speichern oder zwischenspeichern, um das Blob-Management für die Anwendung schnell zu machen.
Zwischengespeicherte Blobs werden nur für eine begrenzte Zeit gespeichert, wie in der Einrichtung festgelegt. Einschränkungen können, aber nicht beschränkt auf, Tage oder Funktionsbereich sein.