Импорт XML-данных встреч в объекты встреч Outlook
В этом разделе показаны методы чтения данных о встрече в формате XML, сохранения этих данных в объектах AppointmentItem календаря Outlook по умолчанию и возврата объектов встреч в массиве.
Пример
Примечание.
Приведенные ниже примеры кода создал Хельмут Обертаннер (Helmut Obertanner). Хельмут специализируется на Outlook и инструментах разработчика Office для Visual Studio.
В следующем примере кода используется метод CreateAppointmentsFromXml класса Sample, который реализован в рамках проекта надстройки Outlook. Каждый проект добавляет ссылку на основную сборку взаимодействия Outlook на основе пространства имен Microsoft.Office.Interop.Outlook.
Метод CreateAppointmentsFromXml принимает два входных параметра:
Параметр application — это надежный объект Outlook Application.
Параметр xml — это либо строка XML, либо строка, представляющая путь к правильному XML-файлу. В контексте следующих примеров кода XML разграничивает данные о встречах с помощью следующих XML-тегов.
Данные встречи
Разграничивающий XML-тег
Весь набор данных встречи
appointments
Каждая встреча в наборе
appointment
Время начала встречи
starttime
Время окончания встречи
endtime
Название встречи
subject
Место встречи
location
Подробные сведения о встрече
body
В следующем примере показаны входные данные для параметра 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>
В методе CreateAppointmentsFromXml используется реализация COM Microsoft модели DOM XML для загрузки и обработки XML-данных, предоставляемых параметром xml. Метод CreateAppointmentsFromXml сначала проверяет, указывает ли xml правильный источник XML-данных. Если источник правильный, то этот метод загружает данные в XML-документ DOMDocument. В противном случае метод CreateAppointmentsFromXml создает исключение. Дополнительные сведения о модели DOM XML см. в разделе DOM.
Для каждого дочернего элемента встречи, разграниченного тегом встречи в XML-данных, метод CreateAppointmentsFromXml выполняет поиск конкретных тегов, извлекает данные с помощью DOM и назначает их соответствующим свойствам объекта AppointmentItem: Start, End, Subject, Location и Body. Затем метод CreateAppointmentsFromXml сохраняет встречу в календарь, используемый по умолчанию.
CreateAppointmentsFromXml использует метод Add класса List<T> в пространстве имен System.Collections.Generic, чтобы собрать эти объекты AppointmentItem. После обработки всех встреч в XML-данных метод возвращает объекты AppointmentItem в массив.
Если для тестирования этого примера кода вы используете Visual Studio, сначала добавьте ссылку на компонент библиотеки объектов Microsoft Outlook 15.0 и укажите переменную Outlook при импорте пространства имен Microsoft.Office.Interop.Outlook. Инструкция Imports или using не должна идти непосредственно перед функциями в примере кода, но ее нужно добавить перед объявлением общедоступного класса. В следующих строках кода показано, как выполнить импорт и назначение в Visual Basic и C#.
Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Ниже приведен пример кода на языке Visual Basic, за которым следует пример на языке 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();
}
}
}