Partager via


Exemples et scénarios sur l'automatisation externe

Les membres exposés par l'assembly PIA (Primary Interop Assembly) de Microsoft Office InfoPath (Microsoft.Office.Interop.InfoPath.dll) et l'assembly d'interopérabilité XML d'InfoPath (Microsoft.Office.Interop.InfoPath.Xml.dll) prennent en charge l'écriture de code managé pour l'automatisation de Microsoft Office InfoPath 2007.

Création de références aux assemblys PIA (Primary Interop Assembly) de Microsoft Office InfoPath et aux assemblys d'interoperabilité XML d'InfoPath

Pour écrire du code managé pour l'automatisation d'InfoPath, vous devez créer des références aux assemblys PIA Microsoft Office InfoPath et XML InfoPath. Le premier offre une prise en charge de l'interopérabilité avec le modèle d'objet COM exposé par IPEDITOR.DLL utilisé par les membres de l'espace de noms Microsoft.Office.Interop.InfoPath. Le second prend en charge l'interopérabilité du modèle d'objet COM exposé par Microsoft XML Core Services (MSXML) 5.0 pour Microsoft Office par les membres de l'espace de noms Microsoft.Office.Interop.InfoPath.Xml.

Important :

Les utilisateurs d'applications de code managé qui automatisent InfoPath doivent avoir Office InfoPath 2007, l'assembly PIA de Microsoft Office InfoPath et XML d'InfoPath installés sur leur ordinateur. L'option Prise en charge de la programmabilité .NET du programme d'installation d'Office InfoPath 2007 est définie sur Exécuter à partir du Poste de travail pour une installation standard d'InfoPath. Par conséquent, tant que .NET Framework 1.1 Redistribuable ou le Kit de développement logiciel .NET Framework 1.1 sont installés, ces assemblys d'interopérabilité sont également installés par défaut. Si ces assemblys d'interopérabilité ne sont pas disponibles sur l'ordinateur d'un utilisateur, vous devez confirmer que .NET Framework 1.1 est installé, puis exécuter Ajouter ou supprimer des programmes dans le Panneau de configuration et définir l'option Prise en charge de la programmabilité .NET d'Office InfoPath 2007 sur Exécuter à partir du Poste de travail.

Les procédures suivantes décrivent la définition des références aux assemblys PIA (Primary Interop Assembly) de Microsoft Office InfoPath et aux assemblys d'interoperabilité XML d'InfoPath dans un projet Visual Studio.

Pour définir une référence à l'assembly PIA Microsoft.Office.Interop.InfoPath, définissez une référence sur Bibliothèque de type Microsoft InfoPath 2.0 sous l'onglet COM de la boîte de dialogue Ajouter une référence. Même si vous définissez une référence à partir de l'onglet COM, une référence est créée pour l'assembly PIA Microsoft.Office.Interop.InfoPath.dll installé dans le Global Assembly Cache (GAC) par le programme d'installation d'InfoPath.

Définissez une référence à l'assembly PIA Microsoft.Office.Interop.InfoPath

  1. Ouvrez un projet de code managé Visual Studio.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Références, puis cliquez sur Ajouter une référence.

  3. Sous l'onglet COM, double-cliquez sur Bibliothèque de type Microsoft InfoPath 2.0, puis cliquez sur OK.

Pour définir une référence à l'assembly d'interopérabilité Microsoft.Office.Interop.InfoPath.Xml, recherchez le fichier Microsoft.Office.Interop.InfoPath.Xml.dll installé par défaut dans le dossier <lecteur>:\Program Files\Microsoft Office\OFFICE12. Même si vous avez spécifié la copie de l'assembly dans le système de fichiers local, cette procédure crée une référence à l'assembly Microsoft.Office.Interop.InfoPath.Xml.dll installé dans le Global Assembly Cache par le programme d'installation d'InfoPath.

