Manuseio de Forms Enviado handling-submitted-forms
Aplicativos baseados na Web que permitem que um usuário preencha formulários interativos exigem que os dados sejam enviados de volta ao servidor. Com o serviço Forms, é possível recuperar os dados inseridos pelo usuário em um formulário interativo. Depois de recuperar os dados, você poderá processá-los para atender aos requisitos de sua empresa. Por exemplo, você pode armazenar os dados em um banco de dados, enviar os dados para outro aplicativo, enviar os dados para outro serviço, mesclar os dados em um design de formulário, exibir os dados em um navegador da Web e assim por diante.
Os dados do formulário são enviados ao serviço Forms como dados XML ou PDF, que é uma opção definida no Designer. Um formulário enviado como XML permite extrair valores de dados de campo individuais. Ou seja, você pode extrair o valor de cada campo de formulário que o usuário inseriu no formulário. Um formulário enviado como PDF é um dado binário, não dados XML. É possível salvar o formulário como um arquivo PDF ou enviá-lo para outro serviço. Para extrair dados de um formulário enviado como XML e, em seguida, usar os dados do formulário para criar um documento PDF, chame outra operação AEM Forms. (Consulte Criação de documentos PDF com dados XML enviados)
O diagrama a seguir mostra os dados enviados para um Servlet Java chamado HandleData de um formulário interativo exibido em um navegador da Web.
A tabela a seguir explica as etapas no diagrama.
HandleData Servlet Java como dados XML.HandleData O Java Servlet contém a lógica do aplicativo para recuperar os dados.Tratamento de dados XML enviados handling-submitted-xml-data
Quando os dados do formulário são enviados como XML, é possível recuperar dados XML que representam os dados enviados. Todos os campos de formulário aparecem como nós em um esquema XML. Os valores do nó correspondem aos valores que o usuário preencheu. Considere um formulário de empréstimo em que cada campo no formulário aparece como um nó dentro dos dados XML. O valor de cada nó corresponde ao valor que um usuário preenche. Suponha que um usuário preencha o formulário de empréstimo com os dados mostrados no formulário a seguir.
A ilustração a seguir mostra os dados XML correspondentes recuperados usando a API do cliente de serviço do Forms.
Os campos no formulário de empréstimo. Esses valores podem ser recuperados usando classes Java XML.
Tratamento de dados de PDF enviados handling-submitted-pdf-data
Considere uma aplicação Web que chama o serviço Forms. Depois que o serviço Forms renderiza um formulário PDF interativo para um navegador da Web cliente, o usuário preenche o formulário e o envia como dados de PDF. Quando o serviço Forms recebe os dados do PDF, ele pode enviar os dados do PDF para outro serviço ou salvá-los como um arquivo PDF. O diagrama a seguir mostra o fluxo lógico do aplicativo.
A tabela a seguir descreve as etapas neste diagrama.
Tratamento de dados UTF-16 de URL enviados handling-submitted-url-utf-16-data
Se os dados do formulário forem enviados como URL UTF-16, o computador cliente exigirá Adobe Reader ou Acrobat 8.1 ou posterior. Além disso, se o design de formulário contiver um botão Enviar com dados codificados por URL (HTTP Post) e a opção de codificação de dados for UTF-16, o design de formulário deverá ser modificado em um editor de texto como o Notepad. Você pode definir a opção de codificação como UTF-16LE ou UTF-16BE para o botão enviar. O Designer não fornece essa funcionalidade.
Resumo das etapas summary-of-steps
Para manipular formulários enviados, execute as seguintes tarefas:
- Inclua arquivos de projeto.
- Crie um objeto da API do cliente do Forms.
- Recupere os dados do formulário.
- Determine se o envio do formulário contém anexos de arquivo.
- Processar os dados enviados.
Incluir arquivos de projeto
Inclua os arquivos necessários no projeto de desenvolvimento. Se você estiver criando um aplicativo cliente usando Java, inclua os arquivos JAR necessários. Se você estiver usando serviços da Web, certifique-se de incluir os arquivos proxy.
Criar um objeto de API do cliente do Forms
Antes de executar programaticamente uma operação de API do cliente de serviço do Forms, é necessário criar um cliente de serviço do Forms. Se estiver usando a API do Java, crie um FormsServiceClient objeto. Se estiver usando a API do serviço da Web da Forms, crie um FormsService objeto.
Recuperar dados do formulário
Para recuperar os dados de formulário enviados, chame o FormsServiceClient do objeto processFormSubmission método . Ao invocar esse método, é necessário especificar o tipo de conteúdo do formulário enviado. Quando os dados são enviados de um navegador da Web cliente para o serviço da Forms, eles podem ser enviados como dados XML ou PDF. Para recuperar os dados inseridos nos campos do formulário, os dados podem ser enviados como dados XML.
Também é possível recuperar campos de formulário de um formulário enviado como dados de PDF, definindo as seguintes opções de tempo de execução:
- Passe o seguinte valor para a variável
processFormSubmissioncomo o parâmetro de tipo de conteúdo:CONTENT_TYPE=application/pdf. - Defina as
RenderOptionsSpecdo objetoPDFToXDPparatrue - Defina as
RenderOptionsSpecdo objetoExportDataFormatparaXMLData
Você especifica o tipo de conteúdo do formulário enviado ao chamar a variável processFormSubmission método . A lista a seguir especifica os valores de tipo de conteúdo aplicáveis:
- text/xml: Representa o tipo de conteúdo a ser usado quando um formulário PDF envia dados de formulário como XML.
- application/x-www-form-urlencoded: Representa o tipo de conteúdo a ser usado quando um formulário HTML envia dados como XML.
- application/pdf: Representa o tipo de conteúdo a ser usado quando um formulário PDF envia dados como PDF.
application/pdf. Os PDF forms de Manuseio enviados como XML usando o início rápido da API Java demonstram como lidar com dados XML enviados enviados por um formulário PDF. O tipo de conteúdo especificado nesta inicialização rápida é text/xml. Da mesma forma, os Manipulando formulários HTML enviados como XML usando o início rápido da API do Java demonstram como lidar com dados XML enviados que são enviados de um formulário HTML. O tipo de conteúdo especificado neste início rápido é application/x-www-form-urlencoded.Você recupera dados de formulários publicados no serviço Forms e determina seu estado de processamento. Ou seja, quando os dados são enviados ao serviço Forms, não significa necessariamente que o serviço Forms terminou de processar os dados e que eles estão prontos para serem processados. Por exemplo, os dados podem ser enviados para o serviço Forms para que um cálculo possa ser executado. Quando o cálculo é concluído, o formulário é renderizado de volta ao usuário com os resultados do cálculo exibidos. Antes de processar os dados enviados, é recomendável determinar se o serviço Forms terminou de processar os dados.
O serviço Forms retorna os seguintes valores para indicar se terminou de processar os dados:
- 0 (Enviar): Os dados enviados estão prontos para serem processados.
- 1 (Calcular): O serviço Forms executou uma operação de cálculo nos dados e os resultados devem ser renderizados de volta ao usuário.
- 2 (Validar): Os dados de formulário validados pelo serviço Forms e os resultados devem ser renderizados ao usuário.
- 3 (Próximo): A página atual foi alterada com resultados que devem ser gravados no aplicativo cliente.
- 4 (Anterior)): A página atual foi alterada com resultados que devem ser gravados no aplicativo cliente.
Determine se o envio do formulário contém anexos de arquivo
A Forms enviada para o serviço Forms pode conter anexos de arquivo. Por exemplo, usando o painel de anexo integrado do Acrobat, um usuário pode selecionar anexos de arquivo para enviar junto com o formulário. Além disso, um usuário também pode selecionar anexos de arquivo usando uma barra de ferramentas HTML que é renderizada com um arquivo HTML.
Depois de determinar se um formulário contém anexos de arquivo, é possível processar os dados. Por exemplo, você pode salvar o anexo de arquivo no sistema de arquivos local.
Processar os dados enviados
Dependendo do tipo de conteúdo dos dados enviados, é possível extrair valores de campo de formulário individuais dos dados XML enviados ou salvar os dados de PDF enviados como um arquivo de PDF (ou enviá-los para outro serviço). Para extrair campos de formulário individuais, converta os dados XML enviados em uma fonte de dados XML e recupere os valores da fonte de dados XML usando org.w3c.dom classes.
Consulte também
Inclusão de arquivos da biblioteca Java do AEM Forms
Configuração das propriedades de conexão
Início rápido da API do Forms Service
Manipule formulários enviados usando a API Java handle-submitted-forms-using-the-java-api
Manipule um formulário enviado usando a API do Forms (Java):
-
Incluir arquivos de projeto
Inclua arquivos JAR do cliente, como adobe-forms-client.jar, no caminho de classe do seu projeto Java.
-
Criar um objeto de API do cliente do Forms
- Crie um
ServiceClientFactoryobjeto que contém propriedades de conexão. - Crie um
FormsServiceClientusando seu construtor e passando oServiceClientFactoryobjeto.
- Crie um
-
Recuperar dados do formulário
- Para recuperar dados de formulário publicados em um Servlet Java, crie um
com.adobe.idp.Documentusando seu construtor e chamando ojavax.servlet.http.HttpServletResponsedo objetogetInputStreamdo construtor. - Crie um
RenderOptionsSpecusando seu construtor. Defina o valor da localidade chamando a variávelRenderOptionsSpecdo objetosetLocalee transmitindo um valor de string que especifica o valor de localidade.
note note NOTE Você pode instruir o serviço Forms a criar dados XDP ou XML a partir do conteúdo do PDF enviado, chamando o RenderOptionsSpecdo objetosetPDF2XDPmétodo e aprovaçãotruee também chamandosetXMLDatae a passagemtrue. Em seguida, você pode invocar oFormsResultdo objetogetOutputXMLpara recuperar os dados XML que correspondem aos dados XDP/XML. (OFormsResulté retornado peloprocessFormSubmission* método , que é explicado na próxima subetapa.)*-
Chame o
FormsServiceClientdo objetoprocessFormSubmissione transmita os seguintes valores:- O
com.adobe.idp.Documentobjeto que contém os dados do formulário. - Um valor de string que especifica variáveis de ambiente, incluindo todos os cabeçalhos HTTP relevantes. Especifique o tipo de conteúdo a ser tratado. Para manipular dados XML, especifique o seguinte valor de string para esse parâmetro:
CONTENT_TYPE=text/xml. Para lidar com dados de PDF, especifique o seguinte valor de string para esse parâmetro:CONTENT_TYPE=application/pdf. - Um valor de string que especifica a variável
HTTP_USER_AGENTvalor do cabeçalho, por exemplo, .Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322). Esse valor de parâmetro é opcional. - A
RenderOptionsSpecobjeto que armazena opções de tempo de execução.
O
processFormSubmissionmétodo retorna umFormsResultobjeto contendo os resultados do envio do formulário. - O
-
Determine se o serviço Forms terminou de processar os dados do formulário chamando a função
FormsResultdo objetogetActionmétodo . Se esse método retornar o valor0, os dados estão prontos para serem processados.
- Para recuperar dados de formulário publicados em um Servlet Java, crie um
-
Determine se o envio do formulário contém anexos de arquivo
- Chame o
FormsResultdo objetogetAttachmentsmétodo . Esse método retorna umjava.util.Listobjeto que contém arquivos enviados com o formulário. - Iterar por meio do
java.util.Listpara determinar se há anexos de arquivo. Se houver anexos de arquivo, cada elemento é umcom.adobe.idp.Documentinstância. Você pode salvar os anexos do arquivo chamando a funçãocom.adobe.idp.Documentdo objetocopyToFilee a transmissão de umjava.io.Fileobjeto.
note note NOTE Essa etapa só é aplicável se o formulário for enviado como PDF. - Chame o
-
Processar os dados enviados
-
Se o tipo de conteúdo de dados for
application/vnd.adobe.xdp+xmloutext/xml, crie a lógica do aplicativo para recuperar valores de dados XML.- Crie um
com.adobe.idp.Documentchamando oFormsResultdo objetogetOutputContentmétodo . - Crie um
java.io.InputStreamchamando ojava.io.DataInputStreame transmitindo ocom.adobe.idp.Documentobjeto. - Crie um
org.w3c.dom.DocumentBuilderFactorychamando o objeto estáticoorg.w3c.dom.DocumentBuilderFactorydo objetonewInstancemétodo . - Crie um
org.w3c.dom.DocumentBuilderchamando oorg.w3c.dom.DocumentBuilderFactorydo objetonewDocumentBuildermétodo . - Crie um
org.w3c.dom.Documentchamando oorg.w3c.dom.DocumentBuilderdo objetoparsee a aprovação dojava.io.InputStreamobjeto. - Recupere o valor de cada nó no documento XML. Uma maneira de realizar essa tarefa é criar um método personalizado que aceite dois parâmetros: o
org.w3c.dom.Documente o nome do nó cujo valor você deseja recuperar. Esse método retorna um valor de string que representa o valor do nó. No exemplo de código que segue esse processo, esse método personalizado é chamado degetNodeText. O corpo desse método é mostrado.
- Crie um
-
Se o tipo de conteúdo de dados for
application/pdf, crie a lógica do aplicativo para salvar os dados de PDF enviados como um arquivo de PDF.- Crie um
com.adobe.idp.Documentchamando oFormsResultdo objetogetOutputContentmétodo . - Crie um
java.io.Fileusando seu construtor público. Certifique-se de especificar o PDF como a extensão do nome do arquivo. - Preencha o arquivo PDF chamando o
com.adobe.idp.Documentdo objetocopyToFilee a aprovação dojava.io.Fileobjeto.
- Crie um
-
Consulte também
Início rápido (modo SOAP): Manuseio de PDF forms enviados como XML usando a API Java
Início rápido (modo SOAP): Manuseio de formulários HTML enviados como XML usando a API Java
Início rápido (modo SOAP): Manuseio de PDF forms enviados como PDF usando a API Java
Gerenciar dados de PDF enviados usando a API de serviço da Web handle-submitted-pdf-data-using-the-web-service-api
Gerenciar um formulário enviado usando a API do Forms (serviço da Web):
-
Incluir arquivos de projeto
- Crie classes proxy Java que consomem o WSDL do serviço Forms.
- Inclua as classes proxy Java no caminho da classe.
-
Criar um objeto de API do cliente do Forms
Crie um
FormsServicee definir valores de autenticação. -
Recuperar dados do formulário
-
Para recuperar dados de formulário publicados em um Servlet Java, crie um
BLOBusando seu construtor. -
Crie um
java.io.InputStreamchamando ojavax.servlet.http.HttpServletResponsedo objetogetInputStreammétodo . -
Crie um
java.io.ByteArrayOutputStreamusando seu construtor e passando o comprimento da variáveljava.io.InputStreamobjeto. -
Copie o conteúdo do
java.io.InputStreamno objetojava.io.ByteArrayOutputStreamobjeto. -
Crie uma matriz de bytes chamando o
java.io.ByteArrayOutputStreamdo objetotoByteArraymétodo . -
Preencha o
BLOBao invocar seusetBinaryDatae transmitindo a matriz de bytes como um argumento. -
Crie um
RenderOptionsSpecusando seu construtor. Defina o valor da localidade chamando a variávelRenderOptionsSpecdo objetosetLocalee transmitindo um valor de string que especifica o valor de localidade. -
Chame o
FormsServicedo objetoprocessFormSubmissione transmita os seguintes valores:- O
BLOBobjeto que contém os dados do formulário. - Um valor de string que especifica variáveis de ambiente, incluindo todos os cabeçalhos HTTP relevantes. Especifique o tipo de conteúdo a ser tratado. Para manipular dados XML, especifique o seguinte valor de string para esse parâmetro:
CONTENT_TYPE=text/xml. Para lidar com dados de PDF, especifique o seguinte valor de string para esse parâmetro:CONTENT_TYPE=application/pdf. - Um valor de string que especifica a variável
HTTP_USER_AGENTvalor do cabeçalho; por exemplo,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322). - A
RenderOptionsSpecobjeto que armazena opções de tempo de execução. - Um vazio
BLOBHolderobjeto preenchido pelo método . - Um vazio
javax.xml.rpc.holders.StringHolderobjeto preenchido pelo método . - Um vazio
BLOBHolderobjeto preenchido pelo método . - Um vazio
BLOBHolderobjeto preenchido pelo método . - Um vazio
javax.xml.rpc.holders.ShortHolderobjeto preenchido pelo método . - Um vazio
MyArrayOf_xsd_anyTypeHolderobjeto preenchido pelo método . Esse parâmetro é usado para armazenar anexos de arquivo enviados junto com o formulário. - Um vazio
FormsResultHolderobjeto preenchido pelo método com o formulário enviado.
O
processFormSubmissionO método preenche a variávelFormsResultHoldercom os resultados do envio do formulário. - O
-
Determine se o serviço Forms terminou de processar os dados do formulário chamando a função
FormsResultdo objetogetActionmétodo . Se esse método retornar o valor0, os dados do formulário estão prontos para serem processados. Você pode obter umFormsResultobtendo o valor da variávelFormsResultHolderdo objetovaluemembro de dados.
-
-
Determine se o envio do formulário contém anexos de arquivo
Obtenha o valor da variável
MyArrayOf_xsd_anyTypeHolderdo objetovaluemembro de dados (oMyArrayOf_xsd_anyTypeHoldero objeto foi passado para oprocessFormSubmissionmétodo ). Esse membro de dados retorna uma matriz deObjects. Cada elemento dentro doObjectmatriz é umObjectque corresponde aos arquivos enviados junto com o formulário. Você pode obter cada elemento dentro da matriz e convertê-lo em umBLOBobjeto. -
Processar os dados enviados
-
Se o tipo de conteúdo de dados for
application/vnd.adobe.xdp+xmloutext/xml, crie a lógica do aplicativo para recuperar valores de dados XML.- Crie um
BLOBchamando oFormsResultdo objetogetOutputContentmétodo . - Crie uma matriz de bytes chamando o
BLOBdo objetogetBinaryDatamétodo . - Crie um
java.io.InputStreamchamando ojava.io.ByteArrayInputStreame transmitindo a matriz de bytes. - Crie um
org.w3c.dom.DocumentBuilderFactorychamando o objeto estáticoorg.w3c.dom.DocumentBuilderFactorydo objetonewInstancemétodo . - Crie um
org.w3c.dom.DocumentBuilderchamando oorg.w3c.dom.DocumentBuilderFactorydo objetonewDocumentBuildermétodo . - Crie um
org.w3c.dom.Documentchamando oorg.w3c.dom.DocumentBuilderdo objetoparsee a aprovação dojava.io.InputStreamobjeto. - Recupere o valor de cada nó no documento XML. Uma maneira de realizar essa tarefa é criar um método personalizado que aceite dois parâmetros: o
org.w3c.dom.Documente o nome do nó cujo valor você deseja recuperar. Esse método retorna um valor de string que representa o valor do nó. No exemplo de código que segue esse processo, esse método personalizado é chamado degetNodeText. O corpo desse método é mostrado.
- Crie um
-
Se o tipo de conteúdo de dados for
application/pdf, crie a lógica do aplicativo para salvar os dados de PDF enviados como um arquivo de PDF.- Crie um
BLOBchamando oFormsResultdo objetogetOutputContentmétodo . - Crie uma matriz de bytes chamando o
BLOBdo objetogetBinaryDatamétodo . - Crie um
java.io.Fileusando seu construtor público. Certifique-se de especificar o PDF como a extensão do nome do arquivo. - Crie um
java.io.FileOutputStreamusando seu construtor e passando ojava.io.Fileobjeto. - Preencha o arquivo PDF chamando o
java.io.FileOutputStreamdo objetowritee transmitindo a matriz de bytes.
- Crie um
-
Consulte também
Chamada de AEM Forms usando codificação Base64