Registrar una transacción para implementaciones personalizadas

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 mencionadas anteriormente y las implementaciones personalizadas de las API de AEM Forms no se contabilizan como transacciones. AEM Forms proporciona una API, TransactionRecorder, para registrar acciones como transacciones.

Para registrar una transacción, escriba el servlet de sling estándar y llame al servlet desde un cliente para registrar una transacción. Puede llamar al servlet utilizando AJAX o cualquier otro método estándar.

Ejemplo de código de servidor

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();
    }
}

Ejemplo de código de cliente

Puede utilizar el código de muestra siguiente para llamar al servlet que tiene la TransactionRecorderAPI.

$.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
})

En esta página