2013-07-22 5 views
1

Я использую tidesdk для создания настольного приложения, связанного с MS Outlook. Приложение работает хорошо, но ...Найти всех контактов в Outlook с Ruby

Когда я получаю контакты из Outlook, я использую это.

def getContacts() 

     #ouverture de l'application outlook 
     begin 
      application = WIN32OLE.new('Outlook.Application') 
     rescue Exception=>e 
      alert("An error occurred while opening outlook, no contacts will be loaded"); 
      return false 
     end 

     mapi = application.GetNameSpace('MAPI') 

     contacts = mapi.GetDefaultFolder(10).Items 
     contacts.each do |contact| 

      begin 
       puts contact.FullName 
       puts contact.Email1Address 
       puts contact.BusinessTelephoneNumber 
       addContactApp(contact.FullName, contact.Email1Address) 
      rescue Exception=>e 
       alert("An error occurred while loading contacts"); 
      end 
     end 
    end 

Это слишком работает ... но у меня есть более чем одну папки в моем списке контактов, и я хотел бы получить все контакты из всех папок в MS Outlook. Можно ли получить все папки контактов?

ответ

2

В начало Коллекция Namespace.Folders и рекурсивно обрабатывать каждую папку и ее подпапки (MAPIFolder.Folders), проверяя имущество MAPIFolder.DefaultItemType.

0

Thx для вашего ответа !! Я пробовал это, и он работает нормально!

mapi = application.GetNameSpace('MAPI') 
     contacts_all_folders = mapi.GetDefaultFolder(10).Folders 
     contacts_all_folders.each do |folder|   
      var myfolder = mapi.GetDefaultFolder(10).Folders(folder.Name).Items 
      myfolder.each do |contact| 
       begin 
        puts contact.FullName 
        puts contact.Email1Address 
        puts contact.BusinessTelephoneNumber 
        addContactApp(contact.FullName, contact.Email1Address) 
       rescue Exception=>e 
        alert("An error occurred while loading contacts "+e); 
       end 
      end 
     end 
1

Это совсем не то, что я имел в виду: вы обрабатываете только элементы в подпапках папки «Контакты по умолчанию». Если у вас есть папка с контактами на том же уровне, что и папка «Входящие» или «Контакты», она не будет обработана - вам нужно начать с Namespace.Folders и проверить свойство DefaultItemType, чтобы убедиться, что вы обрабатываете только папки контактов. Во-вторых, вы предполагаете, что у вас есть только контакты. Если у вас есть список рассылки, ваш код вызовет ошибку, так как объект DistListItem не поддерживает FullName/Email1Address/etc. свойства. Убедитесь, что свойство класса (выставлено всеми объектами OOM) равно 40 (OlObjectClass.olContact).

+0

Я собираюсь попытаться сделать ваши советы, лучше проверить все папки, не было на уме! Спасибо ! – Zuhn

Смежные вопросы