Utilice la API TransactionRecorder para registrar automáticamente las acciones que no se contabilizan como transacciones
Puede utilizar un código personalizado para enviar un formulario PDF, enviar la URL de previsualización de la interfaz de usuario del agente a los usuarios finales para realizar la previsualización de una comunicación interactiva o enviar un formulario mediante métodos personalizados en lugar de utilizar métodos de envío proporcionados con AEM Forms. Todas las acciones y las implementaciones personalizadas de las API de AEM Forms mencionadas anteriormente no se contabilizan como transacciones. AEM Forms proporciona una API, TransactionRecorder, para registrar acciones como transacciones.
Para registrar una transacción, escriba el servlet sling estándar y llame al servlet desde un cliente para registrar una transacción. Puede llamar al servlet mediante AJAX o cualquier otro método estándar.
Puede utilizar el código de muestra siguiente para ejecutar la API TransactionRecorder desde una clase JAVA mediante un paquete OSGi personalizado.
import com.adobe.aem.transaction.core.ITransactionRecorder;
import com.adobe.aem.transaction.core.model.TransactionRecord;
import com.adobe.aem.transaction.core.exception.TransactionException;
import com.adobe.aem.transaction.core.FormsTransactionConstants;
@Reference
private ITransactionRecorder transactionRecorder;
doPost (SlingHttpServletRequest request, SlingHttpServletResponse response) {
transactionRecorder.startContext();
TransactionRecord txRecord = extractTxRecordFromRequest(request); //extract transaction relevant data from request
try {
bool success = doBillableWork();
if (success) {
transactionRecorder.recordTransaction(txRecord);
}
} catch (Exception e) {
//exception handling
} finally {
transactionRecorder.endContext();
}
}
//Here, it is assumed that txInfo is passed in Stringified json form in the ajax call (in data parameter). You can pass txInfo from client in any way that you find suitable.
private TransactionRecord extractTxRecordFromRequest(SlingHttpServletRequest request) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
Map<String, Object> txDataMap = new HashMap<String, Object>();
String txData = bufferedReader.readLine();
JSONObject txInfo= new JSONObject(txData );
try {
String resourceType= txInfo.getString("resourceType");
String transactionType = txInfo.getString("transactionType");
Integer transactionCount = (Integer)txInfo.get("transactionCount");
//Extract all the relevant tx record attributes similarly and pass them in Transaction Record constructor as per the java doc}
return new TransactionRecord(transactionCount, transactionType, resourceType, ..);
} catch (JSONException e) {
//exception handling
} finally {
bufferedReader.close();
}
}
Puede utilizar el código de muestra siguiente para llamar al servlet que tiene la API TransactionRecorder
.
$.ajax({
type: 'POST',
url: url, //servlet url
contentType: 'application/json; UTF-8',
data: JSON.stringify({transactionCount : 1,
transactionType: "SUBMIT",
resourceType: "FORM",
resourceSubType: "ADAPTIVE-FORM"}),
success: successHandler,
error: faultHandler
})