Almacenar envíos de formularios en Azure Storage

Este artículo muestra cómo realizar llamadas REST para almacenar datos de AEM Forms enviados en Azure Storage.
Para poder almacenar los datos de formulario enviados en el almacenamiento de Azure, se deben seguir los siguientes pasos.

NOTE
El código de este artículo no funciona con los componentes principales basados en el formulario adaptable. El artículo equivalente para el formulario adaptable basado en componentes principales está disponible aquí

Crear cuenta de almacenamiento de Azure

Inicie sesión en su cuenta del portal de Azure y cree una cuenta de almacenamiento. Proporcione un nombre significativo a su cuenta de almacenamiento, haga clic en Revisar y, a continuación, haga clic en Crear. Esto crea su cuenta de almacenamiento con todos los valores predeterminados. Para el propósito de este artículo hemos nombrado nuestra cuenta de almacenamiento aemformstutorial.

Crear contenedor

Lo siguiente que debemos hacer es crear un contenedor para almacenar los datos de los envíos de formularios.
En la página de cuenta de almacenamiento, haga clic en el elemento de menú Contenedores de la izquierda y cree un contenedor llamado formssubmissions. Asegúrese de que el nivel de acceso público está establecido en privado
contenedor

Crear SAS en el contenedor

Nos haremos con la firma de acceso compartido o el método SAS de autorización para interactuar con el contenedor de almacenamiento de Azure.
Vaya al contenedor en la cuenta de almacenamiento, haga clic en los puntos suspensivos y seleccione la opción Generate SAS como se muestra en la captura de pantalla
sas-on-container
Asegúrese de especificar los permisos adecuados y la fecha de finalización adecuada, tal como se muestra en la captura de pantalla siguiente, y haga clic en Generar token SAS y URL. Copie el token SAS de blob y la URL de SAS de blob. Utilizaremos estos dos valores para realizar nuestras llamadas HTTP
shared-access-keys

Proporcione el token SAS de blob y el URI de almacenamiento.

Para que el código sea más genérico, las dos propiedades se pueden configurar utilizando la configuración OSGi como se muestra a continuación. El aemformstutorial es el nombre de la cuenta de almacenamiento, formsubmissions es el contenedor en el que se almacenan los datos.
Asegúrese de que tiene / al final del URI de almacenamiento y el token SAS empieza por?
osgi-configuration

Crear solicitud de PUT

El siguiente paso es crear una solicitud de PUT para almacenar los datos de formulario enviados en Azure Storage. Cada envío de formulario debe identificarse con un ID de BLOB único. El ID único de BLOB se suele crear en el código e insertar en la dirección URL de la solicitud del PUT.
La siguiente es la dirección URL parcial de la solicitud del PUT. El aemformstutorial es el nombre de la cuenta de Storage, formsubmissions es el contenedor en el que se almacenarán los datos con un ID de BLOB único. El resto de la URL seguirá siendo el mismo.
https://aemformstutorial.blob.core.windows.net/formsubmissions/blobid/sastoken La siguiente es una función escrita para almacenar los datos de formulario enviados en Azure Storage mediante una solicitud del PUT. Observe el uso del nombre de contenedor y el uuid en la dirección URL. Puede crear un servicio OSGi o un servlet sling mediante el código de ejemplo que se muestra a continuación y almacenar los envíos de formularios en Azure Storage.

 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;

}

Comprobar los datos almacenados en el contenedor

form-data-in-container

Prueba de la solución

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