Show Menu
SUJETS×

Création de de qui rend les formulaires

Création de de qui rend les formulaires

Vous pouvez créer une application Web qui utilise des servlets Java pour appeler le service Forms et générer des formulaires. L’utilisation d’une servlet Java™ présente l’avantage de permettre d’écrire la valeur renvoyée du processus dans un navigateur Web client. En d’autres termes, une servlet Java peut être utilisée comme lien entre le service Forms qui renvoie un formulaire et un navigateur Web client.
Cette section décrit comment créer une application Web qui utilise une servlet Java qui appelle le service Forms et effectue le rendu des formulaires à partir de fragments. (See Rendering Forms Based on Fragments .)
A l’aide d’une servlet Java, vous pouvez écrire un formulaire dans un navigateur Web client afin qu’un client puisse et saisir des données dans le formulaire. Après avoir rempli le formulaire avec des données, l’utilisateur Web clique sur un bouton d’envoi situé sur le formulaire pour renvoyer les informations à la servlet Java, où les données peuvent être récupérées et traitées. Par exemple, les données peuvent être envoyées à un autre processus.
Cette section explique comment créer une application Web qui permet à l’utilisateur de sélectionner soit des données de formulaire américaines, soit des données de formulaire canadiennes, comme le montre l’illustration suivante.
Le formulaire généré est un formulaire basé sur des fragments. Autrement dit, si l’utilisateur sélectionne des données américaines, le formulaire renvoyé utilise des fragments basés sur des données américaines. Par exemple, le pied de page du formulaire contient une adresse américaine, comme illustré ci-dessous.
De même, si l'utilisateur sélectionne des données canadiennes, le formulaire renvoyé contient une adresse canadienne, comme le montre l'illustration suivante.
Pour plus d’informations sur la création de conceptions de formulaire basées sur des fragments, voir Forms Designer .
Exemples de fichiers
Cette section utilise des fichiers d’exemple situés à l’emplacement suivant :
<Répertoire d’installation de Forms Designer>/Samples/Forms/Purchase Order/Form Fragments
où <répertoire d’installation > correspond au chemin d’installation. Aux fins de l’application cliente, le fichier Purchase Order Dynamic.xdp a été copié à partir de cet emplacement d’installation et déployé dans une application Forms nommée Applications/FormsApplication . Le fichier Purchase Order Dynamic.xdp est placé dans un dossier nommé FormsFolder. De même, les fragments sont placés dans le dossier intitulé Fragments, comme illustré ci-dessous.
Pour accéder à la conception de formulaire Purchase Order Dynamic.xdp, spécifiez Applications/FormsApplication/1.0/FormsFolder/Purchase Order Dynamic.xdp le nom du formulaire (premier paramètre transmis à la renderPDFForm méthode) et repository:/// la valeur URI racine du contenu.
Les fichiers de données XML utilisés par l’application Web ont été déplacés du dossier Data vers C:\Adobe (le système de fichiers qui appartient au serveur d’applications J2EE hébergeant AEM Forms). Les noms de fichier sont Purchase Order Canada.xml et Purchase Order US.xml .
Pour plus d’informations sur la création d’une application Forms à l’aide de Workbench, voir Aide de Workbench.

Résumé des étapes

Pour créer des applications Web qui génèrent des formulaires basés sur des fragments, procédez comme suit :
  1. Créez un projet Web.
  2. Créez une logique d’application Java qui représente la servlet Java.
  3. Créez la page Web de l’application Web.
  4. Compressez l'application Web dans un fichier WAR.
  5. Déployez le fichier WAR sur le serveur d’applications J2EE.
  6. Testez votre application Web.
Certaines de ces étapes dépendent de l’application J2EE sur laquelle AEM Forms est déployé. Par exemple, la méthode que vous utilisez pour déployer un fichier WAR dépend du serveur d’applications J2EE que vous utilisez. Cette section suppose qu’AEM Forms est déployé sur JBoss®.

Creating a web project

