Een transactie opnemen voor aangepaste implementaties
- Onderwerpen:
- Adaptieve formulieren
- Elementaire componenten
Gemaakt voor:
- Beheerder
- Ontwikkelaar
- Gebruiker
Versie | Artikelkoppeling |
---|---|
AEM 6,5 | klik hier |
AEM as a Cloud Service | Dit artikel |
Gebruik de TransactieRecorder API om acties te registreren die niet automatisch als transacties worden rekenschap gegeven.
U kunt aangepaste code gebruiken om een PDF-formulier te verzenden. U kunt ook een formulier verzenden met aangepaste methoden in plaats van verzendmethoden te gebruiken die bij AEM Forms worden geleverd. Alle eerder genoemde acties en aangepaste implementaties van AEM Forms API's worden niet als transacties beschouwd. AEM Forms verstrekt API, TransactionRecorder, om dergelijke acties zoals transacties te registreren.
Om een transactie te registreren, schrijf het standaard sling servleten vraag servlet van een cliënt om een transactie te registreren. U kunt servlet roepen gebruikend AJAX of een andere standaardmethode.
Voorbeeld van servercode
U kunt de onderstaande voorbeeldcode gebruiken om de TransactionRecorder-API uit te voeren vanuit een Java™-klasse met behulp van een aangepaste OSGi-bundel.
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();
}
}
Voorbeeld van code aan clientzijde
U kunt de hieronder steekproefcode gebruiken om servlet te roepen die TransactionRecorder
API heeft.
$.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
})