我正在編寫一個應用程序來使用Exchange Web服務處理電子郵件附件。Exchange Web服務:使用FindItemsResult進行批處理<Item>
我的問題區域的一般結構如下:
public static void Main()
{
FindItemsResults<Item> findResults = FindItems();
foreach (Item item in findResults)
{
DoSomethingWithItem(item);
}
}
public static FindItemsResults<Item> FindItems()
{
FindItemsResults<Item> findResults;
ItemView view = new ItemView(10); //batching 10 at a time
view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
view.PropertySet = new PropertySet(
BasePropertySet.IdOnly,
ItemSchema.Subject,
ItemSchema.DateTimeReceived);
findResults = service.FindItems(
WellKnownFolderName.Inbox,
new SearchFilter.SearchFilterCollection(
LogicalOperator.Or,
new SearchFilter.ContainsSubstring(ItemSchema.Subject, Properties.Settings.Default.EmailSubject)),
view);
//return set of emails
return findResults;
}
起初,這看起來不錯 - 它處理我剛纔的測試實例非常清楚。但是當我開始測試批量加載時,我意識到它只處理前10個項目,因爲我指定了10個項目的批量大小(ItemView view = new ItemView(10
)),但我沒有檢查更多批次。
我可以簡單地增加了批量大小,但快速谷歌之後,我發現了一個更好的例子:
public static FindItemsResults<Item> FindItems()
{
FindItemsResults<Item> findResults;
ItemView view = new ItemView(10, 0, OffsetBasePoint.Beginning);
view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
view.PropertySet = new PropertySet(
BasePropertySet.IdOnly,
ItemSchema.Subject,
ItemSchema.DateTimeReceived);
do
{
findResults = service.FindItems(
WellKnownFolderName.Inbox,
new SearchFilter.SearchFilterCollection(
LogicalOperator.Or,
new SearchFilter.ContainsSubstring(ItemSchema.Subject, Properties.Settings.Default.EmailSubject)),
view);
//any more batches?
if (findResults.NextPageOffset.HasValue)
{
view.Offset = findResults.NextPageOffset.Value;
}
}
while (findResults.MoreAvailable);
return findResults;
}
這遍歷儘可能多的郵件,因爲我在乎扔它,但對於原因,我還不能理解,foreach循環現在只處理findResults中的第一項。
即使findResults包含多個項目(findResults.Items.Count
> 1),在我的第二個示例中,findResults.MoreAvailable
= false。很公平,我早些時候通過了批次,所以我看到最後一批的結束是有道理的。
但是,如何重置findResults,以便處理整個過程?我嘗試設置findResults.MoreAvailable,但它是隻讀的...我錯過了什麼?
結論:
好了,我可以處理項目一個批次的時間,或者我可以在每個批次添加的每個項目列表,以後再處理它們,因爲我目前做的。
他們之間沒有太多的關係;我最初開始使用List,但我會進一步考慮選擇。