Gérer des formulaires envoyés handling-submitted-forms
Les exemples et les échantillons de ce document sont réservés à l’environnement AEM Forms sur JEE.
Les applications web permettant à l’utilisateur de remplir des formulaires interactifs nécessitent que les données soient renvoyées au serveur. Le service Forms vous permet de récupérer les données que l’utilisateur a saisies dans un formulaire interactif. Une fois les données récupérées, vous pouvez les traiter pour répondre aux besoins de votre entreprise. Par exemple, vous pouvez stocker les données dans une base de données, les envoyer à une autre application ou à un autre service, les fusionner dans une conception de formulaire, les afficher dans un navigateur web, etc.
Les données de formulaire sont envoyées au service Forms au format XML ou PDF, une option définie dans Designer. Un formulaire envoyé au format XML vous permet d’extraire des valeurs de données de champ individuelles. En d’autres termes, vous pouvez extraire la valeur de chaque champ de formulaire que l’utilisateur a saisi dans le formulaire. Un formulaire envoyé en tant que données PDF est une donnée binaire et non une donnée XML. Vous pouvez enregistrer le formulaire en tant que fichier PDF ou l’envoyer à un autre service. Si vous souhaitez extraire les données d’un formulaire envoyé au format XML, puis utiliser les données du formulaire pour créer un document PDF, appelez une autre opération AEM Forms. (Voir Créer des documents PDF avec des données XML envoyées)
Le diagramme suivant montre les données envoyées à une servlet Java nommée HandleData
à partir d’un formulaire interactif affiché dans un navigateur web.
Le tableau suivant explique les étapes du diagramme.
HandleData
sous forme de données XML.HandleData
contient la logique d’application pour récupérer les données.Gérer les données XML envoyées handling-submitted-xml-data
Lorsque les données de formulaire sont envoyées au format XML, vous pouvez récupérer les données XML qui représentent les données envoyées. Tous les champs de formulaire apparaissent sous la forme de nœuds dans un schéma XML. Les valeurs de nœud correspondent aux valeurs que l’utilisateur a renseignées. Prenons l’exemple d’un formulaire de prêt dans lequel chaque champ du formulaire apparaît comme un nœud au sein des données XML. La valeur de chaque nœud correspond à la valeur qu’un utilisateur renseigne. Supposons qu’un utilisateur renseigne le formulaire de prêt avec les données affichées dans le formulaire suivant.
L’illustration suivante présente les données XML correspondantes récupérées à l’aide de l’API client du service Forms.
Les champs du formulaire de prêt. Ces valeurs peuvent être récupérées
à l’aide des classes XML Java.
Gérer des données PDF envoyées handling-submitted-pdf-data
Prenons l’exemple d’une application web qui appelle le service Forms. Une fois que le service Forms a rendu un formulaire PDF interactif dans un navigateur web client, l’utilisateur l’a rempli et l’a renvoyé en tant que données PDF. Lorsque le service Forms reçoit les données PDF, il peut les envoyer à un autre service ou les enregistrer en tant que fichier PDF. Le diagramme suivant illustre le flux logique de l’application.
Le tableau suivant décrit les étapes de ce diagramme.
Gérer les données UTF-16 de l’URL envoyées handling-submitted-url-utf-16-data
Si les données de formulaire sont envoyées sous la forme de données UTF-16 d’URL, l’ordinateur client nécessite Adobe Reader, Acrobat 8.1 ou une version ultérieure. En outre, si la conception de formulaire contient un bouton d’envoi contenant des données codées URL (HTTP Post) et que l’option de codage des données est UTF-16, la conception de formulaire doit être modifiée dans un éditeur de texte tel que le Bloc-notes. Vous pouvez définir l’option de codage sur UTF-16LE
ou UTF-16BE
pour le bouton d’envoi. Designer ne fournit pas cette fonctionnalité.
Résumé des étapes summary-of-steps
Pour gérer les formulaires envoyés, effectuez les tâches suivantes :
- Incluez les fichiers de projet.
- Créez un objet API client Forms.
- Récupérez les données de formulaire.
- Déterminez si l’envoi du formulaire contient des pièces jointes.
- Traitez les données envoyées.
Inclure les fichiers de projet
Incluez les fichiers nécessaires dans votre projet de développement. Si vous créez une application cliente à l’aide de Java, incluez les fichiers JAR nécessaires. Si vous utilisez des services Web, veillez à inclure les fichiers proxy.
Créer un objet API client Forms
Avant d’effectuer par programmation une opération d’API client de service Forms, vous devez créer un client de service Forms. Si vous utilisez l’API Java, créez un objet FormsServiceClient
. Si vous utilisez l’API Web Service Forms, créez un objet FormsService
.
Récupérer des données de formulaire
Pour récupérer les données de formulaire envoyées, vous devez appeler la méthode processFormSubmission
de l’objet FormsServiceClient
. Lorsque vous appelez cette méthode, vous devez spécifier le type de contenu du formulaire envoyé. Lorsque des données sont envoyées d’un navigateur web client au service Forms, elles peuvent être envoyées au format XML ou PDF. Pour récupérer les données saisies dans les champs du formulaire, les données peuvent être envoyées au format XML.
Vous pouvez également récupérer les champs de formulaire d’un formulaire envoyé en tant que données PDF en définissant les options d’exécution suivantes :
- Transmettez la valeur suivante à la méthode
processFormSubmission
en tant que paramètre de type de contenu :CONTENT_TYPE=application/pdf
. - Définissez la valeur
PDFToXDP
de l’objetRenderOptionsSpec
surtrue
. - Définissez la valeur
ExportDataFormat
de l’objetRenderOptionsSpec
surXMLData
.
Vous spécifiez le type de contenu du formulaire envoyé lorsque vous appelez la méthode processFormSubmission
. La liste suivante spécifie les valeurs de type de contenu applicables :
- text/xml : représente le type de contenu à utiliser lorsqu’un formulaire PDF envoie les données de formulaire au format XML.
- application/x-www-form-urlencoded : représente le type de contenu à utiliser lorsqu’un formulaire HTML envoie des données au format XML.
- application/pdf : représente le type de contenu à utiliser lorsqu’un formulaire PDF envoie des données en tant que PDF.
application/pdf
… Le guide de gestion des formulaires PDF envoyés au format XML à l’aide du démarrage rapide de l’API Java explique comment gérer les données XML envoyées à partir d’un formulaire PDF. Le type de contenu spécifié dans ce démarrage rapide est text/xml
. De même, le guide de gestion des formulaires HTML envoyés au format XML à l’aide du démarrage rapide de l’API Java montre comment gérer les données XML envoyées à partir d’un formulaire HTML. Le type de contenu spécifié dans ce démarrage rapide est application/x-www-form-urlencoded.Vous récupérez les données de formulaire qui ont été publiées sur le service Forms et déterminez leur statut de traitement. En d’autres termes, lorsque les données sont envoyées au service Forms, cela ne signifie pas nécessairement que le service Forms a terminé le traitement des données et qu’elles sont prêtes à être traitées. Par exemple, les données peuvent être envoyées au service Forms afin qu’un calcul puisse être effectué. Une fois le calcul terminé, le formulaire est rendu à l’utilisateur avec les résultats du calcul affichés. Avant de traiter les données envoyées, il est recommandé de déterminer si le service Forms a terminé le traitement des données.
Le service Forms renvoie les valeurs suivantes pour indiquer s’il a terminé le traitement des données :
- 0 (Envoyer) : les données envoyées sont prêtes à être traitées.
- 1 (Calculer) : le service Forms a effectué une opération de calcul sur les données et les résultats doivent être générés et remis à l’utilisateur.
- 2 (Valider) : le service Forms a validé les données de formulaire et les résultats doivent être générés et remis à l’utilisateur.
- 3 (Suivant) : la page actuelle a été modifiée avec des résultats qui doivent être écrits dans l’application cliente.
- 4 (Précédent) : la page actuelle a été modifiée avec des résultats qui doivent être écrits dans l’application cliente.
Déterminer si l’envoi du formulaire contient des pièces jointes
Les formulaires envoyés au service Forms peuvent contenir des pièces jointes. Par exemple, à l’aide du volet de pièces jointes intégré d’Acrobat, un utilisateur peut sélectionner des pièces jointes à envoyer avec le formulaire. Un utilisateur peut également sélectionner des pièces jointes à l’aide d’une barre d’outils HTML générée avec un fichier HTML.
Après avoir déterminé si un formulaire contient des pièces jointes, vous pouvez traiter les données. Par exemple, vous pouvez enregistrer la pièce jointe dans le système de fichiers local.
Traiter les données envoyées
Selon le type de contenu des données envoyées, vous pouvez extraire des valeurs de champ de formulaire individuel des données XML envoyées ou enregistrer les données PDF envoyées sous forme de fichier PDF (ou les envoyer à un autre service). Pour extraire des champs de formulaire individuels, convertissez les données XML envoyées en une source de données XML, puis récupérez les valeurs de source de données XML à l’aide de classes org.w3c.dom
.
Voir également
Inclusion des fichiers de bibliothèque Java d’AEM Forms
Réglage des propriétés de la connexion
Démarrages rapides de l’API Forms Service
Gérer les formulaires envoyés à l’aide de l’API Java handle-submitted-forms-using-the-java-api
Gérez un formulaire envoyé à l’aide de l’API Forms (Java) :
-
Inclure les fichiers du projet
Incluez les fichiers clients JAR, tels qu’adobe-forms-client.jar, dans votre projet Java Classpath.
-
Créer un objet API Forms client
- Créez un objet
ServiceClientFactory
qui contient des propriétés de connexion. - Créez un objet
FormsServiceClient
en utilisant son constructeur et en transmettant l’objetServiceClientFactory
.
- Créez un objet
-
Récupérer les données de formulaire
- Pour récupérer les données de formulaire publiées sur un servlet Java, créez un objet
com.adobe.idp.Document
en utilisant son constructeur et en appelant la méthodegetInputStream
de l’objetjavax.servlet.http.HttpServletResponse
depuis l’intérieur du constructeur. - Créez un objet
RenderOptionsSpec
en utilisant son constructeur. Définissez la valeur du paramètre régional en appelant la méthodesetLocale
de l’objetRenderOptionsSpec
et en transmettant d’une valeur de chaîne spécifiant la valeur du paramètre régional.
note note NOTE Vous pouvez demander au service Forms de créer des données XDP ou XML à partir du contenu du PDF envoyé en appelant la méthode setPDF2XDP
de l’objetRenderOptionsSpec
et en transmettanttrue
ainsi qu’en appelantsetXMLData
et en transmettanttrue
. Vous pouvez ensuite appeler la méthodegetOutputXML
de l’objetFormsResult
pour récupérer les données XML correspondant aux données XDP/XML. (L’objetFormsResult
est renvoyé par la méthodeprocessFormSubmission
, qui est expliquée dans la sous-étape suivante.)-
Appelez la méthode
processFormSubmission
de l’objetFormsServiceClient
et transmettez les valeurs suivantes :- Objet
com.adobe.idp.Document
contenant les données de formulaire. - Une valeur de chaîne qui indique les variables d’environnement, y compris tous les en-têtes HTTP pertinents. Spécifiez le type de contenu à gérer. Pour gérer les données XML, spécifiez la valeur de chaîne suivante pour ce paramètre :
CONTENT_TYPE=text/xml
. Pour gérer les données PDF, spécifiez la valeur de chaîne suivante pour ce paramètre :CONTENT_TYPE=application/pdf
. - Valeur de chaîne spécifiant la valeur d’en-tête
HTTP_USER_AGENT
, par exempleMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
. Cette valeur de paramètre est facultative. - Objet
RenderOptionsSpec
stockant les options d’exécution.
La méthode
processFormSubmission
renvoie un objetFormsResult
contenant les résultats de l’envoi du formulaire. - Objet
-
Déterminez si le service Forms a terminé le traitement des données de formulaire en appelant la méthode
getAction
de l’objetFormsResult
. Si cette méthode renvoie la valeur0
, les données sont prêtes à être traitées.
- Pour récupérer les données de formulaire publiées sur un servlet Java, créez un objet
-
Déterminer si le formulaire envoyé contient des pièces jointes
- Appelez la méthode
getAttachments
de l’objetFormsResult
. Cette méthode renvoie un objetjava.util.List
contenant les fichiers qui ont été envoyés avec le formulaire. - Effectuez une itération à l’aide de l’objet
java.util.List
pour déterminer s’il existe des pièces jointes. S’il existe des pièces jointes, chaque élément est une instancecom.adobe.idp.Document
. Vous pouvez enregistrer les pièces jointes en appelant la méthodecopyToFile
de l’objetcom.adobe.idp.Document
et en transmettant un objetjava.io.File
.
note note NOTE Cette étape ne s’applique que si le formulaire est envoyé en tant que PDF. - Appelez la méthode
-
Traiter les données envoyées
-
Si le type de contenu des données est
application/vnd.adobe.xdp+xml
outext/xml
, créez une logique d’application pour récupérer les valeurs des données XML.- Créez un objet
com.adobe.idp.Document
en appelant la méthodegetOutputContent
de l’objetFormsResult
. - Créez un objet
java.io.InputStream
en appelant le constructeurjava.io.DataInputStream
et en transmettant l’objetcom.adobe.idp.Document
. - Créez un objet
org.w3c.dom.DocumentBuilderFactory
en appelant la méthodenewInstance
de l’objet statiqueorg.w3c.dom.DocumentBuilderFactory
. - Créez un objet
org.w3c.dom.DocumentBuilder
en appelant la méthodenewDocumentBuilder
de l’objetorg.w3c.dom.DocumentBuilderFactory
. - Créez un objet
org.w3c.dom.Document
en appelant la méthodeparse
de l’objetorg.w3c.dom.DocumentBuilder
et en transmettant l’objetjava.io.InputStream
. - Récupérez la valeur de chaque nœud dans le document XML. Une façon d’accomplir cette tâche est de créer une méthode personnalisée qui accepte deux paramètres : l’objet
org.w3c.dom.Document
et le nom du nœud dont vous souhaitez récupérer la valeur. Cette méthode renvoie une valeur de chaîne représentant la valeur du nœud. Dans l’exemple de code qui suit ce processus, cette méthode personnalisée est appeléegetNodeText
. Le corps de cette méthode est affiché.
- Créez un objet
-
Si le type de contenu des données est
application/pdf
, créez une logique d’application pour enregistrer les données PDF envoyées sous forme de fichier PDF.- Créez un objet
com.adobe.idp.Document
en appelant la méthodegetOutputContent
de l’objetFormsResult
. - Créez un objet
java.io.File
en utilisant son constructeur public. Veillez à spécifier PDF comme extension de nom du fichier. - Renseignez le fichier PDF en appelant la méthode
copyToFile
de l’objetcom.adobe.idp.Document
et en transmettant l’objetjava.io.File
.
- Créez un objet
-
Voir également
Gérer les données PDF envoyées en utilisant l’API du service web handle-submitted-pdf-data-using-the-web-service-api
Gérez un formulaire envoyé en utilisant l’API des formulaires (service Web) :
-
Inclure les fichiers du projet
- Créez des classes proxy Java qui utilisent le service WSDL de Forms.
- Incluez les classes proxy Java dans le chemin d’accès de classe.
-
Créer un objet API Forms client
Créez un objet
FormsService
et définissez les valeurs d’authentification. -
Récupérer les données de formulaire
-
Pour récupérer les données de formulaire qui ont été publiées sur un servlet Java, créez un objet
BLOB
en utilisant son constructeur. -
Créez un objet
java.io.InputStream
en appelant la méthodegetInputStream
de l’objetjavax.servlet.http.HttpServletResponse
. -
Créez un objet
java.io.ByteArrayOutputStream
en utilisant son constructeur et en transmettant la longueur de l’objetjava.io.InputStream
. -
Copiez le contenu de l’objet
java.io.InputStream
dans l’objetjava.io.ByteArrayOutputStream
. -
Créez un tableau d’octets en appelant la méthode
toByteArray
de l’objetjava.io.ByteArrayOutputStream
. -
Renseignez l’objet
BLOB
en appelant sa méthodesetBinaryData
et en transmettant le tableau d’octets comme argument. -
Créez un objet
RenderOptionsSpec
en utilisant son constructeur. Définissez la valeur du paramètre régional en appelant la méthodesetLocale
de l’objetRenderOptionsSpec
et en transmettant une valeur de chaîne qui spécifie la valeur du paramètre régional. -
Appelez la méthode
processFormSubmission
de l’objetFormsService
et transmettez les valeurs suivantes :- Objet
BLOB
contenant les données de formulaire. - Une valeur de chaîne qui indique les variables d’environnement, y compris tous les en-têtes HTTP pertinents. Spécifiez le type de contenu à gérer. Pour gérer les données XML, spécifiez la valeur de chaîne suivante pour ce paramètre :
CONTENT_TYPE=text/xml
. Pour gérer les données PDF, spécifiez la valeur de chaîne suivante pour ce paramètre :CONTENT_TYPE=application/pdf
. - Une valeur de chaîne qui spécifie la valeur de l’en-tête
HTTP_USER_AGENT
, par exemple,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
. - Un objet
RenderOptionsSpec
qui stocke les options d’exécution. - Un objet
BLOBHolder
vide qui est renseigné par la méthode. - Un objet
javax.xml.rpc.holders.StringHolder
vide qui est renseigné par la méthode. - Un objet
BLOBHolder
vide qui est renseigné par la méthode. - Un objet
BLOBHolder
vide qui est renseigné par la méthode. - Un objet
javax.xml.rpc.holders.ShortHolder
vide qui est renseigné par la méthode. - Un objet
MyArrayOf_xsd_anyTypeHolder
vide qui est renseigné par la méthode. Ce paramètre est utilisé pour stocker les pièces jointes envoyées avec le formulaire. - Un objet
FormsResultHolder
vide qui est renseigné par la méthode avec le formulaire envoyé.
La méthode
processFormSubmission
renseigne le paramètreFormsResultHolder
avec les résultats de l’envoi du formulaire. - Objet
-
Déterminez si le service Forms a fini de traiter les données du formulaire en appelant la méthode
getAction
de l’objetFormsResult
. Si cette méthode renvoie la valeur0
, les données du formulaire sont prêtes à être traitées. Vous pouvez obtenir un objetFormsResult
en récupérant la valeur du membre de donnéesvalue
de l’objetFormsResultHolder
.
-
-
Déterminer si le formulaire envoyé contient des pièces jointes
Obtenez la valeur du membre de données
value
de l’objetMyArrayOf_xsd_anyTypeHolder
(l’objetMyArrayOf_xsd_anyTypeHolder
a été transmis à la méthodeprocessFormSubmission
). Ce membre de données renvoie un tableau deObjects
. Chaque élément du tableauObject
est unObject
qui correspond aux fichiers qui ont été envoyés avec le formulaire. Vous pouvez obtenir chaque élément du tableau et le convertir en un objetBLOB
. -
Traiter les données envoyées
-
Si le type de contenu des données est
application/vnd.adobe.xdp+xml
outext/xml
, créez une logique d’application pour récupérer les valeurs des données XML.- Créez un objet
BLOB
en appelant la méthodegetOutputContent
de l’objetFormsResult
. - Créez un tableau d’octets en appelant la méthode
getBinaryData
de l’objetBLOB
. - Créez un objet
java.io.InputStream
en appelant le constructeurjava.io.ByteArrayInputStream
et en transmettant le tableau d’octets. - Créez un objet
org.w3c.dom.DocumentBuilderFactory
en appelant la méthodenewInstance
de l’objet statiqueorg.w3c.dom.DocumentBuilderFactory
. - Créez un objet
org.w3c.dom.DocumentBuilder
en appelant la méthodenewDocumentBuilder
de l’objetorg.w3c.dom.DocumentBuilderFactory
. - Créez un objet
org.w3c.dom.Document
en appelant la méthodeparse
de l’objetorg.w3c.dom.DocumentBuilder
et en transmettant l’objetjava.io.InputStream
. - Récupérez la valeur de chaque nœud dans le document XML. Une façon d’accomplir cette tâche est de créer une méthode personnalisée qui accepte deux paramètres : l’objet
org.w3c.dom.Document
et le nom du nœud dont vous souhaitez récupérer la valeur. Cette méthode renvoie une valeur de chaîne représentant la valeur du nœud. Dans l’exemple de code qui suit ce processus, cette méthode personnalisée est appeléegetNodeText
. Le corps de cette méthode est affiché.
- Créez un objet
-
Si le type de contenu des données est
application/pdf
, créez une logique d’application pour enregistrer les données PDF envoyées sous forme de fichier PDF.- Créez un objet
BLOB
en appelant la méthodegetOutputContent
de l’objetFormsResult
. - Créez un tableau d’octets en appelant la méthode
getBinaryData
de l’objetBLOB
. - Créez un objet
java.io.File
en utilisant son constructeur public. Veillez à spécifier PDF comme extension de nom du fichier. - Créez un objet
java.io.FileOutputStream
en utilisant son constructeur et en transmettant l’objetjava.io.File
. - Renseignez le fichier PDF en appelant la méthode
write
de l’objetjava.io.FileOutputStream
et en transmettant le tableau d’octets.
- Créez un objet
-
Voir également
Appeler AEM Forms en utilisant le codage Base64