Beispiel zur Integrierung der Komponente für Entwurf und Übermittlung in die Datenbank sample-for-integrating-drafts-submissions-component-with-database
Überblick zum Beispiel sample-overview
Mit der Komponente „Entwürfe und Sendungen“ des AEM Forms-Portals können Benutzende ihre Formulare als Entwürfe speichern und zu einem späteren Zeitpunkt von jedem beliebigen Gerät senden. Zudem können die Benutzenden ihre übermittelten Formulare im Portal anzeigen. Um diese Funktion zu aktivieren, bietet AEM Forms Daten- und Metadatendienste an, um die von Benutzenden im Formular eingegebenen Daten sowie die mit Entwürfen und gesendeten Formularen verknüpften Metadaten zu speichern. Diese Daten werden standardmäßig im CRX-Repository gespeichert. Da die Benutzenden mit den Formularen jedoch über eine AEM-Veröffentlichunginstanz interagieren, die in der Regel außerhalb der Unternehmens-Firewall liegt, sollten Sie die Datenspeicherung so anpassen, dass sie sicherer und zuverlässiger ist.
Bei dem in diesem Dokument gezeigten Beispiel handelt es sich um eine Referenzimplementierung benutzerdefinierter Daten- und Metadatendienste zur Integration der Komponente „Entwürfe und Sendungen“ in eine Datenbank. In der Beispielimplementierung wird die Datenbank MySQL 5.6.24 verwendet. Sie können die Komponente „Entwürfe und Sendungen“ jedoch in eine Datenbank Ihrer Wahl integrieren.
- Die Beispiele und Konfigurationen in diesem Dokument entsprechen MySQL 5.6.24. Sie müssen sie für Ihr Datenbanksystem entsprechend anpassen.
- Stellen Sie sicher, dass Sie die neueste Version des AEM Forms-Add-On-Pakets installiert haben. Eine Liste der verfügbaren Pakete finden Sie im Artikel AEM Forms-Versionen.
- Das Beispielpaket funktioniert nur mit Übermittlungsaktionen für adaptive Formulare.
Beispiel installieren und konfigurieren set-up-and-configure-the-sample
Führen Sie die folgenden Schritte für alle Autoren- und Veröffentlichungsinstanzen durch, um das Beispiel zu installieren und zu konfigurieren :
-
Laden Sie das folgende aem-fp-db-integration-sample-pkg-6.1.2.zip-Paket auf Ihr Dateisystem herunter.
Beispielpaket zur Datenbankintegration:
-
Gehen Sie zu AEM Package Manager unter https://[host]:[port]/crx/packmgr/.
-
Klicken Sie auf Paket hochladen.
-
Navigieren Sie zum Paket aem-fp-db-integration-sample-pkg-6.1.2.zip, wählen Sie es aus und klicken Sie auf OK.
-
Klicken Sie neben dem Paket auf Installieren, um das Paket zu installieren.
-
Gehen Sie zur Seite Konfiguration der AEM-Webkonsole
unter https://[host]:[port]/system/console/configMgr. -
Klicken Sie, um die Konfiguration des Forms Portals für Entwurf und Übermittlung im Bearbeitungsmodus zu öffnen.
-
Geben Sie die Werte für die Eigenschaften an, wie in der folgenden Tabelle beschrieben:
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 6-row-3 Eigenschaft Beschreibung Wert Entwurfs-Datendienst des Formularportals Kennung für Entwurfs-Datendienst formsportal.sampledataservice Entwurfs-Metadatendienst des Formularportals Bezeichner für den Dienst für Entwurfs-Metadaten formsportal.samplemetadataservice Übermittlungs-Datendienst des Formularportals Bezeichner für den Dienst zur Datenübermittlung formsportal.sampledataservice Übermittlungs-Metadatendienst des Formularportals Bezeichner für den Dienst Metadatenübermittlung formsportal.samplemetadataservice Datendienst für ausstehende Signaturen des Formularportals Bezeichner für den Dienst für Daten zu ausstehende Signaturen formsportal.sampledataservice Metadatendienst für ausstehende Signaturen des Formularportals Bezeichner für den Dienst für Metadaten zu ausstehende Signaturen formsportal.samplemetadataservice note note NOTE Die Dienste werden nach ihren Namen aufgelöst, die als Wert für den aem.formsportal.impl.prop
-Schlüssel wie folgt erwähnt werden:code language-java @Service(value = {SubmitDataService.class, DraftDataService.class}) @Property(name = "aem.formsportal.impl.prop", value = "formsportal.sampledataservice") @Service(value = { SubmitMetadataService.class, DraftMetadataService.class }) @Property(name = "aem.formsportal.impl.prop", value = "formsportal.samplemetadataservice")
Sie können die Namen der Daten- und Metadatentabellen ändern.
So geben Sie einen anderen Namen für die Metadatentabelle an:
- Klicken Sie auf der Seite zur Web-Konsolenkonfiguration auf die Beispielimplementierung des Formularportal-Metadatendienstes. Sie können die Werte der Datenquelle, Metadaten/zusätzlichen Metadatentabellennamen ändern.
So geben Sie einen anderen Namen für die Datentabelle an:
- Klicken Sie auf der Seite zur Web-Konsolenkonfiguration auf die Beispielimplementierung des Formularportal-Datendienstes. Sie können die Werte der Datenquelle und Datentabellennamen ändern.
note note NOTE Wenn Sie die Tabellennamen ändern, geben Sie sie in der Formularportal-Konfiguration an. -
Belassen Sie die anderen Konfigurationen und klicken Sie auf Speichern.
-
Die Datenbankverbindung kann über die Apache Sling Connection Pooled Datenquelle erfolgen.
-
Klicken Sie für die Apache Sling-Verbindung in der Konfiguration der Web-Konsole im Bearbeitungsmodus auf Apache Sling Connection Pooled DataSource. Geben Sie die Werte für die Eigenschaften an, wie in der folgenden Tabelle beschrieben:
- Der JDBC-Treiber für MySQL wird nicht mit dem Beispiel geliefert. Stellen Sie sicher, dass Sie ihn bereitgestellt haben, und geben Sie die erforderlichen Informationen ein, um den JDBC-Verbindungs-Pool zu konfigurieren.
- Lassen Sie Ihre Autoren- und Veröffentlichungsinstanzen auf dieselbe Datenbank verweisen. Der Wert des URI-Feldes für die JDBC-Verbindung muss für alle Autoren- und Veröffentlichungsinstanzen gleich sein.
-
Belassen Sie die anderen Konfigurationen und klicken Sie auf Speichern.
-
Wenn bereits eine Tabelle im Datenbankschema vorhanden ist, fahren Sie mit dem nächsten Schritt fort.
Wenn Sie noch keine Tabelle im Datenbankschema haben, führen Sie die folgenden SQL-Anweisungen aus, um separate Tabellen für Daten, Metadaten und weitere Metadaten im Datenbankschema zu erstellen:
note note NOTE Sie benötigen nicht verschiedene Datenbanken für Autoren- und Veröffentlichungsinstanzen. Verwenden Sie dieselbe Datenbank für alle Autor- und Veröffentlichungsinstanzen. SQL-Anweisung für Datentabelle
code language-sql CREATE TABLE `data` ( `owner` varchar(255) DEFAULT NULL, `data` longblob, `metadataId` varchar(45) DEFAULT NULL, `id` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL-Anweisung für Metadatentabelle
code language-sql CREATE TABLE `metadata` ( `formPath` varchar(1000) DEFAULT NULL, `formType` varchar(100) DEFAULT NULL, `description` text, `formName` varchar(255) DEFAULT NULL, `owner` varchar(255) DEFAULT NULL, `enableAnonymousSave` varchar(45) DEFAULT NULL, `renderPath` varchar(1000) DEFAULT NULL, `nodeType` varchar(45) DEFAULT NULL, `charset` varchar(45) DEFAULT NULL, `userdataID` varchar(45) DEFAULT NULL, `status` varchar(45) DEFAULT NULL, `formmodel` varchar(45) DEFAULT NULL, `markedForDeletion` varchar(45) DEFAULT NULL, `showDorClass` varchar(255) DEFAULT NULL, `sling:resourceType` varchar(1000) DEFAULT NULL, `attachmentList` longtext, `draftID` varchar(45) DEFAULT NULL, `submitID` varchar(45) DEFAULT NULL, `id` varchar(60) NOT NULL, `profile` varchar(255) DEFAULT NULL, `submitUrl` varchar(1000) DEFAULT NULL, `xdpRef` varchar(1000) DEFAULT NULL, `agreementId` varchar(255) DEFAULT NULL, `nextSigners` varchar(255) DEFAULT NULL, `eSignStatus` varchar(45) DEFAULT NULL, `pendingSignID` varchar(45) DEFAULT NULL, `agreementDataId` varchar(255) DEFAULT NULL, `enablePortalSubmit` varchar(45) DEFAULT NULL, `submitType` varchar(45) DEFAULT NULL, `dataType` varchar(45) DEFAULT NULL, `jcr:lastModified` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ID_UNIQUE` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL-Anweisung für additionalmetadatatable
code language-sql CREATE TABLE `additionalmetadatatable` ( `value` text, `key` varchar(255) NOT NULL, `id` varchar(60) NOT NULL, PRIMARY KEY (`id`,`key`), CONSTRAINT 'additionalmetadatatable_fk' FOREIGN KEY (`id`) REFERENCES `metadata` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL-Anweisung für Kommentartabelle
code language-sql CREATE TABLE `commenttable` ( `commentId` varchar(255) DEFAULT NULL, `comment` text DEFAULT NULL, `ID` varchar(255) DEFAULT NULL, `commentowner` varchar(255) DEFAULT NULL, `time` varchar(255) DEFAULT NULL);
-
Wenn die Tabellen („data“, „metadata“ und „additionalmetadatatable“) bereits im Datenbankschema vorhanden sind, führen Sie folgende Abfragen zum Ändern von Tabellen aus:
SQL-Anweisung zum Ändern der Tabelle „data“
code language-sql ALTER TABLE `data` CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
SQL-Anweisung zum Ändern der Tabelle „metadata“
code language-sql ALTER TABLE metadata add markedForDeletion varchar(45) DEFAULT NULL
note note NOTE Die Metadatenanfrage „Tabelle ändern“ schlägt fehl, wenn Sie diese bereits ausführen und die Spalte „markedfordeletion“ ist in der Tabelle vorhanden. code language-sql ALTER TABLE metadata add agreementId varchar(255) DEFAULT NULL, add nextSigners varchar(255) DEFAULT NULL, add eSignStatus varchar(45) DEFAULT NULL, add pendingSignID varchar(45) DEFAULT NULL, add agreementDataId varchar(255) DEFAULT NULL, add enablePortalSubmit varchar(45) DEFAULT NULL, add submitType varchar(45) DEFAULT NULL, add dataType varchar(45) DEFAULT NULL;
code language-sql ALTER TABLE `metadata` CHANGE `formPath` `formPath` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `formType` `formType` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `description` `description` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `formName` `formName` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `renderPath` `renderPath` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `showDorClass` `showDorClass` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `sling:resourceType` `sling:resourceType` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `profile` `profile` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `submitUrl` `submitUrl` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `xdpRef` `xdpRef` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
SQL-Anweisung zum Ändern der Tabelle „additionalmetadatatable“
code language-sql ALTER TABLE `additionalmetadatatable` CHANGE `value` `value` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `key` `key` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
Die Beispielimplementierung ist jetzt konfiguriert. Sie können sie verwenden, um Ihre Entwürfe und Sendungen aufzulisten, während Sie alle Daten und Metadaten in einer Datenbank speichern. Als Nächstes geht es darum, wie im Beispiel die Daten- und Metadatendienste konfiguriert werden.
Installieren der Datei mysql-connector-java-5.1.39-bin.jar install-mysql-connector-java-bin-jar-file
Führen Sie die folgenden Schritte auf allen Autoren- und Veröffentlichungsinstanzen aus, um die Datei mysql-connector-java-5.1.39-bin.jar zu installieren:
-
Navigieren Sie zu
https://'[server]:[port]'/system/console/depfinder
und suchen Sie nach dem com.mysql.jdbc-Paket. -
Überprüfen Sie in der Spalte „Exportiert von“, ob das Paket von einem Paket exportiert wird.
Fahren Sie fort, wenn das Paket nicht von einem Paket exportiert wird.
-
Navigieren Sie zu
https://'[server]:[port]'/system/console/bundles
und klicken Sie auf Installieren/Aktualisieren. -
Klicken Sie auf Datei auswählen und wählen Sie die Datei mysql-connector-java-5.1.39-bin.jar. Aktivieren Sie außerdem die Kontrollkästchen Paket starten und Paket aktualisieren.
-
Klicken Sie auf Installieren oder Aktualisieren. Wenn dies abgeschlossen ist, starten Sie den Server neu.
-
(Nur Windows) Deaktivieren Sie die System-Firewall für Ihr Betriebssystem.
Beispielcode für Formularportaldaten und Metadatendienst sample-code-for-forms-portal-data-and-metadata-service
Die folgende Zip enthältFormsPortalSampleDataServiceImpl
undFormsPortalSampleMetadataServiceImpl
(Implementierungsklassen) für Benutzeroberflächen für Daten- und Metadatendienste. Zusätzlich enthält es alle Klassen, die für die Kompilierung der oben genannten Implementierungsklassen benötigt werden.
Überprüfen der Länge des Dateinamens verify-length-of-the-file-name
Die Datenbankimplementierung des Formularportals verwendet eine zusätzliche Metadatentabelle. Die Tabelle hat einen zusammengesetzten Primärschlüssel, der auf den Schlüssel- und ID-Spalten der Tabelle basiert. MySQL ermöglicht Primärschlüssel bis zu einer Länge von 255 Zeichen. Sie können das folgende Client-seitige Validierungsskript verwenden, um die Länge des Dateinamens zu überprüfen, der an das Datei-Widget angehängt ist. Die Überprüfung wird ausgeführt, wenn eine Datei angehängt ist. Das Skript, das im folgenden Verfahren bereitgestellt wird, zeigt eine Meldung an, wenn der Dateiname (einschließlich Erweiterung) mehr als 150 Zeichen hat. Sie können das Skript modifizieren, um es auf eine andere Anzahl von Zeichen zu überprüfen.
Führen Sie die folgenden Schritte aus, um eine Client-Bibliothek zu erstellen und das Skript zu verwenden:
-
Melden Sie sich bei CRXDE an und navigieren Sie zu „/etc/clientlibs/“.
-
Erstellen Sie einen Knoten vom Typ cq:ClientLibraryFolder und geben Sie einen Knotennamen an. Beispiel:
validation
.Klicken Sie auf Alle speichern.
-
Klicken Sie mit der rechten Maustaste auf den Knoten Neue Datei erstellen und legen Sie eine Datei mit der Erweiterung .txt an. Beispiel:
js.txt
Fügen Sie den folgenden Code zur neu erstellten .txt-Datei hinzu und klicken Sie auf Alle speichern.code language-javascript #base=util util.js
Im vorstehenden Code ist
util
der Name des Ordners undutil.js
der Name der Datei imutil
-Ordner. Der Ordnerutil
und die Dateiutil.js
werden in aufeinanderfolgenden Schritten erstellt. -
Klicken Sie mit der rechten Maustaste auf den Knoten
cq:ClientLibraryFolder
, der in Schritt 2 erstellt wurde, wählen Sie „Erstellen“ > „Ordner erstellen“. Erstellen Sie einen Ordner mit dem Namenutil
. Klicken Sie auf Alle speichern. Klicken Sie mit der rechten Maustaste auf den Ordnerutil
und wählen Sie „Erstelle“ > „Ordner erstellen“. Erstellen Sie eine Datei mit dem Namenutil.js
. Klicken Sie auf Alle speichern. -
Fügen Sie der Datei „POST.jsp“ folgenden Code hinzu und klicken Sie auf Alle speichern. Die Code-Validierungslänge des Dateinamens.
code language-javascript /* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and may be covered by U.S. and Foreign Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ (function () { var connectWithGuideBridge = function (gb) { gb.connect(function () { //For first time load window.guideBridge.on("elementValueChanged" , function(event, payload) { var component = payload.target; // Field whose value has changed if(component.name == 'fileAttachment' && component.parent) { var fileItems = $('#'+payload.target.parent.id).find(".guide-fu-fileItem"); for (i = 0;i<fileItems.length;i++) { var filename = $(fileItems[i]).find(".guide-fu-fileName").text(); //check whether it is previously attached file or a newly attached one if(filename.length > 150 && filename.indexOf("fp.attach.jsp") < 0) { window.alert("filename is larger than 150 : "+filename); $(fileItems[i]).find(".guide-fu-fileClose.close").click(); } } } }); }); }; if (window.guideBridge) { connectWithGuideBridge(window.guideBridge); } else { window.addEventListener("bridgeInitializeStart", function (event) { connectWithGuideBridge(event.detail.guideBridge); }); } })();
note note NOTE Das Skript ist für eine vorkonfigurierte Anlagen-Widget-Komponente. Wenn Sie das vorkonfigurierte Anlagen-Widget angepasst haben, ändern Sie das obige Skript, um entsprechende Änderungen zu implementieren. -
Fügen Sie dem in Schritt 2 erstellten Ordner die folgende Eigenschaft hinzu und klicken Sie auf Alle speichern.
-
Name: categories
-
Typ: String
-
Wert: fp.validation
-
Multi-Option: Aktiviert
-
-
Navigieren Sie zu
/libs/fd/af/runtime/clientlibs/guideRuntime
und fügen Sie den Wertfp.validation
an die Eigenschaft embed an. -
Navigieren Sie zu /libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA und hängen Sie den Wert
fp.validation
an die Eigenschaft embed an.note note NOTE Wenn Sie anstelle der Client-Bibliotheken guideRuntime und guideRuntimeWithXfa benutzerdefinierte Client-Bibliotheken verwenden, verwenden Sie den Kategorienamen, um die in diesem Verfahren erstellte Client-Bibliothek in Ihre zur Laufzeit geladenen benutzerdefinierten Bibliotheken einzubetten. -
Klicken Sie auf Alle speichern. Wenn der Dateiname größer als 150 (einschließlich Erweiterung) Zeichen ist, wird eine Meldung angezeigt.