Como carregar dados em um formulário do InfoPath dinamicamente

Traduções deste artigo Traduções deste artigo
ID do artigo: 896451 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo descreve três maneiras de carregar dinamicamente dados em um formulário do Microsoft Office InfoPath. Você pode usar o evento OnLoad , automatizar o objeto do InfoPath ExternalApplication ou criar uma página ASP. Exemplos de código são fornecidos.

INTRODUÇÃO

Este artigo descreve como carregar dados em um formulário do Office InfoPath dinamicamente.

Mais Informações

Um formulário do InfoPath é um arquivo XML. O arquivo contém os dados do formulário e instruções que informam ao Microsoft Windows Explorer ou no Microsoft Internet Explorer à qual pertence os dados XML do aplicativo de processamento XML.

Você pode carregar dinamicamente dados no InfoPath usando um dos três métodos a seguir:
  • Use o evento OnLoad .

    No evento OnLoad , você pode chamar uma página ASP ou outra fonte de dados externos para recuperar os dados e copiá-lo para o formulário.
  • Automatize o objeto ExternalApplication do InfoPath.

    Esse método cria um novo formulário que é baseado nos dados de uma fonte externa.
    Observação A configuração de Inicializar e scripts de controles ActiveX não marcados como seguros no Internet Explorer deve ser definida como Avisar ou Ativar para este método para trabalhar.
    Os dados de origem externa também devem ser XML válido do InfoPath.
  • Crie uma página ASP.

    A página ASP retorna dados XML no formato correto para o InfoPath abrir como um arquivo de formulário. Os dados XML contém uma referência ao modelo de formulário do InfoPath no qual os dados devem ser exibidos. O InfoPath pode exibir os dados sem um problema.

Criar um novo diretório virtual

  1. Iniciar o Microsoft Internet Information Services Manager.
  2. Expanda o diretório de Sites no modo de exibição em árvore.
  3. Clique com o botão direito do mouse o site onde você deseja criar o novo diretório virtual, aponte para novo e clique em Diretório Virtual .
  4. Siga as etapas no Virtual Directory criação Assistente para criar um novo diretório virtual.

    Observação Você deve conceder permissão de gravação para o diretório virtual.

Criar um formulário do InfoPath

InfoPath 2007

  1. Inicie o InfoPath. No painel esquerdo, clique em design a Form Template .
  2. Em criar um novo , clique para selecionar a opção de Modelo de formulário , clique em para selecionar a opção em branco e, em seguida, clique em OK .
  3. Em Tarefas de design , clique em controles .
  4. Clique duas vezes em Caixa de texto para adicionar texto duas caixa controles ao formulário.
  5. Salve o formulário.
  6. No menu arquivo , clique em Publicar .
  7. No Assistente de publicação, clique em Avançar . Clique em para um local de rede e, em seguida, clique em Avançar .
  8. No formulário modelo de caminho e nome de arquivo da caixa, digite a URL do diretório virtual que você criou.
  9. Na caixa nome do modelo de formulário , digite twofield.xsn .

    Observação Certifique-se que a URL semelhante à seguinte:
    http:// myServer / myVirtualDirectory /twofield.xsn
  10. Clique em Avançar , clique em Publicar e, em seguida, clique em Fechar .
  11. Saia do InfoPath.

InfoPath 2003

  1. Inicie o InfoPath. No painel esquerdo, clique em criar um formulário .
  2. Em criar um formulário , clique em Novo formulário em branco .
  3. Em Tarefas de design , clique em controles .
  4. Clique duas vezes em Caixa de texto para adicionar texto duas caixa controles ao formulário.
  5. No menu arquivo , clique em Publicar .
  6. No Assistente para publicação, clique em Avançar , clique em para um servidor da Web e em seguida, clique em Avançar .
  7. Na caixa URL da Web e nome de arquivo , digite a URL do diretório virtual que você criou.
  8. Na caixa nome do formulário , digite twofield.xsn .

    Observação Certifique-se que a URL semelhante à seguinte:
    http:// myServer / myVirtualDirectory /twofield.xsn
  9. Clique em Avançar , clique em Concluir e, em seguida, clique em Fechar .
  10. Saia do InfoPath.

Criar a página Default.ASP

  1. Clique em Iniciar , clique em Executar , digite notepad e, em seguida, clique em OK .
  2. Cole o seguinte código no idioma Notepad.
    <%@ Language=VBScript %>
    
    <%
    
      dim serverName, hrefPath, fileNamePos, serverPath
    
      serverName = Request.ServerVariables("SERVER_NAME")
    
      hrefPath = Request.ServerVariables("PATH_INFO")
    
      fileNamePos = InStr( 1, hrefPath, "/Default.asp", 1 )
    
      hrefPath = Left(hrefPath, fileNamePos )
    
      serverPath = "http://" + serverName + hrefPath
    
    %>
    
    <HTML>
    
    <head>
    
    <SCRIPT LANGUAGE=VBScript>
    
    Sub ButtonClick()
    
     Dim oInfoPathApp
    
     set oInfoPathApp = CreateObject("InfoPath.ExternalApplication")
    
     oInfoPathApp.New "<%=serverPath%>GetData.asp?dataRequest=2"
    
     set oInfoPathApp = Nothing
    
     window.close
    
    End Sub
    
    </SCRIPT>
    
    </HEAD>
    
    <BODY onload="ButtonClick">
    
    </BODY>
    
    </HTML>
  3. Salve o arquivo como default.ASP. Salve o arquivo no diretório virtual que você criou na seção "Criar um novo diretório virtual".