La première étape pour créer une application Web contenant une servlet Java pouvant appeler le service Forms consiste à créer un projet Web. L’IDE Java sur lequel ce est basé est Eclipse 3.3. A l’aide de l’IDE Eclipse, créez un projet Web et ajoutez les fichiers JAR requis à votre projet. Enfin, ajoutez une page HTML nommée index.html et une servlet Java à votre projet.
Le suivant spécifie les fichiers JAR que vous devez ajouter à votre projet Web :
  • adobe-forms-client.jar
  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-utilities.jar
For the location of these JAR files, see Including AEM Forms Java library files .
Pour créer un projet Web :
  1. Eclipse et cliquez sur Fichier > Nouveau projet .
  2. Dans la boîte de dialogue Nouveau projet , sélectionnez Web > Projet Web dynamique.
  3. Tapez FragmentsWebApplication le nom de votre projet, puis cliquez sur Terminer .
Pour ajouter les fichiers JAR requis à votre projet :
  1. Dans la fenêtre Explorateur de projets, cliquez avec le bouton droit sur le FragmentsWebApplication projet et sélectionnez Propriétés .
  2. Cliquez sur Chemin de génération Java, puis sur l’onglet Bibliothèques .
  3. Cliquez sur le bouton Ajouter fichiers JAR externes et accédez aux fichiers JAR à inclure.
Pour ajouter une servlet Java à votre projet :
  1. Dans la fenêtre Explorateur de projets, cliquez avec le bouton droit sur le FragmentsWebApplication projet et sélectionnez Nouveau > Autre .
  2. Développez le dossier Web , sélectionnez Servlet , puis cliquez sur Suivant .
  3. Dans la boîte de dialogue Créer un servlet, saisissez RenderFormFragment le nom de la servlet, puis cliquez sur Terminer .
Pour ajouter une page HTML à votre projet :
  1. Dans la fenêtre Explorateur de projets, cliquez avec le bouton droit sur le FragmentsWebApplication projet et sélectionnez Nouveau > Autre .
  2. Développez le dossier Web , sélectionnez HTML , puis cliquez sur Suivant .
  3. Dans la boîte de dialogue Nouveau code HTML, saisissez index.html le nom du fichier, puis cliquez sur Terminer .
Pour plus d’informations sur la création de la page HTML qui appelle la servlet RenderFormFragment Java, voir Création de la page Web.

Création de la logique d’application Java pour la servlet

