这不是一个红宝石问题,这更像是一个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