Speichern einer Formularübermittlung in Azure Storage

In diesem Artikel erfahren Sie, wie Sie REST-Aufrufe durchführen, um gesendete AEM Forms-Daten in Azure Storage zu speichern.
Um gesendete Formulardaten in Azure Storage speichern zu können, müssen die folgenden Schritte ausgeführt werden.

NOTE
Der Code in diesem Artikel funktioniert nicht mit auf Kernkomponenten basierenden adaptiven Formularen. Den äquivalenten Artikel für ein auf Kernkomponenten basierendes adaptives Formular finden Sie hier.

Erstellen eines Azure Storage-Kontos

Melden Sie sich bei Ihrem Azure Portal-Konto an und erstellen Sie ein Speicherkonto. Geben Sie einen aussagekräftigen Namen für Ihr Speicherkonto ein, klicken Sie auf „Überprüfen“ und dann auf „Erstellen“. Dadurch wird Ihr Speicherkonto mit allen Standardwerten erstellt. Für die Zwecke dieses Artikels haben wir unser Speicherkonto aemformstutorial genannt.

Erstellen eines Containers

Als Nächstes müssen wir einen Container erstellen, in dem die Daten aus Formularübermittlungen gespeichert werden.
Klicken Sie auf der Seite „Speicherkonto“ links auf das Menüelement „Container“ und erstellen Sie einen Container namens formssubmissions. Stellen Sie sicher, dass die öffentliche Zugriffsebene auf „privat“ gesetzt ist.
Container

Erstellen von SAS für den Container

Wir werden die Shared Access Signature- oder kurz SAS-Autorisierungsmethode für die Interaktion mit dem Azure Storage-Container verwenden.
Navigieren Sie zum Container im Speicherkonto, klicken Sie auf die Auslassungspunkte und wählen Sie die Option „SAS generieren“ aus, wie im Screenshot gezeigt.
sas-on-container
Stellen Sie sicher, dass Sie die entsprechenden Berechtigungen und das entsprechende Enddatum angeben, wie im Screenshot unten dargestellt, und klicken Sie auf „SAS-Token und URL generieren“. Kopieren Sie das Blob-SAS-Token und die Blob-SAS-URL. Wir werden diese beiden Werte verwenden, um unsere HTTP-Aufrufe durchzuführen.
shared-access-keys

Geben Sie das Blob-SAS-Token und den Speicher-URI an.

Um den Code allgemeiner zu gestalten, können die beiden Eigenschaften mit der OSGi-Konfiguration wie unten dargestellt konfiguriert werden. Dabei ist aemformstutorial  der Name des Speicherkontos, und formsubmissions  ist der Container, in dem die Daten mit einer eindeutigen BLOB-ID gespeichert werden.
Achten Sie darauf, dass am Ende des Speicher-URI ein Schrägstrich (/) steht und das SAS-Token mit einem Fragezeichen (?) beginnt:
osgi-configuration

Erstellen einer PUT-Anfrage

Als nächstes muss eine PUT-Anfrage erstellt werden, um die gesendeten Formulardaten in Azure Storage zu speichern. Jede Formularübermittlung muss durch eine eindeutige BLOB-ID identifiziert werden. Die eindeutige BLOB-ID wird normalerweise in Ihrem Code erstellt und in die URL der PUT-Anfrage eingefügt.
Im Folgenden finden Sie die Teil-URL der PUT-Anfrage. Dabei ist aemformstutorial der Name des Speicherkontos und „formsubmit“ der Container, in dem die Daten mit einer eindeutigen BLOB-ID gespeichert werden. Der Rest der URL bleibt unverändert.
https://aemformstutorial.blob.core.windows.net/formsubmissions/blobid/sastoken
Die folgende Funktion wurde geschrieben, um die gesendeten Formulardaten mithilfe einer PUT-Anfrage in Azure Storage zu speichern. Beachten Sie die Verwendung des Container-Namens und der UUID in der URL. Mithilfe des unten aufgeführten Beispiel-Codes können Sie einen OSGi-Dienst oder ein Sling-Servlet erstellen und die Formularübermittlungen in Azure Storage speichern.

 public String saveFormDatainAzure(String formData) {
    log.debug("in SaveFormData!!!!!" + formData);
    String sasToken = azurePortalConfigurationService.getSASToken();
    String storageURI = azurePortalConfigurationService.getStorageURI();
    log.debug("The SAS Token is " + sasToken);
    log.debug("The Storage URL is " + storageURI);
    org.apache.http.impl.client.CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    UUID uuid = UUID.randomUUID();
    String putRequestURL = storageURI + uuid.toString();
    putRequestURL = putRequestURL + sasToken;
    HttpPut httpPut = new HttpPut(putRequestURL);
    httpPut.addHeader("x-ms-blob-type", "BlockBlob");
    httpPut.addHeader("Content-Type", "text/plain");

    try {
        httpPut.setEntity(new StringEntity(formData));

        CloseableHttpResponse response = httpClient.execute(httpPut);
        log.debug("Response code " + response.getStatusLine().getStatusCode());
        if (response.getStatusLine().getStatusCode() == 201) {
            return uuid.toString();
        }
    } catch (IOException e) {
        log.error("Error: " + e.getMessage());
        throw new RuntimeException(e);
    }
    return null;

}

Überprüfen der gespeicherten Daten im Container

form-data-in-container

Testen der Lösung

recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e