Ruby Outlook GetGlobalAddressList.AddressEntries查询需要30+;会议记录
这不是一个ruby问题,这更像是一个Outlook问题,但我的示例是用ruby编写的 我有一个ruby脚本,它是从旧的Vb脚本多变形而来的,用于从我的outlook服务器下载联系人 此查询需要30分钟以上的时间才能获得500多个联系人,因为它会对每个字段名进行同步查询,因此仅对500个联系人进行此查询所需的时间是不可接受的。这是一种超级低效的联系人查询方式 如何在一个请求中查询所有单个字段,而不是在500个Ruby Outlook GetGlobalAddressList.AddressEntries查询需要30+;会议记录,ruby,outlook,win32ole,Ruby,Outlook,Win32ole,这不是一个ruby问题,这更像是一个Outlook问题,但我的示例是用ruby编写的 我有一个ruby脚本,它是从旧的Vb脚本多变形而来的,用于从我的outlook服务器下载联系人 此查询需要30分钟以上的时间才能获得500多个联系人,因为它会对每个字段名进行同步查询,因此仅对500个联系人进行此查询所需的时间是不可接受的。这是一种超级低效的联系人查询方式 如何在一个请求中查询所有单个字段,而不是在500个user\u记录对象中的每一个,需要30秒以上的时间才能获得所有需要的字段 obj_out
user\u记录
对象中的每一个,需要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
不确定Outlook是否有批量查询,但如果Outlook处理并行请求,则可以将每个批的迭代放在自己的批中。或者使用gem,不幸的是,它不处理并行请求,它允许异步请求,但用户也会因为一次允许打开多少请求而受到限制=/