Importation des données XML d’un rendez-vous dans les objets de rendez-vous Outlook
Cette rubrique montre comment lire des données de rendez-vous au format XML, enregistrer les données dans des objets Outlook AppointmentItem dans le calendrier par défaut, puis renvoyer les objets de rendez-vous dans un tableau.
Exemple
Remarque
Helmut Obertanner a fourni les exemples de code suivants. L’expertise de Helmut se trouve dans les outils de développement Office pour Visual Studio et Outlook.
Les exemples de code suivants contiennent la méthode CreateAppointmentsFromXml de la classe Sample, implémentée dans le cadre d’un projet de complément Outlook. Chaque projet ajoute une référence à l’assembly PIA (Primary Interop Assembly) Outlook, qui est basé sur l’espace de noms Microsoft.Office.Interop.Outlook.
La méthode CreateAppointmentsFromXml accepte deux paramètres d’entrée :
l’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. Dans les exemples de code suivants, le code XML délimite les données de rendez-vous en utilisant les balises XML suivantes :
Données de rendez-vous
Balise XML de délimitation
Ensemble de données de rendez-vous
rendez-vous ;
Chaque rendez-vous de l’ensemble de données
rendez-vous
Heure de début d’un rendez-vous
starttime
Heure de fin d’un rendez-vous
endtime
Titre d’un rendez-vous
subject
Emplacement d’un rendez-vous
location
Détails d’un rendez-vous
body
L’exemple suivant montre 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 méthode CreateAppointmentsFromXml utilise l’implémentation COM Microsoft du modèle DOM (Document Object Model) XML pour charger et traiter les données XML fournies dans le paramètre xml. CreateAppointmentsFromXml vérifie tout 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. Dans la négative, 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 de rendez-vous 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, puis Body. CreateAppointmentsFromXml enregistre ensuite le rendez-vous dans le calendrier par défaut.
CreateAppointmentsFromXml utilise la méthode Add de la classe List<T> dans l’espace de noms System.Collections.Generic pour agréger ces objets AppointmentItem. Quand la méthode a traité tous les rendez-vous dans les données XML, elle renvoie les objets AppointmentItem dans un tableau.
Si vous utilisez Visual Studio pour tester cet exemple de code, vous devez d’abord ajouter une référence au composant Bibliothèque d’objets Microsoft Outlook 15.0 et spécifier la variable lorsque vous importez l’espace de noms Microsoft.Office.Interop.Outlook. L'instruction Importer ou utilisation ne doit pas se produire juste avant les fonctions de l'exemple de code, mais doit être ajoutée avant la déclaration publique. Les lignes de code suivantes montrent comment effectuer l'importation et l'affectation dans Visual Basic et dans C#.
Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
L'exemple suivant est un exemple de code Visual Basic, suivi de l'exemple de code C#.
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
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();
}
}
}