2012-09-04 31 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

我通过观察一个奇怪的是,展望抱怨说,即时搜索,当用户具有管理员权限运行不可用...所以它一直显示字幕进度而不显示任何过滤的结果... –

相关问题