Criar uma página ASP para gerar dinamicamente um formulário

  1. Localize e, em seguida, clique duas vezes o formulário de Twofield.xsn recém-publicado.
    Observação Um novo formulário em branco é aberto para poder preencher.
  2. Clique em arquivo e, em seguida, clique em Salvar como .
  3. Salve o arquivo como Form1.xml.
  4. Clique em Iniciar , clique em Executar , digite notepad e, em seguida, clique em OK .
  5. Paste the following code in Notepad.
    <%@ Language=VBScript %>
    <%
      ' Define the XML namespace for the form.
      Dim strNamespace
      strNamespace = "http://schemas.microsoft.com/office/infopath/2003/myXSD/2003-04-21T15:25:26"
     
      'Calculate the path of this server directory.
      dim serverName, hrefPath, fileNamePos, serverPath
      serverName = Request.ServerVariables("SERVER_NAME")
      hrefPath = Request.ServerVariables("PATH_INFO")
      fileNamePos = InStr( 1, hrefPath, "/GetData.asp", 1 )
      hrefPath = Left(hrefPath, fileNamePos )
      serverPath = "http://" + serverName + hrefPath
     
      ' Set our return content type.
      Response.ContentType = "text/xml"
    
      'Create an XML document to return.
      Dim oXML
      Set oXML = Server.CreateObject("MSXML.DOMDocument")
     
      'Create the XML header that all XML documents must have.
      dim myPI1
      set myPI1 = oXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
      oXML.insertBefore myPI1, oXML.childNodes.item(0)
     
      'Create the mso-infopathSolution processing instruction that binds the XML from this page to the 
      'TwoField.xsn InfoPath form template.
      dim myPI2
      set myPI2 = oXML.createProcessingInstruction("mso-infoPathSolution", "solutionVersion=""1.0.0.1"" productVersion=""11.0.5531"" PIVersion=""1.0.0.0"" href=""" + serverPath + "TwoField.xsn""")
      oXML.insertBefore myPI2, oXML.childNodes.item(1)
     
      'Create the mso-application processing instruction that marks the XML from this page as an InfoPath form.
      dim myPI3
      set myPI3 = oXML.createProcessingInstruction("mso-application", "progid=""InfoPath.Document""")
      oXML.insertBefore myPI3, oXML.childNodes.item(2)
     
      'Generate the XML for the form.
      dim myFields
      set myFields = oXML.createNode( 1, "myFields", strNamespace )
      oXML.appendChild myFields
     
      dim field1
      set field1 = oXML.createNode( 1, "field1", strNamespace )
     
      dim field2
      set field2 = oXML.createNode( 1, "field2", strNamespace )
     
      dim requestedData
      requestedData = Request("dataRequest")
      Select Case requestedData
         Case "1"
            field1.text = "test field 1"
            field2.text = "test field 2"
         Case "2"
            field1.text = "test field 3"
            field2.text = "test field 4"
         Case "3"
            field1.text = "test field 5"
            field2.text = "test field 6"
         Case Else
            field1.text = "test field 7"
            field2.text = "test field 8"
      end Select
     
      myFields.appendChild field1
      myFields.appendChild field2
     
      'Return the XML to the client.
      Response.Write oXML.XML
    %>
    
  6. No menu arquivo , clique em Salvar como , digite GetData.asp na caixa nome do arquivo e, em seguida, clique em Salvar .
  7. Inicie uma segunda instância do bloco de notas.
  8. No menu arquivo , clique em Abrir , clique em Form1.xml e em seguida, clique em Abrir .
  9. Localize o xmlns: meu espaço para nome declaração no Form1.xml e em seguida, copie seu valor.

    Observação O valor semelhante à seguinte:
    http://schemas.Microsoft.com/Office/InfoPath/2003/myXSD/2003-04-21T15:25:26
  10. No arquivo GetData.asp, localize a seguinte linha:
    strNamespace = "http://schemas.microsoft.com/office/infopath/2003/myXSD/2003-04-21T15:25:26"
  11. Substitua o valor da variável strNamespace com o valor que você copiou na etapa 9.
  12. Clique em Salvar e saia do bloco de notas.
  13. Copie o arquivo GetData.asp no mesmo diretório virtual onde o modelo de formulário Twofield.xsn está localizado.

