Outlook GetGlobalAddressList.AddressEntries查询需要30多分钟

时间:2017-06-16 23:11:14

标签: ruby outlook win32ole

这不是一个红宝石问题,这更像是一个Outlook问题,但我的例子是用Ruby编写的。

我有一个ruby脚本,它已经从一个旧的Vb脚本中变形,并且用于从我的组织Outlook服务器下载联系人。

此查询需要30多分钟才能获得500多个联系人,因为它会对每个单独的字段名称进行同步查询,这对于仅500个联系人而言是不可接受的。这是查询联系人的超低效方式。

如何能够在一个请求中查询所有单个字段,而不是每个500 user_record个对象花费30秒以上来获取所有需要的字段?

obj_outlook = WIN32OLE.new("Outlook.Application")
obj_namespace = obj_outlook.GetNamespace("MAPI")
obj_namespace.GetGlobalAddressList.AddressEntries.each do |entry|
  begin
    user = entry.GetExchangeUser
    next if user.nil?
    user_record = {
      first_name: user.FirstName,                         # synchronous request 1
      last_name: user.LastName,                           # synchronous request 2
      job_title: user.JobTitle,                           # synchronous request 3
      department: user.Department,                        # synchronous request 4
      company: user.CompanyName,                          # synchronous request 5
      phone_number: user.MobileTelephoneNumber,           # synchronous request 6
      email: user.PrimarySmtpAddress,                     # synchronous request 7
      manager: { 
        first_name: user.Manager.FirstName,               # synchronous request 8
        last_name: user.Manager.LastName,                 # synchronous request 9
        job_title: user.Manager.JobTitle,                 # synchronous request 10
        department: user.Manager.Department,              # synchronous request 11
        company: user.Manager.CompanyName,                # synchronous request 12
        phone_number: user.Manager.MobileTelephoneNumber, # synchronous request 13
        email: user.Manager.PrimarySmtpAddress            # synchronous request 14
      }
    }
    # do something to save user_record
  rescue => error
    puts error
  end
end

0 个答案:

没有答案