2012-09-04 34 views
2

我試圖以編程方式篩選在Outlook 2010中的聯繫人文件夾的Outlook聯繫人我跟着DASL過濾規則,但它似乎對Find功能工作,並拋出異常時,我給你這個過濾器view.Filter = FilterString。任何想法我做錯了什麼?正確的結果會在現有的聯繫人視圖中顯示已過濾的聯繫人。在Outlook 2010中編程過濾添加聯繫人,在

Outlook.Application myApp = ThisAddIn.myApp; 
Outlook.NameSpace myNamespace = ThisAddIn.nSpace; 
Outlook.MAPIFolder myContactsFolder = ThisAddIn.contactsFolder; 
if (myContactsFolder == null) 
{ 
    Log.Verbose("Contacts folder not found"); 
    return null; 
} 

Outlook.Items contactItems = ThisAddIn.contactItems; 

//use filter to take only contact and not DistListItem 
Outlook.Items outlookContacts = contactItems.Restrict("[MessageClass] = 'IPM.Contact'"); 
Outlook.ContactItem contact = null; 

int iOutlookContacts = contactItems.Count; 
if (iOutlookContacts > 0) 
{ 
    string FilterString = "[FullName]='" + param + "'"; 

    // Find works with this filter 
    contact = (Outlook.ContactItem)outlookContacts.Find(FilterString); 
    if (contact != null) 
    { 
     // need to display in contacts search window 
     Outlook.View currentView = myApp.ActiveExplorer().CurrentView; 
     currentView.Filter = FilterString; // cannot parse exception occurs here 

     currentView.Save(); 
     currentView.Apply(); 
    } 
} 
+0

您應該添加您的具體錯誤信息,即:'不能分析條件。錯誤在 「[全名] = '...'」。' – SliverNinja

回答

2

您需要將DASL搜索過濾器改成這樣:

string FilterString = "\"urn:schemas:contacts:cn\"='" + param + "'"; 

[FullName]是不是一個有效的搜索過濾柱。 全名字段maps to the DASL search column urn:schemas:contacts:cn

+0

謝謝!這工作好,但我需要消除currentView.Save()語句 - 否則我所有的電子觸點從Outlook淘汰... –

+0

此外,如何合併條件,即,例如,如果發現帕拉姆變量要麼匹配姓或名和公司是否匹配變量param1? –

+0

我通過觀察一個奇怪的是,展望抱怨說,即時搜索,當用戶具有管理員權限運行不可用...所以它一直顯示字幕進度而不顯示任何過濾的結果... –

相關問題