Définir une référence à l'assembly d'interopérabilité Microsoft.Office.Interop.InfoPath.Xml

  1. Ouvrez ou créez un projet de code managé Visual Studio, comme une Application console ou une Application Windows.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Références, puis cliquez sur Ajouter une référence.

  3. Sous l'onglet .NET, cliquez sur Parcourir, allez au dossier <lecteur>:\Program Files\Microsoft Office\OFFICE12, puis cliquez sur Microsoft.Office.Interop.InfoPath.Xml.dll.

  4. Cliquez sur OK.

Modification automatisée de la valeur d'un champ

Supposez que l'un des clients de l'utilisateur d'un modèle de formulaire de rapport de vente InfoPath ait récemment modifié son nom et soit passé de « Société A » à « Société B ». Un développeur doit écrire un code qui met automatiquement à jour les formulaires de rapport de vente enregistrés à partir de ce modèle pour afficher le changement de nom. Le scénario suivant part d'un formulaire qui contient une zone de texte liée à un champ appelé customerName.

Création du modèle de formulaire et du formulaire

  1. Ouvrez InfoPath et créez un modèle de formulaire vide.

  2. Ajoutez une commande Zone de texte au formulaire et donnez un nom au champ lié à la commande customerName.

  3. Publiez le modèle dans un dossier appelé C:\Test et acceptez le nom par défaut, Modèle1.

  4. Ouvrez le modèle, ajoutez le nom « Société A » à la zone de texte liée au champ customerName, puis enregistrez le formulaire à l'aide du nom « Formulaire1 ».

