Importar dados XML de nomeação para objetos de nomeação do Outlook (Outlook)

Este tópico mostra como ler dados de compromisso formatados em XML, salvar os dados em objetos AppointmentItem do Microsoft Outlook no calendário padrão e retornar os objetos de compromisso em uma matriz.

| Logotipo MVP

| Helmut Obertanner forneceu os seguintes exemplos de código. Helmut é um profissional mais valioso da Microsoft com experiência em ferramentas de desenvolvimento do Microsoft Office no Microsoft Visual Studio e microsoft Office Outlook.|

The following managed code samples are written in C# and Visual Basic. To run a .NET Framework managed code sample that needs to call into a Component Object Model (COM), you must use an interop assembly that defines and maps managed interfaces to the COM objects in the object model type library. Para o Outlook, use o Visual Studio e o Pia (Conjunto de Interoperabilidade Primário) do Outlook. Antes de executar exemplos de código gerenciado para o Outlook 2013, verifique se você instalou a PIA do Outlook 2013 e adicionou uma referência ao componente biblioteca de objetos do Microsoft Outlook 15.0 no Visual Studio. Use os exemplos de código a ThisAddIn seguir na classe de um suplemento do Outlook (usando ferramentas de desenvolvedor do Office para Visual Studio). The Application object in the code must be a trusted Outlook Application object provided by ThisAddIn.Globals. Para obter mais informações sobre como usar o Outlook PIA para desenvolver soluções gerenciadas do Outlook, confira Bem-vindo à Referência de Assembly de Interoperabilidade Primária do Outlook. Os exemplos de código a seguir contêm o CreateAppointmentsFromXml método da Sample classe, implementado como parte de um projeto de suplemento do Outlook. Cada projeto adiciona uma referência para o Outlook PIA, que se baseia no namespace Microsoft.Office.Interop.Outlook. O CreateAppointmentsFromXml método aceita dois parâmetros de entrada, aplicativo e xml:

  • o aplicativo é um objeto confiável do Outlook Application .

  • xml é uma cadeia de caracteres XML ou uma cadeia de caracteres que representa um caminho para um arquivo XML válido. Para a finalidade dos seguintes exemplos de código, o XML delimita os dados de nomeação usando as seguintes marcas XML:

Dados de compromisso Marca XML de delimitação
Todo o conjunto de dados do compromisso <Compromissos>
Cada compromisso no conjunto <Nomeação>
Hora de início de um compromisso <Starttime>
Hora de término de um compromisso <Endtime>
Título de um compromisso <Assunto>
Local de um compromisso <Localização>
Detalhes de um compromisso <Corpo>

O exemplo a seguir mostra dados de entrada para o parâmetro 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> 

O CreateAppointmentsFromXml método usa a implementação do Microsoft COM do DOM (Modelo de Objeto de Documento XML) para carregar e processar os dados XML fornecidos pelo XML . CreateAppointmentsFromXml primeiro verifica se xml especifica uma fonte válida de dados XML. Se sim, ele carrega os dados em um documento XML, DOMDocument. Caso contrário, CreateAppointmentsFromXml gera uma exceção. Para mais informações sobre o DOM XML, confira DOM. Para cada nó filho de compromisso delimitado pela <marca de compromisso> nos dados XML, CreateAppointmentsFromXml procura marcas específicas, usa o DOM para extrair os dados e atribui os dados às propriedades correspondentes de um objeto AppointmentItem : Iniciar, Terminar, Assunto, Localização e Corpo. CreateAppointmentsFromXml em seguida, salva o compromisso no calendário padrão. CreateAppointmentsFromXml usa o método Add da classe List( type) no namespace System.Collections.Generic para agregar esses objetos AppointmentItem . Quando o método tiver processado todos os compromissos dos dados XML, retornará objetos AppointmentItem em uma matriz. Veja a seguir o exemplo de código do 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(); 
        } 
 
    } 
}

Veja a seguir o exemplo de código do 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

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.