Importer des données XML de rendez-vous dans des objets rendez-vous Outlook (Outlook)

Cette rubrique montre comment lire les données de rendez-vous au format XML, enregistrer les données dans des objets AppointmentItem Microsoft Outlook dans le calendrier par défaut et retourner les objets de rendez-vous dans un tableau.

| Logo MVP

|Helmut Obertanner propose les exemples de code suivants. Helmut est un professionnel microsoft le plus précieux avec une expertise dans les outils de développement Microsoft Office dans Microsoft Visual Studio et Microsoft Office Outlook.|

Les exemples de code managé suivants sont écrits dans C# et Visual Basic. Pour exécuter un exemple de code managé .NET Framework qui doit appeler un modèle COM (Component Object Model), vous devez utiliser un assembly d’interopérabilité qui définit et mappe des interfaces managées avec des objets COM dans la bibliothèque de types de modèle objet. Pour Outlook, utilisez Visual Studio et l’assembly PIA (Primary Interop Assembly) Outlook. Avant d’exécuter des exemples de code managé pour Outlook 2013, vérifiez que vous avez installé l’assembly PIA Outlook 2013 et que vous avez ajouté une référence au composant Bibliothèque d’objets Microsoft Outlook 15.0 dans Visual Studio. Utilisez les exemples de code suivants dans la ThisAddIn classe d’un complément Outlook (à l’aide des outils de développement Office pour Visual Studio). L'objet Application dans le code doit être un objet Application Outlook approuvé fourni par ThisAddIn.Globals. Pour plus d’informations sur l’utilisation de l’assembly PIA Outlook pour développer des solutions Outlook managées, voir Bienvenue dans la référence de l’assembly d’interopérabilité principal Outlook. Les exemples de code suivants contiennent la CreateAppointmentsFromXml méthode de la Sample classe, implémentée dans le cadre d’un projet de complément Outlook. Chaque projet ajoute une référence à l'assembly PIA d'Outlook en fonction de l'espace de noms Microsoft.Office.Interop.Outlook. La CreateAppointmentsFromXml méthode accepte deux paramètres d’entrée, application et xml :

  • application est un objet Application Outlook approuvé.

  • xml est une chaîne XML ou une chaîne qui représente un chemin d'accès à un fichier XML valide. Pour les exemples de code suivants, le code XML délimite les données de rendez-vous à l’aide des balises XML suivantes :

Données de rendez-vous Balise XML de délimitation
Ensemble complet des données de rendez-vous <Rendez-vous>
Chaque rendez-vous de l’ensemble <Nomination>
Heure de début d’un rendez-vous <Starttime>
Heure de fin d’un rendez-vous <heure de fin>
Titre d’un rendez-vous <Objet>
Lieu d’un rendez-vous <Emplacement>
Détails d’un rendez-vous <Corps>

L’exemple suivant expose les données d’entrée du paramètre xml.

<?xml version="1.0" encoding="utf-8" ?>  
<appointments> 
    <appointment> 
        <starttime>2009-06-01T15:00:00</starttime> 
        <endtime>2009-06-01T16:15:00</endtime> 
        <subject>This is a Test-Appointment</subject> 
        <location>At your Desk</location> 
        <body>Here is the Bodytext</body> 
    </appointment> 
    <appointment> 
        <starttime>2009-06-01T17:00:00</starttime> 
        <endtime>2009-06-01T17:15:00</endtime> 
        <subject>This is a second Test-Appointment</subject> 
        <location>At your Desk</location> 
        <body>Here is the Bodytext</body> 
    </appointment> 
    <appointment> 
        <starttime>2009-06-01T17:00:00</starttime> 
        <endtime>2009-06-01T18:15:00</endtime> 
        <subject>This is a third Test-Appointment</subject> 
        <location>At your Desk</location> 
        <body>Here is the Bodytext</body> 
    </appointment> 
</appointments> 

La CreateAppointmentsFromXml méthode utilise l’implémentation Microsoft COM du modèle DOM (Document Object Model) XML pour charger et traiter les données XML que xml fournit. CreateAppointmentsFromXml Vérifie d’abord si xml spécifie une source valide de données XML. Si c'est le cas, il charge les données dans un document XML, DOMDocument. Sinon, CreateAppointmentsFromXml lève une exception. Pour plus d'informations sur XML DOM, consultez DOM. Pour chaque nœud enfant de rendez-vous délimité par la <balise appointment> dans les données XML, CreateAppointmentsFromXml recherche des balises spécifiques, utilise le DOM pour extraire les données et affecte les données aux propriétés correspondantes d’un objet AppointmentItem : Start, End, Subject, Location et Body. CreateAppointmentsFromXml enregistre le rendez-vous dans le calendrier par défaut. CreateAppointmentsFromXml utilise la méthode Add de la classe List( type) dans l’espace de noms System.Collections.Generic pour agréger ces objets AppointmentItem . Lorsque la méthode a traité tous les rendez-vous dans les données XML, elle renvoie les objets AppointmentItem dans un tableau. L’exemple de code suivant est écrit en C#.

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Text; 
using System.Xml; 
using Outlook = Microsoft.Office.Interop.Outlook; 
 
