From 0ea8dd7c4529f094ee973ca55cd104336e1a05af Mon Sep 17 00:00:00 2001 From: Thorsten Eckel Date: Tue, 9 Jan 2018 19:23:23 +0100 Subject: [PATCH] Fixed issue #1740 - Exchange is limited to 1000 entries and wont sync more. --- .../exchange/folder_contacts/sub_sequence.rb | 54 ++++++++++++++----- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/lib/sequencer/unit/import/exchange/folder_contacts/sub_sequence.rb b/lib/sequencer/unit/import/exchange/folder_contacts/sub_sequence.rb index 9b53da919..2a6248e84 100644 --- a/lib/sequencer/unit/import/exchange/folder_contacts/sub_sequence.rb +++ b/lib/sequencer/unit/import/exchange/folder_contacts/sub_sequence.rb @@ -13,25 +13,51 @@ class Sequencer return if ews_folder_ids.blank? ews_folder_ids.each do |folder_id| - folder = ews_folder.find(folder_id) - display_path = ews_folder.display_path(folder) - - sequence_resources(folder.items) do |parameters| - - item = parameters[:resource] - - logger.debug("Extracting attributes from Exchange item: #{item.get_all_properties!.inspect}") - - parameters.merge( - resource: ::Import::Exchange::ItemAttributes.extract(item), - ews_folder_name: display_path, - ) - end + folder = ews_folder.find(folder_id) + paginated_item_sequence(folder) end end private + def paginated_item_sequence(folder) + + total = folder.total_count + per_page = 1000 + pages = (total.to_f / per_page.to_f).ceil + + display_path = ews_folder.display_path(folder) + (1..pages).each do |page| + + offset = (page - 1) * per_page + + opts = { + indexed_page_item_view: { + max_entries_returned: per_page, + offset: offset, + base_point: 'Beginning' + } + } + + logger.debug "Fetching and processing #{per_page} items (page: #{page}, offset: #{offset}) from Exchange folder '#{display_path}' (total: #{total})" + + folder.items(opts).each do |item| + + sequence_resource(item) do |parameters| + + item = parameters[:resource] + + logger.debug "Extracting attributes from Exchange item: #{item.get_all_properties!.inspect}" + + parameters.merge( + resource: ::Import::Exchange::ItemAttributes.extract(item), + ews_folder_name: display_path, + ) + end + end + end + end + def sequence 'Import::Exchange::FolderContact' end