Dateianhänge

Es besteht die Möglichkeit, eine Datei an einem Datensatz im Monitor anzufügen. Damit haben Anwender die Möglichkeit, sich diese Datei anzuschauen oder die Datei herunterzuladen.

Dateiquelle

Der BPC-Monitor unterstützt das Abrufen von Dateien direkt aus OpenSearch, als Referenz zum File-Storage-Service und als Referenz über eine HTTP-Proxy-Backend-Connection (zum Beispiel aus INUBIT).

Dateien im OpenSearch

Sie können Dateien im BPC-OpenSearch speichern. Eine Datei wird in diesem Fall direkt im Monitor-Datensatz angehängt.

Die Dateien sollten als Base64-String kodiert sein und im Datensatz unter einem dataIndex hinterlegt werden. Damit die Datei mit dem richtigen Namen sowie Format wiederhergestellt werden kann, muss der Datensatz folgende Informationen enthalten:

  • Name der Datei

  • MIME-Type

Die Namen der Spalten, welche diese Informationen enthalten müssen bei den Einstellungen der Spalte, welche die Dateidaten enthält, vorgenommen werden (Siehe Konfiguration: Datei-Spalte).

Der Datensatz, welcher die Datei beinhaltet, kann über einen BPC-Log-Service oder über einen Index-Request an OpenSearch hinzugefügt werden. Folgendes Beispiel zeigt einen Datensatz mit Dateianhang:

   {
      "PROCESSID": "2",
      "TEXT": "This is second test object",
      "FILEID": "foodmenu.xml",
      "filename": "foodmenu.xml",
      "contentType": "application/xml",
      "DATA": "PGJyZWFrZmFzdF9tZW51Pgo8Zm9vZD4KPG5hbWU+QmVsZ2lhbiBXYWZmbGVzPC9uYW1lPgo8cHJpY2U+JDUuOTU8L3ByaWNlPgo8ZGVzY3JpcHRpb24+VHdvIG9mIG91ciBmYW1vdXMgQmVsZ2lhbiBXYWZmbGVzIHdpdGggcGxlbnR5IG9mIHJlYWwgbWFwbGUgc3lydXA8L2Rlc2NyaXB0aW9uPgo8Y2Fsb3JpZXM+NjUwPC9jYWxvcmllcz4KPC9mb29kPgo8Zm9vZD4KPG5hbWU+U3RyYXdiZXJyeSBCZWxnaWFuIFdhZmZsZXM8L25hbWU+CjxwcmljZT4kNy45NTwvcHJpY2U+CjxkZXNjcmlwdGlvbj5MaWdodCBCZWxnaWFuIHdhZmZsZXMgY292ZXJlZCB3aXRoIHN0cmF3YmVycmllcyBhbmQgd2hpcHBlZCBjcmVhbTwvZGVzY3JpcHRpb24+CjxjYWxvcmllcz45MDA8L2NhbG9yaWVzPgo8L2Zvb2Q+Cjxmb29kPgo8bmFtZT5CZXJyeS1CZXJyeSBCZWxnaWFuIFdhZmZsZXM8L25hbWU+CjxwcmljZT4kOC45NTwvcHJpY2U+CjxkZXNjcmlwdGlvbj5MaWdodCBCZWxnaWFuIHdhZmZsZXMgY292ZXJlZCB3aXRoIGFuIGFzc29ydG1lbnQgb2YgZnJlc2ggYmVycmllcyBhbmQgd2hpcHBlZCBjcmVhbTwvZGVzY3JpcHRpb24+CjxjYWxvcmllcz45MDA8L2NhbG9yaWVzPgo8L2Zvb2Q+Cjxmb29kPgo8bmFtZT5GcmVuY2ggVG9hc3Q8L25hbWU+CjxwcmljZT4kNC41MDwvcHJpY2U+CjxkZXNjcmlwdGlvbj5UaGljayBzbGljZXMgbWFkZSBmcm9tIG91ciBob21lbWFkZSBzb3VyZG91Z2ggYnJlYWQ8L2Rlc2NyaXB0aW9uPgo8Y2Fsb3JpZXM+NjAwPC9jYWxvcmllcz4KPC9mb29kPgo8Zm9vZD4KPG5hbWU+SG9tZXN0eWxlIEJyZWFrZmFzdDwvbmFtZT4KPHByaWNlPiQ2Ljk1PC9wcmljZT4KPGRlc2NyaXB0aW9uPlR3byBlZ2dzLCBiYWNvbiBvciBzYXVzYWdlLCB0b2FzdCwgYW5kIG91ciBldmVyLXBvcHVsYXIgaGFzaCBicm93bnM8L2Rlc2NyaXB0aW9uPgo8Y2Fsb3JpZXM+OTUwPC9jYWxvcmllcz4KPC9mb29kPgo8L2JyZWFrZmFzdF9tZW51Pg=="
   }

Datei-Referenz des File-Storage-Services

Dateien können vom File-Storage-Service verwaltet werden und in einem Monitor referenziert sein.

Diese Referenzen haben folgendes Format:

