Vous consultez actuellement l'aide de la version:
- 6.4
- 6.3
- 6.2
- Anciennes versions
Le composant brouillons et envois du portail AEM Forms permet aux utilisateurs d’enregistrer leurs formulaires en tant que brouillons et de les envoyer ultérieurement via n’importe quel périphérique. En outre, les utilisateurs peuvent visualiser leurs formulaires envoyés sur le portail. Pour activer cette fonctionnalité, AEM Forms fournit des services de données et de métadonnées pour stocker les données spécifiées par un utilisateur dans le formulaire et les métadonnées de formulaire associées aux brouillons et aux formulaires envoyés. Ces données sont stockées dans le référentiel CRX, par défaut. Toutefois, à mesure que les utilisateurs interagissent avec les formulaires via l’instance de publication AEM, qui se trouve généralement à l’extérieur du pare-feu d’entreprise, les organisations peuvent vouloir personnaliser le stockage de données pour qu’il soit plus sécurisé et fiable.
L’exemple présenté dans ce document est une implémentation de référence des services de données et de métadonnées personnalisés pour intégrer le composant brouillons et envois à une base de données. La base de données utilisée dans l’exemple d’implémentation est MySQL 5.6.24. Cependant, vous pouvez intégrer le composant brouillons et envois à n’importe quelle base de données de votre choix.
Remarque :
- Les exemples et les configurations décrits dans ce document correspondent à MySQL 5.6.24 et vous devez les remplacer de manière appropriée selon votre système de base de données.
- Vérifiez que vous avez installé la dernière version du package complémentaire AEM Forms. Pour obtenir la liste des packages disponibles, consultez l’article sur les versions d’AEM Forms.
Effectuez les étapes suivantes, sur toutes les instances d’auteur et de publication, pour installer et configurer l’exemple :
-
Propriété Description Valeur Service de données de brouillon du portail Forms Identifiant du service de données de brouillon formsportal.sampledataservice Service de métadonnées de brouillon du portail Forms Identifiant du service de métadonnées de brouillon formsportal.samplemetadataservice Service de données d’envoi du portail Forms Identifiant du service de données d’envoi formsportal.sampledataservice Service de métadonnées d’envoi du portail Forms Identifiant du service de métadonnées d’envoi formsportal.samplemetadataservice Service de données de signature en attente du portail Forms Identificateur pour le service de données de signature en attente formsportal.sampledataservice Service de métadonnées de signature en attente du portail Forms Identificateur du service de métadonnées de signature en attente formsportal.samplemetadataservice Remarque :
Les services sont résolus par leurs noms indiqués comme valeur de la clé aem.formsportal.impl.prop comme suit :
@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")
Vous pouvez modifier les noms des tableaux de données et de métadonnées.
Pour spécifier un autre nom pour le tableau de métadonnées :
- Dans la configuration de la console Web, recherchez et cliquez sur Exemple d’implémentation de service de métadonnées du portail de formulaires. Vous pouvez modifier les valeurs de la source de données, et le nom du tableau des métadonnées/métadonnées supplémentaires.
Pour spécifier un autre nom pour le tableau de données :
- Dans la configuration de la console Web, recherchez et cliquez sur Exemple d’implémentation de service de données du portail de formulaires. Vous pouvez modifier les valeurs de la source de données, et le nom du tableau de données.
Remarque : si vous modifiez les noms du tableau, livrez-les dans la configuration du portail de formulaires.
-
Pour la connexion Apache Sling, recherchez le pool de connexions Apache Sling Days Commons en mode d’édition dans la configuration de la console Web. Spécifiez les valeurs des propriétés comme décrit dans le tableau suivant :
Propriété Valeur Nom de la source de données Un nom de source de données pour filtrer les pilotes du pool de la source de données
Remarque : l’exemple d’implémentation utilise FormsPortal comme nom de la source de données.
Classe de pilote JDBC com.mysql.jdbc.Driver URI de connexion JDBC jdbc:mysql://[hôte]:[port]/[nom_schéma] Nom d’utilisateur : Un nom d’utilisateur pour s’authentifier et effectuer des opérations sur les tableaux de base de données mot de passe. Mot de passe associé au nom d’utilisateur isolation de transaction READ_COMMITTED Nombre maximum de connexions actives 1000 Nombre maximum de connexions inactives 100 Nombre minimum de connexions inactives 10 Taille initiale 10 Attente maximale 100000 Test lors de l’emprunt Coché Tester lors de l’inactivité Coché Requête de validation Les valeurs d’exemple sont SELECT 1(mysql), select 1 from dual(oracle), SELECT 1(MS Sql Server) (validationQuery) Délai d’expiration de la requête de validation 10 000 Remarque :
- Le pilote JDBC pour MySQL n’est pas fourni avec l’exemple. Assurez-vous de vous l’être procuré et spécifiez les informations requises pour configurer le pool de connexions JDBC.
- Pointez vos instances d’auteur et de publication pour utiliser la même base de données. La valeur du champ URI de la connexion JDBC doit être identique pour toutes les instances d’auteur et de publication.
-
Si vous disposez déjà d’un tableau dans le schéma de la base de données, passez à l’étape suivante.
Sinon, si vous ne possédez pas déjà un tableau dans le schéma de la base de données, exécutez les instructions SQL suivantes pour créer des tableaux distincts pour les données, les métadonnées et les métadonnées supplémentaires dans le schéma de base de données :
Remarque :
Vous n’avez pas besoin de bases de données différentes pour les instances d’auteur et de publication. Utilisez la même base de données sur toutes les instances d’auteur et de publication.
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;
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;
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;
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);
-
Si vous avez déjà des tableaux (données, métadonnées et métadonnées supplémentaires) dans le schéma de la base de données, exécutez les requêtes de modification du tableau suivant :
ALTER TABLE `data` CHANGE `owner` `owner` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
ALTER TABLE metadata add markedForDeletion varchar(45) DEFAULT NULL
Remarque :
La requête d’ajout des métadonnées ALTER TABLE échoue si vous l’avez déjà effectuée et la colonne markedforDeletion est présente dans le tableau.
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;
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;
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;
L’exemple d’implémentation est désormais configuré, et vous pouvez l’utiliser pour répertorier vos brouillons et envois tout en stockant toutes les données et métadonnées dans une base de données. Voyons maintenant comment les services de données et de métadonnées sont configurés dans l’exemple.
Effectuez les étapes suivantes, sur toutes les instances d’auteur et de publication, pour installer le fichier mysql-connector-java-5.1.39-bin.jar :
Le fichier zip suivant contient FormsPortalSampleDataServiceImpl et FormsPortalSampleMetadataServiceImpl (classes d’implémentation) pour les interfaces de service de données et de métadonnées. En outre, il contient toutes les classes requises pour la compilation des classes d’implémentation mentionnées ci-dessus.
Telechargement
L’implémentation de la base de données du portail Forms utilise un tableau de métadonnées supplémentaire. Le tableau a une clé principale composite basée sur les colonnes Key et ID du tableau. MySQL autorise les clés principales jusqu’à 255 caractères. Vous pouvez utiliser le script de validation côté client suivant pour vérifier la longueur du nom de fichier joint au widget de fichier. La validation est exécutée lorsqu’un fichier est joint. Le script fourni dans la procédure suivante affiche un message lorsque le nom de fichier est supérieur à 150 (extension comprise). Vous pouvez modifier le script pour vérifier un nombre différent de caractères.
Effectuez les étapes suivantes pour créer une bibliothèque cliente et utilisez le script :
-
Cliquez avec le bouton droit sur le nœud, cliquez sur Créer un nouveau fichier et créez un fichier avec l’extension .txt. Par exemple, js.txt Ajoutez le code suivant au fichier .txt nouvellement créé et cliquez sur Enregistrer tout.
#base=util
util.jsDans le code ci-dessus, util est le nom du dossier etutil.js est le nom du fichier dans le dossier util. Le dossier util et le fichier util.js sont créés dans les étapes suivantes.
-
Cliquez avec le bouton droit sur le nœud cq:ClientLibraryFolder créé à l’étape 2 et sélectionnez Créer > Créer un dossier. Créez un dossier nommé util. Cliquez sur Enregistrer tout. Cliquez avec le bouton droit sur le dossier util et sélectionnez Créer > Créer un fichier. Créez un fichier nommé util.js. Cliquez sur Enregistrer tout.
-
Ajoutez le code suivant au fichier util.js et cliquez sur Enregistrer tout. Le code valide la longueur du nom de fichier.
/* * 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); }); } })();
Remarque :
Le script est destiné au composant de widget de pièce jointe en standard. Si vous avez personnalisé le widget de pièce jointe en standard, modifiez le script ci-dessus pour incorporer les modifications respectives.
-
Accédez à /libs/fd/af/runtime/clientlibs/guideRuntimeWithXFA et ajoutez la valeur fp.validation à la propriété embed.
Remarque :
Si vous utilisez des bibliothèques client personnalisées au lieu des bibliothèques client guideRuntime et guideRuntimeWithXfa, utilisez le nom de catégorie pour intégrer la bibliothèque client créée dans cette procédure à vos bibliothèques personnalisées chargées lors de l’exécution.