namespace OutlookAddIn1 
{ 
    class Sample 
    { 
        Outlook.AppointmentItem[] CreateAppointmentsFromXml(Outlook.Application application, 
                                                            string xml) 
        { 
            // Create a list of appointment objects. 
            List<Outlook.AppointmentItem> appointments = new  
                List<Microsoft.Office.Interop.Outlook.AppointmentItem>(); 
            XmlDocument xmlDoc = new XmlDocument(); 
 
            // If xml is an XML string, create the document directly.  
            if (xml.StartsWith("<?xml")) 
            { 
                xmlDoc.LoadXml(xml); 
            } 
            else if (File.Exists(xml)) 
            { 
                xmlDoc.Load(xml); 
            } 
            else 
            { 
                throw new Exception( 
                    "The input string is not valid XML data or the specified file doesn't exist."); 
            } 
 
            // Select all appointment nodes under the root appointments node. 
            XmlNodeList appointmentNodes = xmlDoc.SelectNodes("appointments/appointment"); 
            foreach (XmlNode appointmentNode in appointmentNodes) 
            { 
 
                // Create a new AppointmentItem object. 
                Outlook.AppointmentItem newAppointment =  
                    (Outlook.AppointmentItem)application.CreateItem(Outlook.OlItemType.olAppointmentItem); 
 
                // Loop over all child nodes, check the node name, and import the data into the  
                // appointment fields. 
                foreach (XmlNode node in appointmentNode.ChildNodes) 
                { 
                    switch (node.Name) 
                    { 
 
                        case "starttime": 
                            newAppointment.Start = DateTime.Parse(node.InnerText); 
                            break; 
 
                        case "endtime": 
                            newAppointment.End = DateTime.Parse(node.InnerText); 
                            break; 
 
                        case "subject": 
                            newAppointment.Subject = node.InnerText; 
                            break; 
 
                        case "location": 
                            newAppointment.Location = node.InnerText; 
                            break; 
 
                        case "body": 
                            newAppointment.Body = node.InnerText; 
                            break; 
 
                    } 
                } 
 
                // Save the item in the default calendar. 
                newAppointment.Save(); 
                appointments.Add(newAppointment); 
            } 
 
            // Return an array of new appointments. 
            return appointments.ToArray(); 
        } 
 
    } 
}

L'exemple de code suivant est écrit en Visual Basic.

Imports System.IO 
Imports System.Xml 
Imports Outlook = Microsoft.Office.Interop.Outlook 
 
Namespace OutlookAddIn2 
    Class Sample 
        Function CreateAppointmentsFromXml(ByVal application As Outlook.Application, _ 
            ByVal xml As String) As Outlook.AppointmentItem() 
 
            Dim appointments As New List(Of Outlook.AppointmentItem) 
            Dim xmlDoc As New XmlDocument() 
 
            If xml is an XML string, create the XML document directly. 
            If xml.StartsWith("<?xml") Then 
                xmlDoc.LoadXml(xml) 
            ElseIf (File.Exists(xml)) Then 
                xmlDoc.Load(xml) 
            Else 
                Throw New Exception("The input string is not valid XML data or the specified file doesn't exist.") 
            End If 
 
 
            ' Select all appointment nodes under the root appointments node. 
            Dim appointmentNodes As XmlNodeList = xmlDoc.SelectNodes("appointments/appointment") 
 
            For Each appointmentNode As XmlNode In appointmentNodes 
 
                ' Create a new AppointmentItem object. 
                Dim newAppointment As Outlook.AppointmentItem = _ 
                    DirectCast(application.CreateItem(Outlook.OlItemType.olAppointmentItem), _ 
                    Outlook.AppointmentItem) 
 
                ' Loop over all child nodes, check the node name, and import the data into the appointment fields. 
 
                For Each node As XmlNode In appointmentNode.ChildNodes 
                    Select Case (node.Name) 
 
                        Case "starttime" 
                            newAppointment.Start = DateTime.Parse(node.InnerText) 
 
 
                        Case "endtime" 
                            newAppointment.End = DateTime.Parse(node.InnerText) 
 
 
                        Case "subject" 
                            newAppointment.Subject = node.InnerText 
 
 
                        Case "location" 
                            newAppointment.Location = node.InnerText 
 
 
                        Case "body" 
                            newAppointment.Body = node.InnerText 
 
 
                    End Select 
                Next 
 
                ' Save the item in the default calendar. 
                newAppointment.Save() 
                appointments.Add(newAppointment) 
            Next 
 
            ' Return an array of new appointments. 
            Return appointments.ToArray() 
        End Function 
 
 
    End Class 
End Namespace

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.