bpc://backend-connection/FILE_STORAGE_BACKEND_CONNECTION_ID/FILE_STORAGE_ITEM_ID

Datei-Referenz mit HTTP-Proxy

Dateien können in einem separaten System (zum Beispiel INUBIT) aufbewahrt werden und über eine konfigurierte HTTP-Proxy-Verbindung aufgerufen werden. Wie Dateien dort gespeichert werden, hängt von der Einstellung im INUBIT ab.

Die Dateien sollen über einen REST-Endpunkt bereitgestellt werden, sodass diese sich vom BPC aus herunterladen lassen (siehe auch Konfiguration des Herunterladens von Dateien im Monitor).

Konfiguration des Herunterladens von Dateien im Monitor

Nachdem eine Datei oder eine Referenz zur Datei am Monitor-Datensatz gespeichert wurde, sind folgende Einstellungen nötig, um das Herunterladen der Datei zu ermöglichen.

Konfiguration: Datei-Spalte

Legen Sie in der Spaltenkonfiguration (column_config oder column_historyConfig für Parent- oder Child-Indizes) in den Einstellungen der Spalte, welche die Dateiinhalte oder -Referenzen enthält, ein Einstellungsobjekt fileConfig an.

Dieses Setting muss die Felder columnFileName und columnContentType konfigurieren, welche den Namen der Spalte des Dateinamens bzw. des Content-Types definiert. Optional kann mit dem Feld dataSource bestimmt werden, dass Dateien stets aus einer bestimmten Quelle (OpenSearch, (INUBIT) HTTP-Proxy) kommen. Es werden die Optionen OpenSearch, FileStorage, BackendConnection, und auto angeboten. Im Fall von auto (default) wird anhand des Inhalts der Dateispalte versucht, die Quelle zu bestimmen.

Beispiel
{
    ...
    "dataIndex": "DATA",
    "xtype": "attachmentcolumn",
    "text": "REFFILE",
    ...
    "fileConfig": {
        "columnFileName": "filename",
        "columnContentType": "contentType",
        "dataSource": "auto"
    }
}

Das Beispiel konfiguriert, dass sich Dateiinhalte oder -Referenzen in dem OpenSearch-Feld DATA befinden. Der dazugehörige Dateiname befindet sich in der Spalte filename, der dazugehörige Content-Type in der Spalte contentType.

Hat die Spalte attachmentcolumn als xtype, so wird in dieser ein Download-Button angezeigt. Für das Herunterladen von Anhängen von Dateien in Child-Indizes über das Popup- oder Inline-View ist dieser aber nicht notwendig, es reicht hier der fileConfig-Eintrag.

Bei der Einstellung "dataSource": "auto" wird, falls es sich um eine Datei im File-Storage handelt, diese ausgeliefert. Ansonsten wird versucht, den Inhalt der Dateispalte als Base64-kodierten String zu interpretieren. Schlägt das Dekodieren fehl, wird der Wert als URL-Parameter directory in der Abfrage zum konfigurierten HTTP-Proxy gesendet.

Konfiguration: Herunterladen über HTTP-Proxy-Verbindungen

