Erstellen eines benutzerdefinierten Sendedienstes

AEM Forms bietet eine Reihe von vorkonfigurierten Übermittlungsoptionen, die für die meisten Anwendungsfälle geeignet sind.Zusätzlich zu diesen vordefinierten Übermittlungsaktionen können Sie mit AEM Forms einen eigenen benutzerdefinierten Übermittlungs-Handler schreiben, um die Formularübermittlung gemäß Ihren Anforderungen zu verarbeiten.

Zum Erstellen eines benutzerdefinierten Sendedienstes wurden die folgenden Schritte ausgeführt.

Erstellen eines AEM-Projekts

Wenn Sie bereits über ein AEM Forms as a Cloud Service-Projekt verfügen, können Sie sofort mit der Erstellung eines benutzerdefinierten Sendedienstes beginnen.

  • Erstellen Sie auf Laufwerk „C:“ einen Ordner namens „cloudmanager“.
  • Navigieren Sie zu diesem neu erstellten Ordner.
  • Kopieren Sie den Inhalt dieser Textdatei und fügen Sie ihn in die Eingabeaufforderung ein.Je nach (neuester Version) müssen Sie ​ ArchetypeVersion=41 ​. Zum Zeitpunkt der Erstellung dieses Artikels war „41“ die neueste Version.
  • Führen Sie den Befehl aus, indem Sie die Eingabetaste drücken.Wenn alles ordnungsgemäß verläuft, sollte die Erfolgsmeldung Build angezeigt werden.

Schreiben des benutzerdefinierten Sendediensts Write-the-custom-submit-service

Starten Sie IntelliJ und öffnen Sie das AEM-Projekt. Erstellen Sie eine neue Java-Klasse mit dem Namen HandleRegistrationFormSubmission, wie im folgenden Screenshot gezeigt
custom-submit-service

Der folgende Code wurde zur Implementierung des Dienstes geschrieben:

package com.aem.bankingapplication.core;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
import org.osgi.service.component.annotations.Component;
import com.adobe.aemds.guide.model.FormSubmitInfo;
import com.adobe.aemds.guide.service.FormSubmitActionService;
import com.adobe.aemds.guide.utils.GuideConstants;
import com.google.gson.JsonObject;
import org.slf4j.*;

@Component(
        service=FormSubmitActionService.class,
        immediate = true
)
public class HandleRegistrationFormSubmission implements FormSubmitActionService {
    private static final String serviceName = "Core Custom AF Submit";
    private static Logger logger = LoggerFactory.getLogger(HandleRegistrationFormSubmission.class);

    @Override
    public String getServiceName() {
        return serviceName;
    }

    @Override
    public Map<String, Object> submit(FormSubmitInfo formSubmitInfo) {
        logger.error("in my custom submit service");
        Map<String, Object> result = new HashMap<>();
        logger.error("in my custom submit service");
        String data = formSubmitInfo.getData();
        JsonObject formData = new Gson().fromJson(data,JsonObject.class);
        logger.error("The form data is "+formData);
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("firstName",formData.get("firstName").getAsString());
        jsonObject.addProperty("lastName",formData.get("lastName").getAsString());
        result.put(GuideConstants.FORM_SUBMISSION_COMPLETE, Boolean.TRUE);
        result.put("json",jsonObject.toString());
        return result;
    }

}

Erstellen eines CRX-Knotens unter „apps“

Erweitern Sie den Knoten ui.apps und erstellen Sie ein neues Paket mit dem Namen HandleRegistrationFormSubmission unter dem Knoten apps , wie im folgenden Screenshot gezeigt
crx-node
Erstellen Sie unter „HandleRegistrationFormSubmission​eine Datei mit dem Namen .content.xml. Kopieren Sie den folgenden Code und fügen Sie ihn in die Datei „.content.xml“ ein.

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
    jcr:description="Handle Registration Form Submission"
    jcr:primaryType="sling:Folder"
    guideComponentType="fd/af/components/guidesubmittype"
    guideDataModel="xfa,xsd,basic"
    submitService="Core Custom AF Submit"/>

Der Wert des submitService-Elements muss mit serviceName = “Core Custom AF Submit” in der FormSubmitActionService-Implementierung übereinstimmen.

Bereitstellen des Codes für Ihre lokale AEM Forms-Instanz

Bevor Sie die Änderungen an das Cloud Manager-Repository pushen, wird empfohlen, den Code in Ihrer lokalen Cloud-fähigen Autoreninstanz bereitzustellen, um den Code zu testen. Stellen Sie sicher, dass die Autoreninstanz ausgeführt wird.
Um den Code in Ihrer Cloud-fähigen Autoreninstanz bereitzustellen, navigieren Sie zum Stammordner Ihres AEM-Projekts und führen Sie den folgenden Befehl aus

mvn clean install -PautoInstallSinglePackage

Dadurch wird der Code als einzelnes Paket in Ihrer Autoreninstanz bereitgestellt.

Übertragen des Codes an Cloud Manager und Bereitstellen des Codes

Nachdem Sie den Code auf Ihrer lokalen Instanz überprüft haben, pushen Sie den Code an Ihre Cloud-Instanz.
Übertragen Sie die Änderungen an Ihr lokales Git-Repository und dann an das Cloud Manager-Repository. Weitere Informationen finden Sie unter Git-Einrichtung, Pushen eines AEM-Projekts in das Cloud Manager-Repository und Bereitstellen in der Entwicklungsumgebung.

Nachdem die Pipeline erfolgreich ausgeführt wurde, sollten Sie in der Lage sein, die Sendeaktion Ihres Formulars mit dem benutzerdefinierten Sende-Handler zu verknüpfen, wie im folgenden Screenshot gezeigt
submit-action

Nächste Schritte

Anzeigen der benutzerdefinierten Antwort in Ihrer React-App

recommendation-more-help
experience-manager-learn-help-cloud-service