Créez une application de console de code managé pour modifier le nom de « Société A » en « Société B »

  1. Ouvrez Visual Studio et créez une nouvelle application de console Visual C# ou Visual Basic appelée UpdateCustomer.

  2. Créez des références aux assemblys PIA (Primary Interop Assembly) de Microsoft Office InfoPath et aux assemblys d'interoperabilité XML d'InfoPath comme décrit plus haut.

  3. Ajoutez le code suivant au fichier Program.cs ou Module1.vb :

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Office.Interop.InfoPath;
    using Microsoft.Office.Interop.InfoPath.Xml;
    
    namespace UpdateCustomer
    {
       class Program
       {
          static void Main(string[] args)
          {
    
             // Create an InfoPath Application object.
             Application myApp = 
                new Microsoft.Office.Interop.InfoPath.Application();
    
             // Get a reference the XDocuments collection 
             // and open the sample form.
             XDocumentsCollection myXDocs = myApp.XDocuments;
             XDocument myXDoc = myXDocs.Open("C:\\Test\\Form1.xml",
                (int) XdDocumentVersionMode.xdFailOnVersionOlder);
    
             // Access the XML DOM for the underlying XML document using
             // the DOM property. Note that you must cast to the 
             // IXMLDOMDocument2 type from the
             // Microsoft.Office.Interop.InfoPath.Xml namespace
             // to access the XML DOM.
             IXMLDOMDocument2 myXMLDoc = myXDoc.DOM as IXMLDOMDocument2;
    
             // Set the MSXML SelectionNamespaces property to the my
             // namespace of the form. IMPORTANT:Replace the namespace 
             // alias with that of your sample form.
             myXMLDoc.setProperty("SelectionNamespaces",
    "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'");
    
             // Select all instances of customerName that contain 
             //'Company A'.
             IXMLDOMNodeList myNames = 
                myXMLDoc.selectNodes(
                "//my:customerName[. = 'Company A']");
    
             // Check to determine if any nodes were returned.
             if (myNames.length < 1)
             Console.WriteLine(
                "No elements containing 'Company A' were found.");
    
             // Loop through the list updating to 'Company B'.
             IXMLDOMNode myName = myNames.nextNode();
    
             while (myName != null)
             {
                myName.text = "Company B";
                myName = myNames.nextNode();
    
             }
    
             // Save the updated form as Form2.xml and close out.
             myXDoc.SaveAs("C:\\Test\\Form2.xml");
             myXDocs.Close(0);
             myApp.Quit(false);
             Console.WriteLine("Finished!");
    
          }
       }
    }
    
    Imports Microsoft.Office.Interop.InfoPath
    Imports Microsoft.Office.Interop.InfoPath.Xml
    Module Module1
       Sub Main()
          ' Create an InfoPath Application object.
          Dim myApp As Application = _
             New Microsoft.Office.Interop.InfoPath.Application()
    
          ' Get a reference the XDocuments collection 
          ' and open the sample form.
          Dim myXDocs As XDocumentsCollection = myApp.XDocuments
          Dim myXDoc As XDocument = myXDocs.Open( _
             "C:\\Test\\Form1.xml", _
             XdDocumentVersionMode.xdFailOnVersionOlder)
    
          ' Access the XML DOM for the underlying XML document using
          ' the DOM property. Note that you must cast to the 
          ' IXMLDOMDocument2 type from the
          ' Microsoft.Office.Interop.InfoPath.Xml namespace
          ' to access the XML DOM.
          Dim myXMLDoc As IXMLDOMDocument2 = _
             DirectCast(myXDoc.DOM, IXMLDOMDocument2)
    
          ' Set the MSXML SelectionNamespaces property to the my
          ' namespace of the form. IMPORTANT:Replace the namespace 
          ' alias with that of your sample form.
          myXMLDoc.setProperty("SelectionNamespaces", _
    "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'")
    
          ' Select all instances of customerName that contain 
          ''Company A'.
          Dim myNames As IXMLDOMNodeList = _
       myXMLDoc.selectNodes("//my:customerName[. = 'Company A']")
    
          ' Check to determine if any nodes were returned.
          If (myNames.length < 1) Then
             Console.WriteLine( _
                "No elements containing 'Company A' were found.")
          Else
             ' Loop through the list updating to 'Company B'.
             Dim myName As IXMLDOMNode = myNames.nextNode()
             While (myName IsNot Nothing)
                myName.text = "Company B"
                myName = myNames.nextNode()
             End While
          End If
    
          ' Save the updated form as Form2.xml and close out.
          myXDoc.SaveAs("C:\\Test\\Form2.xml")
          myXDocs.Close(0)
          myApp.Quit(False)
          Console.WriteLine("Finished!")
       End Sub
    End Module
    
  4. Cliquez sur Commencer le débogage dans le menu Débogage pour compiler et exécuter l'application de console.

    L'application ouvre le formulaire enregistré sous le nom Formulaire1.xml et effectue une boucle entre tous les éléments customerName qui contiennent la valeur Société A et modifient cette valeur en Société B. Après l'opération, une nouvelle copie du formulaire est enregistrée sous le nom Formulaire2.xml dans le dossier C:\Test.

    Remarque

    Pour déterminer la valeur de l'attribut xmlns:my namespace du modèle de formulaire pour définir la propriété SelectionNamespaces, ouvrez le modèle de formulaire dans InfoPath, ouvrez le volet Office Source de données, cliquez avec le bouton droit sur le champ customerName, puis cliquez sur Propriétés. La valeur de l'espace de noms s'affiche sous l'onglet Détails . Vous pouvez également déterminer cette valeur en ouvrant le fichier Formulaire1.xml dans un éditeur de texte.

Ouverture automatisée d'un formulaire et remplissage des valeurs de champ

L'exemple suivant automatise l'ouverture d'un formulaire vide et le remplissage des champs de nom, de prénom et d'adresse dans le formulaire. Ce scénario part d'un formulaire qui contient trois zones de texte liées aux champs Prénom, Nom et Adresse.

Création du modèle de formulaire et du formulaire

  1. Ouvrez InfoPath et créez un formulaire vide.

  2. Ajoutez trois commandes de zone de texte au formulaire et nommez les champs liés aux commandes : Prénom, Nom et Adresse. Ajoutez les champs souhaités.

  3. Publiez le modèle dans un dossier appelé C:\Temp et acceptez le nom par défaut, Modèle1.

  4. Ouvrez le modèle et enregistrez le formulaire vide sous le nom « Formulaire1 » dans C:\Temp.

