フォームの送信を処理するためのカスタム送信を作成
AEM Forms CS は、Azure にフォームデータを保存する標準の送信アクションを提供します。ただし、Blob で Blob インデックスタグを作成する機能は備わっていません。このユースケースを満たすために、送信されたデータを Azure に保存し、フォーム内で検索可能とマークされたフィールドを使用して Blob インデックスデータタグを作成する、カスタム送信サービスが作成されました。
コアコンポーネントベースのアダプティブフォーム用のサンプルのカスタム送信ハンドラーは、こちらから利用できます。フォーム送信を処理するために、次のカスタム送信が記述されました。
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;
}
}
サービス実装 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