Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Outlook GetGlobalAddressList.AddressEntries查询需要30+;会议记录_Ruby_Outlook_Win32ole - Fatal编程技术网

Ruby Outlook GetGlobalAddressList.AddressEntries查询需要30+;会议记录

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

这不是一个ruby问题,这更像是一个Outlook问题,但我的示例是用ruby编写的

我有一个ruby脚本,它是从旧的Vb脚本多变形而来的,用于从我的outlook服务器下载联系人

此查询需要30分钟以上的时间才能获得500多个联系人,因为它会对每个字段名进行同步查询,因此仅对500个联系人进行此查询所需的时间是不可接受的。这是一种超级低效的联系人查询方式

如何在一个请求中查询所有单个字段,而不是在500个
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,不幸的是,它不处理并行请求,它允许异步请求,但用户也会因为一次允许打开多少请求而受到限制=/