Die Datei kann über eine HTTP-Proxy-Verbindung heruntergeladen werden. Das kann zum Beispiel für Downloads von einem externen System wie z.B. INUBIT verwendet werden. Dafür sind folgende Einstellungen notwendig:

  • httpProxy_referenceEndpoint:
    Über diese Einstellung wird die HTTP-Proxyverbindung und die Download-Endpunkt-URL konfiguriert. Es wird die Konfiguration über das Frontend empfohlen. (Format: bpc://backendconnection/{proxyid}/{endpoint_path})

  • column_id:
    Die Abfrage enthält Information zur Prozess-ID als URL-Parameter, deshalb soll die dazugehörige Spalte gesetzt werden.

  • column_historyId:
    Falls das Herunterladen sich auf den Child-Prozess bezieht, soll die ID des Child-Prozesses in der Abfrage als URL-Parameter enthalten sein. Die dazugehörige Spalte muss deshalb gesetzt werden.

Nachdem alles konfiguriert ist, hat die URL folgende Struktur. Das Protokoll und die Domain werden an der HTTP-Proxy-Verbindung konfiguriert.

{Protokoll}://{Domain}/{endpoint_path}?directory={Inhalt der Datei-Spalte}&processid={processId}&childid={childId}

Konkreter Anwendungsfall

Dieses Beispiel zeigt, wie eine Base64-kodierte Datei über den Logservice in OpenSearch geschrieben und anschließend aus dem Monitor-Child-Grid heruntergeladen werden kann.

Anlegen einer Logservice-Instanz

Die Konfiguration der Logservice-Instanz erfolgt mit folgenden Parametern:

  • Instanz-ID: myTestLogger

  • OpenSearch-Index: myTestIndex

  • OpenSearch-History-Index: myTestChildIndex

Daten über die Logservice-API in OpenSearch schreiben

Die zu speichernden Daten enthalten eine Base64-kodierte Datei. Diese sollten in einer separaten Datei hinterlegt werden.

In diesem Beispiel wird eine Datei namens logservice.json mit folgendem Inhalt erstellt:

{
    "entries": [
        {
            "parent": {
                "processid": 3,
                "name": "hello world",
                "lastupdate": "2017-05-17T15:28:23.181Z"
            },
            "children": [
                {
                    "parentid": 3,
                    "childid": 1,
                    "langertext": "Dieser Text",
                    "lastupdate": "2017-05-17T15:28:23.181Z",
                    "datei": "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACAQMAAABIeJ9nAAAABlBMVEUAAAD///+l2Z/dAAAADElEQVQIHWNwYGgAAAFEAMGoX3f9AAAAAElFTkSuQmCC",
                    "filename": "food.png",
                    "contentType": "application/png"
                }
            ]
        }
    ]
}

Wichtige Attribute:

  • datei – enthält die Base64-codierte Datei.

  • contentType – gibt den MIME-Type der Datei an.

  • filename – der Name, unter dem die Datei gespeichert werden soll.

Daten per cURL an die Logservice-API senden

Im nächsten Schritt werden die Daten per cURL-Befehl an die Logservice-API gesendet.

Voraussetzungen:

  • Die Datei logservice.json befindet sich im aktuellen Verzeichnis.

  • Ein gültiger API-Key ist vorhanden. (siehe hier)

  • Eine BackendConnection des Typs HTTP Proxy wurde eingerichtet. (siehe hier)

curl -H "X-ApiKey: 1f697af5-c147-3d94-c529-e06f3f15bb87" \
     -H "Content-Type: application/json" \
     -XPOST 'http://localhost:8181/cxf/bpc-logservice/log/myTestLogger' \
     -d @logservice.json

Anlegen einer Monitorinstanz

Die Monitorinstanz benötigt folgende Konfiguration:

  • OpenSearch Index (data_index): myTestIndex

  • OpenSearch Historien-Index (data_history_index): myTestChildIndex

  • Spalte-ID (column_id): processid

  • History-ID (column_historyId): parentid

  • Zusätzliche History-ID (column_historySubId): childid

  • Backend-Connection (httpProxy_proxyId): Auswahl der erstellten Backend-Connection

  • Inline-Detailansicht (detailView_inline): true

Außerdem muss die Spalte, welche Dateien oder Dateireferenzen enthält, entsprechend konfiguriert sein (Siehe Konfiguration: Datei-Spalte):

{
    ...
    "dataIndex": "datei",
    "text": "Datei",
    ...
    "fileConfig": {
        "columnFileName": "filename",
        "columnContentType": "contentType",
        "dataSource": "auto"
    }
}

Datei herunterladen

Um die hochgeladene Datei herunterzuladen, kann wie folgt vorgegangen werden:

  1. Zur Monitorinstanz navigieren.

  2. Die Detailansicht der ersten und einzigen Datenzeile öffnen.

  3. In der ersten Spalte der Detailansicht befindet sich der Download-Button.

file attachment

Nach dem Klick auf den Download-Button sollte die Datei heruntergeladen werden.

Konfiguration für die Dateivorschau bei File-Storage (CORS & CSP)

Die vom File-Storage-Service verwalteten Dateien werden bei konfigurierten Cloud-Storage-Providern gespeichert. In der Backend-Connection kann konfiguriert werden, ob ein Download direkt von diesem Cloud-Provider stattfinden soll, oder über das BPC geleitet wird.

Beim Ansehen von Dateien direkt im Monitor müssen zusätzlich Content-Security-Policy (CSP) und Cross-Origin Resource Sharing (CORS) des Buckets/Containers konfiguriert werden, falls ein Download direkt vom Cloud-Provider stattfindet.

Setzen des CSP-Headers

Für diesen Fall sollte in der Datei BPC-INSTALLATION/karaf/etc/jetty.xml die Content-Security-Policy so angepasst werden, dass der entsprechende Bucket/Container erlaubt ist:

<Item>
    <New id="header-csp" class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
        <Set name="pattern">/*</Set>
        <Set name="name">Content-Security-Policy</Set>
        <Set name="value">script-src 'self' 'unsafe-eval'; connect-src 'self' https://test-bucket.s3.eu-central-1.amazonaws.com; img-src 'self' https://test-bucket.s3.eu-central-1.amazonaws.com data: blob:; style-src 'self' 'unsafe-inline'; font-src 'self'; frame-ancestors 'self'; form-action 'self'; worker-src 'self' blob: ;</Set>
    </New>
</Item>

In diesem Beispiel werden Zugriffe und Bild-Darstellungen für den S3-Bucket test-bucket in der Region eu-central-1 erlaubt.

Setzen des CORS-Headers

Damit die Resource, welche von dem Cloud-Provider geladen werden, auch im BPC verwendet werden dürfen, muss in dem Bucket/Container der CORS-Header so angepasst werden, dass die URL des BPCs für GET- und HEAD-Anfragen freigegeben ist.

Folgendes Beispiel zeigt die Freigabe für ein BPC, welches unter https://bpc.example.com erreichbar ist:

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "HEAD"
        ],
        "AllowedOrigins": [
            "https://bpc.example.com"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]