Vous créez une logique d’application Java qui appelle le service Forms depuis la servlet Java. Le code suivant illustre la syntaxe du servlet RenderFormFragment Java :
     public class RenderFormFragment extends HttpServlet implements Servlet {
         public void doGet(HttpServletRequest req, HttpServletResponse resp
         throws ServletException, IOException {
         doPost(req,resp);
 
         }
         public void doPost(HttpServletRequest req, HttpServletResponse resp
         throws ServletException, IOException {
             //Add code here to invoke the Forms service
             }

Normalement, vous ne placez pas le code client dans une servlet Java doGet ou une doPost méthode Java. Une meilleure pratique de programmation consiste à placer ce code dans une classe distincte, à instancier la classe à partir de la doPost (ou doGet ) méthode(s), et à appeler les méthodes appropriées. Toutefois, pour la concision du code, les exemples de code de cette section sont réduits au minimum et les exemples de code sont placés dans la doPost méthode.
Pour générer un formulaire basé sur des fragments à l’aide de l’API du service Forms, effectuez le suivant :
  1. Incluez des fichiers JAR client, tels que adobe-forms-client.jar, dans le chemin de classe de votre projet Java. Pour plus d’informations sur l’emplacement de ces fichiers, voir Inclusion des fichiers de bibliothèque Java AEM Forms .
  2. Récupérez la valeur du bouton radio qui est envoyé à partir du formulaire HTML et indiquez s’il faut utiliser des données américaines ou canadiennes. Si l’option American est envoyée, créez un com.adobe.idp.Document fichier qui stocke les données dans le fichier Purchase Order US.xml . De même, si Canadien, créez un fichier com.adobe.idp.Document qui stocke les données dans le fichier Purchase Order Canada.xml .
  3. Créez un objet ServiceClientFactory qui contient des propriétés de connexion. (Voir Réglage des propriétés de la connexion .)
  4. Create an FormsServiceClient object by using its constructor and passing the ServiceClientFactory object.
  5. Créez un URLSpec objet qui stocke les valeurs URI à l’aide de son constructeur.
  6. Appelez la méthode URLSpec setApplicationWebRoot de l’objet et transmettez une valeur de chaîne représentant la racine Web de l’application.
  7. Appelez la méthode URLSpec setContentRootURI de l’objet et transmettez une valeur de chaîne qui spécifie la valeur URI racine du contenu. Assurez-vous que la conception de formulaire et les fragments se trouvent dans l’URI racine du contenu. Dans le cas contraire, le service Forms renvoie une exception. Pour référencer le référentiel AEM Forms, spécifiez repository:// .
  8. Appelez la URLSpec méthode de l’ setTargetURL objet et transmettez une valeur de chaîne qui spécifie la valeur de l’URL de l’ à l’endroit où les données du formulaire sont publiées. Si vous définissez l’URL de du dans la conception de formulaire, vous pouvez transmettre une chaîne vide. Vous pouvez également spécifier l’URL vers laquelle un formulaire est envoyé afin d’effectuer des calculs.
  9. Appelez la méthode FormsServiceClient renderPDFForm de l’objet et transmettez les valeurs suivantes :
    • Valeur de chaîne qui spécifie le nom de la conception de formulaire, y compris l’extension du nom de fichier.
    • Objet com.adobe.idp.Document contenant les données à fusionner avec le formulaire (créé à l’étape 2).
    • Objet PDFFormRenderSpec qui stocke les options d’exécution. For more information, see AEM Forms API Reference .
    • Objet URLSpec contenant des valeurs URI requises par le service Forms pour générer un formulaire basé sur des fragments.
    • Objet java.util.HashMap qui stocke les pièces jointes. Il s’agit d’un paramètre facultatif que vous pouvez spécifier null si vous ne souhaitez pas joindre de fichiers au formulaire.
    La renderPDFForm méthode renvoie un FormsResult objet qui contient un flux de données de formulaire qui doit être écrit dans le navigateur Web client.
  10. Créez un com.adobe.idp.Document objet en appelant la FormsResult méthode de l’ getOutputContent objet.
  11. Obtenez le type de contenu de l’ com.adobe.idp.Document objet en appelant sa getContentType méthode.
  12. Définissez le type de contenu de l’ javax.servlet.http.HttpServletResponse objet en appelant sa setContentType méthode et en transmettant le type de contenu de l’ com.adobe.idp.Document objet.
  13. Créez un javax.servlet.ServletOutputStream objet utilisé pour écrire le flux de données du formulaire dans le navigateur Web client en appelant la javax.servlet.http.HttpServletResponse getOutputStream méthode de l’objet.
  14. Créez un java.io.InputStream objet en appelant la com.adobe.idp.Document méthode de l’ getInputStream objet.
  15. Créez un tableau d’octets pour le remplir avec le flux de données du formulaire en appelant la InputStream read méthode de l’objet et en transmettant le tableau d’octets en tant qu’argument.
  16. Appelez la javax.servlet.ServletOutputStream write méthode de l’objet pour envoyer le flux de données du formulaire au navigateur Web client. Transmettez le tableau d’octets à la write méthode.
L’exemple de code suivant représente la servlet Java qui appelle le service Forms et génère un formulaire basé sur des fragments.
 /*
     * This Java Quick Start uses the following JAR files
     * 1. adobe-forms-client.jar
     * 2. adobe-livecycle-client.jar
     * 3. adobe-usermanager-client.jar
     *
     * (Because Forms quick starts are implemented as Java servlets, it is
     * not necessary to include J2EE specific JAR files - the Java project
     * that contains this quick start is exported as a WAR file which
     * is deployed to the J2EE application server)
     *
     * These JAR files are located in the following path:
     * <install directory>/sdk/client-libs
     *
     * For complete details about the location of these JAR files,
     * see "Including AEM Forms library files" in Programming with AEM forms
     */
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
 
 import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import com.adobe.livecycle.formsservice.client.*;
 import java.util.*;
 import java.io.InputStream;
 import java.net.URL;
 
 import com.adobe.idp.Document;
 import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;
 import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties;
 
 public class RenderFormFragment extends HttpServlet implements Servlet {
 
     public void doGet(HttpServletRequest req, HttpServletResponse resp)
         throws ServletException, IOException {
             doPost(req,resp);
 
     }
     public void doPost(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {
 
 
 
         try{
             //Set connection properties required to invoke AEM Forms
             Properties connectionProps = new Properties();
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT, "https://'[server]:[port]'");
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL);
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator");
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password");
 
             //Get the value of selected radio button
             String radioValue = req.getParameter("radio");
 
             //Create an Document object to store form data
             Document oInputData = null;
 
             //The value of the radio button determines the form data to use
             //which determines which fragments used in the form
             if (radioValue.compareTo("AMERICAN") == 0)            {
                 FileInputStream myData = new FileInputStream("C:\\Adobe\Purchase Order US.xml");
                 oInputData = new Document(myData);
             }
             else if (radioValue.compareTo("CANADIAN") == 0)            {
                 FileInputStream myData = new FileInputStream("C:\\Adobe\Purchase Order Canada.xml");
                 oInputData = new Document(myData);
             }
 
             //Create a ServiceClientFactory object
             ServiceClientFactory myFactory = ServiceClientFactory.createInstance(connectionProps);
 
             //Create a FormsServiceClient object
             FormsServiceClient formsClient = new FormsServiceClient(myFactory);
 
             //Set the parameter values for the renderPDFForm method
             String formName = "Applications/FormsApplication/1.0/FormsFolder/Purchase Order Dynamic.xdp";
 
             //Cache the PDF form
             PDFFormRenderSpec pdfFormRenderSpec = new PDFFormRenderSpec();
             pdfFormRenderSpec.setCacheEnabled(new Boolean(true));
 
             //Specify URI values that are required to render a form
             //design based on fragments
             URLSpec uriValues = new URLSpec();
             uriValues.setApplicationWebRoot("https://'[server]:[port]'/RenderFormFragment");
             uriValues.setContentRootURI("repository:///");
             uriValues.setTargetURL("https://'[server]:[port]'/FormsServiceClientApp/HandleData");
 
             //Invoke the renderPDFForm method and write the
             //results to a client web browser
             FormsResult formOut = formsClient.renderPDFForm(
                         formName,               //formQuery
                         oInputData,             //inDataDoc
                         pdfFormRenderSpec,      //PDFFormRenderSpec
                         uriValues,                //urlSpec
                         null                    //attachments
                         );
 
             //Create a Document object that stores form data
             Document myData = formOut.getOutputContent();
 
             //Get the content type of the response and
             //set the HttpServletResponse object’s content type
             String contentType = myData.getContentType();
             resp.setContentType(contentType);
 
             //Create a ServletOutputStream object
             ServletOutputStream oOutput = resp.getOutputStream();
 
             //Create an InputStream object
             InputStream inputStream = myData.getInputStream();
 
             //Write the data stream to the web browser
             byte[] data = new byte[4096];
             int bytesRead = 0;
             while ((bytesRead = inputStream.read(data)) > 0)
             {
                 oOutput.write(data, 0, bytesRead);
             }
 
         }catch (Exception e) {
              System.out.println("The following exception occurred: "+e.getMessage());
       }
     }
 }

Création d’une page Web

La page Web index.html fournit un point d’entrée au servlet Java et appelle le service Forms. Cette page Web est un formulaire HTML de base qui contient deux boutons radio et un bouton d’envoi. Le nom des boutons radio est radio. Lorsque l’utilisateur clique sur le bouton d’envoi, les données de formulaire sont publiées sur la servlet RenderFormFragment Java.
La servlet Java capture les données publiées à partir de la page HTML à l’aide du code Java suivant :
             Document oInputData = null;
 
             //Get the value of selected radio button
             String radioValue = req.getParameter("radio");
 
             //The value of the radio button determines the form data to use
             //which determines which fragments used in the form
             if (radioValue.compareTo("AMERICAN") == 0)            {
                 FileInputStream myData = new FileInputStream("C:\\Adobe\Purchase Order US.xml");
                 oInputData = new Document(myData);
             }
             else if (radioValue.compareTo("CANADIAN") == 0)            {
                 FileInputStream myData = new FileInputStream("C:\\Adobe\Purchase Order Canada.xml");
                 oInputData = new Document(myData);
             }

Le code HTML suivant se trouve dans le fichier index.html qui a été créé lors de la configuration du de développement . (See Creating a web project .)
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="https://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Untitled Document</title>
 </head>
 
 <body>
 <form name="myform" action="https://'[server]:[port]'/FragmentsWebApplication/RenderFormFragment" method="post">
      <table>
      <tr>
        <th>Forms Fragment Web Client</th>
      </tr>
      <tr>
        <td>
          <label>
          <input type="radio" name="radio" id="radio_Data" value="CANADIAN" />
          Canadian data<br />
          </label>
          <p>
            <label>
            <input type="radio" name="radio" id="radio_Data" value="AMERICAN" checked/>
            American data</label>
          </p>
        </td>
      </tr>
      <tr>
      <td>
        <label>
          <input type="submit" name="button_Submit" id="button_Submit" value="Submit" />
            </label>
            </td>
         </tr>
        </table>
      </form>
 </body>
 </html>

Assemblage de l’application Web

Pour déployer la servlet Java qui appelle le service Forms, incluez votre application Web dans un fichier WAR. Assurez-vous que les fichiers JAR externes dont dépend la logique métier du composant, tels que adobe-livecycle-client.jar et adobe-forms-client.jar, sont également inclus dans le fichier WAR.
Pour compresser une application Web dans un fichier WAR :
  1. Dans la fenêtre Explorateur de projets, cliquez avec le bouton droit sur le FragmentsWebApplication projet et sélectionnez Exporter > Fichier ​WAR.
  2. Dans la zone de texte du module ​Web, saisissez FragmentsWebApplication le nom du projet Java.
  3. Dans la zone de texte Destination , saisissez FragmentsWebApplication.war ​le nom du fichier, indiquez l’emplacement de votre fichier WAR, puis cliquez sur Terminer.

Déploiement du fichier WAR sur le serveur d’applications J2EE

Vous pouvez déployer le fichier WAR sur le serveur d’applications J2EE sur lequel AEM Forms est déployé. Une fois le fichier WAR déployé, vous pouvez accéder à la page Web HTML à l’aide d’un navigateur Web.
Pour déployer le fichier WAR sur le serveur d’applications J2EE :
  • Copiez le fichier WAR du chemin d'exportation vers [Forms Install]\Adobe\Adobe Experience Manager Forms\jboss\server\all\deploy .

Test de votre application Web

Après avoir déployé l’application Web, vous pouvez la tester à l’aide d’un navigateur Web. En supposant que vous utilisez le même ordinateur que celui qui héberge AEM Forms, vous pouvez spécifier l’URL suivante :
  • http://localhost:8080/FragmentsWebApplication/index.html
    Sélectionnez un bouton radio et cliquez sur le bouton Envoyer. Un formulaire basé sur des fragments s’affiche dans le navigateur Web. Si des problèmes se produisent, consultez le fichier journal du serveur d’applications J2EE.