Création d'une application de console de code managé pour ouvrir le formulaire et remplir les champs

  1. Ouvrez Visual Studio et créez une nouvelle application de console Visual C# ou Visual Basic appelée OpenForm.

  2. Créez des références aux assemblys PIA (Primary Interop Assembly) de Microsoft Office InfoPath et aux assemblys d'interoperabilité XML d'InfoPath comme décrit plus haut.

  3. Ajoutez le code suivant au fichier Program.cs ou Module1.vb :

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Office.Interop.InfoPath;
    using Microsoft.Office.Interop.InfoPath.Xml;
    
    namespace OpenForm
    {
       class Program
       {
          static void Main(string[] args)
          {
    
             // Create an InfoPath Application object.
             Application myApp=
                new Microsoft.Office.Interop.InfoPath.Application();
    
             // Create an InfoPath XDocument variable and open 
             // the blank form.
             XDocument myXDoc = myApp.XDocuments.Open(
                "c:\\temp\\Form1.xml",
                (int) XdDocumentVersionMode.xdFailOnVersionOlder);
    
             // Create an IXMLDOMDocument2 variable and access 
             // the XML DOM from the underlying XML document
             // using the DOM property of the XDocument object. 
             // Note that you must cast to IXMLDOMDocument2 to do so.
             IXMLDOMDocument2 doc= myXDoc.DOM as IXMLDOMDocument2;
    
             // Set the MSXML SelectionNamespaces property to the my
             // namespace of the form. IMPORTANT:Replace the namespace
             // with that of your sample form.
             doc.setProperty("SelectionNamespaces","xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'");
    
             // Pre-populate the fields with specified values.
             doc.selectSingleNode("//my:FirstName").text="My Name";
             doc.selectSingleNode("//my:LastName").text="My LastName";
             doc.selectSingleNode("//my:Address").text="My Address";
    
             // Save the form, leaving InfoPath open.
             myXDoc.Save();
    
          }
       }
    }
    
    Imports Microsoft.Office.Interop.InfoPath
    Imports Microsoft.Office.Interop.InfoPath.Xml
    
    Module Module1
    
       Sub Main()
          ' Create an InfoPath Application object.
          Dim myApp As Application = _
             New Microsoft.Office.Interop.InfoPath.Application
    
          ' Create an InfoPath XDocument variable and open 
          ' the blank form.
          Dim myXDoc As XDocument = myApp.XDocuments.Open( _
             "c:\\temp\\Form1.xml", _
             XdDocumentVersionMode.xdFailOnVersionOlder)
    
          ' Create an IXMLDOMDocument2 variable and access 
          ' the XML DOM from the underlying XML document
          ' using the DOM property of the XDocument object.
          Dim doc As IXMLDOMDocument2 = myXDoc.DOM
    
          ' Set the MSXML SelectionNamespaces property to the my
          ' namespace of the form. IMPORTANT:Replace the namespace
          ' with that of your sample form.
          doc.setProperty("SelectionNamespaces", "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'")
    
          ' Pre-populate the fields with specified values.
          doc.selectSingleNode("//my:FirstName").text = "My Name"
          doc.selectSingleNode("//my:LastName").text = "My LastName"
          doc.selectSingleNode("//my:Address").text = "My Address"
    
          ' Save the form, leaving InfoPath open.
          myXDoc.Save()
    
       End Sub
    
    End Module
    
  4. Dans le menu Débogage, cliquez sur Commencer le débogage pour compiler et exécuter l'application de console.

    L'application ouvre le formulaire enregistré sous le nom Formulaire1.xml et remplit les champs Prénom, Nom et Adresse à l'aide des valeurs spécifiées dans le code, puis enregistrez le formulaire et laissez InfoPath ouvert.

    Remarque

    Pour déterminer la valeur de l'attribut xmlns:my namespace du modèle de formulaire pour définir la propriété SelectionNamespaces, ouvrez le modèle de formulaire dans InfoPath, ouvrez le volet Office Source de données, cliquez avec le bouton droit sur le champ Prénom, puis cliquez sur Propriétés. La valeur de l'espace de noms s'affiche sous l'onglet Détails . Vous pouvez également déterminer cette valeur en ouvrant le fichier Formulaire1.xml dans un éditeur de texte.

Voir aussi

Concepts

À propos de l'assembly PIA (Primary Interop Assembly) de Microsoft Office InfoPath
À propos de l'assembly d'interopérabilité XML d'InfoPath