2012-09-13 31 views
6

Actualmente estoy escribiendo un complemento de Outlook 2010 con C#. Lo que quiero es obtener la propiedad CompanyName de un objeto Recipient que extraigo de un AppointmentItem. Entonces, al tener los destinatarios de un elemento de cita quiero averiguar el nombre de compañía de cada destinatario, que podría ser un usuario de Exchange.C# Outlook obtener propiedad CompanyName del destinatario

Mi código es la siguiente:

Recipients recipients = appointmentItem.Recipients; 
foreach (Recipient rec in recipients) 
{ 
    resolved = rec.Resolve(); 
    if (resolved) 
    { 
     ContactItem contactItem = rec.AddressEntry.GetContact(); 
     String companyName = contactItem.CompanyName;  
     // ... 
    } 

Dónde ContactItem siempre es nula.

Hacer algo como esto también da como resultado un puntero nulo.

ExchangeUser u = rec.AddressEntry.GetExchangeUser(); 
companyName = u.CompanyName; 

Simplemente no puedo obtener la información CompanyName. Sé que la información existe. Sin embargo, también muchos otros atributos, además de CompanyName, parecen dar como resultado punteros NULL también.

¿Alguien puede darme una pista sobre eso?

Gracias de antemano.

Respuesta

3

Pruebe con el siguiente código. Trabajando para mi

CÓDIGO:

bool resolved; 
     Microsoft.Office.Interop.Outlook.Application olApplication = new Microsoft.Office.Interop.Outlook.Application(); 

     // get nameSpace and logon. 
     Microsoft.Office.Interop.Outlook.NameSpace olNameSpace = olApplication.GetNamespace("mapi"); 
     olNameSpace.Logon("Outlook", "", false, true); 

     // get the Calender items 
     Microsoft.Office.Interop.Outlook.MAPIFolder _olCalender = olNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar); 

     // Get the Items (Appointments) collection from the Calendar folder. 
     Microsoft.Office.Interop.Outlook.Items oItems = _olCalender.Items; 



     foreach (object o in oItems) 
     { 

      if (o is Microsoft.Office.Interop.Outlook.AppointmentItem) 
      { 
       Microsoft.Office.Interop.Outlook.Recipients recipients = ((Microsoft.Office.Interop.Outlook.AppointmentItem)o).Recipients; 
       foreach (Microsoft.Office.Interop.Outlook.Recipient rec in recipients) 
       { 
        resolved = rec.Resolve(); 
        if (resolved) 
        { 
         Microsoft.Office.Interop.Outlook.ContactItem contactItem = rec.AddressEntry.GetContact(); 
         MessageBox.Show(contactItem.CompanyName); 
        } 
       } 

      } 
     } 

espero que debería funcionar.

1

No he intentado esto pero puede ayudar. Parece que CompanyName es propiedad de ContactItem, por lo que debe convertir al destinatario en ContactItem. El código siguiente busca el contacto en la libreta de direcciones utilizando la dirección de correo electrónico del destinatario. Desde aquí puede encontrar CompanyName:

Outlook.MAPIFolder fldContacts = (Outlook.MAPIFolder)OutlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts); 
for (int i =1; i <aitem.Recipients.Count+1 ; i++) 
{ 
    Outlook.Recipient r = aitem.Recipients.Item(i); 
    if (!r.Resolved) r.Resolve(); 
    if (r.Resolved) 
    { 
    Outlook.ContactItem ci = (fldContacts.Items.Find("[Email1Address] = '" + r.Address + "'") as Outlook.ContactItem); 
    if (ci != null) 
    { 
     //Now you got the contact deal with it here 
    } 
    } 
} 
Cuestiones relacionadas