Adicione código para o formulário InfoPath para automaticamente carregar dados da página ASP

  1. Inicie o InfoPath.
  2. No InfoPath 2007, clique em criar um formulário modelo no painel esquerdo. No InfoPath 2003, clique em criar um formulário no painel esquerdo.
  3. No InfoPath 2007, clique No meu computador em Abra um modelo de formulário . No InfoPath 2003, clique No meu computador em Abra um formulário no modo de design no painel de tarefas criar um formulário .
  4. Digite a URL do modelo de formulário que você publicou.

    Observação A URL semelhante à seguinte:
    http://myServer/myVirtualDirectory/twofield.xsn
  5. No menu Ferramentas , clique em programação e, em seguida, clique em Evento OnLoad .
  6. Substitua o código de evento OnLoad padrão com o seguinte código. função
    function XDocument::OnLoad(eventObj)
    {
       //Only load data if the fields are empty.
       if (XDocument.DOM.selectSingleNode("/my:myFields/my:field1").text == "" )
       {
          //Work out the location of the data file based on the current install directory.
        searchExpression = new RegExp( "TwoField.xsn", "ig" );
        searchResults = XDocument.Solution.URI.match( searchExpression );
        if (searchResults.length == 0)
         return;
         
        //Clear the "TwoField.xsn" part of the string.
        var targetDirectory = XDocument.Solution.URI.slice(0, searchResults.index );
     
          //Load the example data into and XML document.
          var objExternalData = new ActiveXObject("MSXML2.DomDocument.5.0");
          objExternalData.async = false;
          objExternalData.validateOnParse = false;
          objExternalData.load( targetDirectory + "getData.asp?dataRequest=3" );
     
          //Set the SelectionNamespaces property so that we can search the example data.
          var strSelectionNamespaces = XDocument.DOM.getProperty("SelectionNamespaces");
          objExternalData.setProperty("SelectionNamespaces", strSelectionNamespaces );
     
          //Find the root node in the example data and import it into the InfoPath document.
          var objExternalXML = objExternalData.selectSingleNode("my:myFields");
          var objReplacementXML = XDocument.DOM.importNode( objExternalXML, true );
          
          //Find the original data in the form and replace it with the example data.
          var objOriginalXML = XDocument.DOM.selectSingleNode("my:myFields"); 
        XDocument.DOM.replaceChild( objReplacementXML, objOriginalXML );
     }
    }
    
  7. No menu arquivo , clique em Salvar e feche o formulário do InfoPath.

Testar o formulário do InfoPath

Carregar dados usando o evento OnLoad

O evento de OnLoad do formulário TwoField.xsn carrega dados de página GetData.asp Se outros dados não estiverem no formulário. Para carregar os dados, execute estas etapas:
  1. Clique em Iniciar , clique em Executar , digite o caminho do formulário e, em seguida, clique em OK . O caminho que você digite semelhante à seguinte:
    http:// myServer / IPDynamicData /TwoField.xsn
  2. Se você for solicitado, clique em Abrir .
Observe que o InfoPath é iniciado e o formulário TwoField.xsn abre. Campo1 contém "teste campo 5", e Field2 contém "teste campo 6". Esses são os valores que GetData.asp retorna quando seu parâmetro dataRequest é definido como "3".

Carregar um formulário padrão usando ExternalApplication.New

A página Default.asp cria o script de cliente para automatizar o objeto ExternalApplication para iniciar o InfoPath e para criar um novo formulário. O novo formulário é baseado nos dados XML retornado pelo GetData.asp. Para criar o novo formulário, clique em Iniciar , clique em Executar , digite o caminho da página Default.asp e, em seguida, clique em OK . O caminho que você digite semelhante à seguinte:
http:// myServer / IPDynamicData / .ASP default
Observação Para usar esse método, você deve clicar em Avisar ou Ativar para a configuração Inicializar e scripts de controles ActiveX não marcados como seguros no Internet Explorer.

Observe que o InfoPath é iniciado e o formulário TwoField.xsn abre. Campo1 contém "teste campo 3" e contém campo2"teste campo 4". Esses são os valores que GetData.asp retorna quando o parâmetro dataRequest é definido para "2".

Carregar um formulário existente a partir de uma página ASP

A página GetData.asp retorna XML no formato correto para o InfoPath para abri-lo como um arquivo de formulário. Para fazer isso, clique em Iniciar , clique em Executar , digite o caminho da página GetData.asp e, em seguida, clique em OK . O caminho que você digite semelhante à seguinte:
http:// myServer / IPDynamicData /getData.asp?dataRequest=1
Observe que o InfoPath é iniciado e o formulário GetData.asp abre. Campo1 contém "campo 1 de teste" e Field2 contém "teste campo 2". Esses são os valores que GetData.asp retorna quando seu parâmetro dataRequest é definido como "1".

Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação para uma finalidade específica. Este artigo presume que você está familiarizados com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades.

Propriedades

ID do artigo: 896451 - Última revisão: terça-feira, 27 de março de 2007 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft Office InfoPath 2007
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
Palavras-chave: 
kbmt kbscript kbasp kbhowto KB896451 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 896451

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com