Créer un envoi personnalisé pour gérer l’envoi du formulaire
AEM Forms CS fournit une action d’envoi prête à l’emploi pour stocker les données de formulaire dans Azure, mais n’offre pas la possibilité de créer des balises d’index blob sur l’objet blob. Pour répondre au cas d’utilisation, un service d’envoi personnalisé a été créé pour stocker les données envoyées dans Azure et créer des balises de données d’index blob à l’aide des champs marqués comme pouvant faire l’objet d’une recherche dans le formulaire.
L’exemple de gestionnaire d’envoi personnalisé pour le formulaire adaptatif basé sur les composants principaux est disponible ici. L’envoi personnalisé suivant a été écrit pour gérer l’envoi du formulaire.
package com.aemforms.saveandfecthfromazure.prefill;
import com.adobe.aemds.guide.common.GuideValidationResult;
import com.adobe.aemds.guide.model.FormSubmitInfo;
import com.adobe.aemds.guide.service.FormSubmitActionService;
import com.adobe.aemds.guide.utils.GuideConstants;
import com.adobe.forms.common.service.FileAttachmentWrapper;
import com.aemforms.saveandfetchfromazure.StoreAndFetchDataFromAzureStorage;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.Session;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
@Component(
service=FormSubmitActionService.class,
immediate = true
)
public class CustomAFSubmitService implements FormSubmitActionService {
private static final String serviceName = "Store Form Submission with Metadata tags in Azure";
private static Logger logger = LoggerFactory.getLogger(CustomAFSubmitService.class);
@Reference
DataManager dataManager;
@Reference
StoreAndFetchDataFromAzureStorage storeAndFetchDataFromAzureStorage;
@Override
public String getServiceName() {
return serviceName;
}
@Override
public Map<String, Object> submit(FormSubmitInfo formSubmitInfo) {
Map<String, Object> result = new HashMap<>();
result.put(GuideConstants.FORM_SUBMISSION_COMPLETE, Boolean.FALSE);
try {
String guideContainerPath = formSubmitInfo.getFormContainerPath();
String submittedFormName = formSubmitInfo.getFormContainerResource().getParent().getParent().getName();
logger.debug("The submitted form name is "+submittedFormName);
String data = formSubmitInfo.getData();
logger.debug(data);
String metadataTags = storeAndFetchDataFromAzureStorage.getMetaDataTags(submittedFormName,formSubmitInfo.getFormContainerPath(),formSubmitInfo.getFormContainerResource().getResourceResolver().adaptTo(Session.class),data);
String uniqueID = UUID.randomUUID().toString();
logger.debug("The metadata tags are "+metadataTags);
// The code for saveFormDatainAzure is listed in this article
logger.debug(storeAndFetchDataFromAzureStorage.saveFormDatainAzure(data,metadataTags));
if(dataManager != null) {
dataManager.put(uniqueID, data);
}
logger.info("AF Submission successful using custom submit service for: {}", guideContainerPath);
result.put(GuideConstants.FORM_SUBMISSION_COMPLETE, Boolean.TRUE);
result.put(DataManager.UNIQUE_ID, uniqueID);
// adding id here so that this available in redirect parameters in final thank you page
Map<String, Object> redirectParamMap = new HashMap<String, Object>() {{
put(DataManager.UNIQUE_ID, uniqueID);
}};
// todo: move this to constant, once forms SDK is released
result.put("fd:redirectParameters", redirectParamMap);
} catch (Exception ex) {
logger.error("Error while using the AF Submit service", ex);
GuideValidationResult guideValidationResult = new GuideValidationResult();
guideValidationResult.setOriginCode("500");
guideValidationResult.setErrorMessage("Internal server error");
result.put(GuideConstants.FORM_SUBMISSION_ERROR, guideValidationResult);
}
return result;
}
}
Implémentation du service saveFormDatainAzure
@Override
public String saveFormDatainAzure(String formData,String metaDataTags) {
String sasToken = azurePortalConfigurationService.getSASToken();
String storageURI = azurePortalConfigurationService.getStorageURI();
logger.debug("The SAS Token is "+sasToken);
logger.debug("The Storage URL is "+storageURI);
logger.debug("The form data is "+formData);
org.apache.http.impl.client.CloseableHttpClient httpClient = HttpClientBuilder.create().build();
UUID uuid = UUID.randomUUID();
String putRequestURL = storageURI+uuid.toString();
putRequestURL = putRequestURL+sasToken;
logger.debug("The put Request "+putRequestURL);
HttpPut httpPut = new HttpPut(putRequestURL);
httpPut.addHeader("x-ms-blob-type","BlockBlob");
httpPut.addHeader("Content-Type","text/plain");
httpPut.addHeader("x-ms-tags",metaDataTags);
try
{
httpPut.setEntity(new StringEntity(formData));
CloseableHttpResponse response = httpClient.execute(httpPut);
logger.debug("Response code "+response.getStatusLine().getStatusCode());
if(response.getStatusLine().getStatusCode() == 201)
{
return uuid.toString();
}
}
catch (IOException e)
{
logger.debug("Error: "+e.getMessage());
throw new RuntimeException(e);
}
return null;
}
recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69