c# - EWS - 按全名获取文件夹
问题描述
我设法使用从这里复制的代码获取了文件夹的全名:
private static string GetFullFolderName(Microsoft.Exchange.WebServices.Data.ExchangeService EServ, string FolderID)
{
Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition folderPathExtendedProp = new Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(26293, Microsoft.Exchange.WebServices.Data.MapiPropertyType.String);
Microsoft.Exchange.WebServices.Data.PropertySet folderPropSet = new Microsoft.Exchange.WebServices.Data.PropertySet(Microsoft.Exchange.WebServices.Data.BasePropertySet.FirstClassProperties) { folderPathExtendedProp };
Microsoft.Exchange.WebServices.Data.Folder folder = Microsoft.Exchange.WebServices.Data.Folder.Bind(EServ, FolderID, folderPropSet);
string path = null;
folder.TryGetProperty(folderPathExtendedProp, out path);
return path?.Replace("\ufffe", "\\");
}
现在,我想按其全名搜索文件夹。我写了一个函数,但这似乎只是为了寻找 DisplayName。
public static Microsoft.Exchange.WebServices.Data.FindFoldersResults GetFolders(Microsoft.Exchange.WebServices.Data.ExchangeService EServ, string NamePart = "")
{
if (NamePart.Trim().Length > 0) {
Microsoft.Exchange.WebServices.Data.SearchFilter.ContainsSubstring SF = new Microsoft.Exchange.WebServices.Data.SearchFilter.ContainsSubstring(Microsoft.Exchange.WebServices.Data.FolderSchema.DisplayName, NamePart);
return EServ.FindFolders(Microsoft.Exchange.WebServices.Data.WellKnownFolderName.Root, SF, new Microsoft.Exchange.WebServices.Data.FolderView(System.Int32.MaxValue) { Traversal = Microsoft.Exchange.WebServices.Data.FolderTraversal.Deep });
}else{
return EServ.FindFolders(Microsoft.Exchange.WebServices.Data.WellKnownFolderName.Root, new Microsoft.Exchange.WebServices.Data.FolderView(System.Int32.MaxValue) { Traversal = Microsoft.Exchange.WebServices.Data.FolderTraversal.Deep });
}
}
是否可以使用文件夹的全名而不是 DisplayName 作为搜索条件?
谢谢你和问候,扬
解决方案
不,您不能对该属性创建限制,因为它是计算属性。我建议您从以下位置开始搜索
WellKnownFolderName.MsgFolderRoot
Root 将包含所有对用户不可见的 Non_IPM_Subtree 文件夹,因此它只会降低您的查询效率。
如果将该属性添加到 folderView 的 PropertySet 中,则可以过滤返回的结果以匹配您搜索的路径。使用 IsEqual SearchFilter 和确切的文件夹 DisplayName 也将加快您的搜索速度。当您根据要查找的路径过滤结果集时,您应该能够摆脱任何提取文件夹名称(例如,相同的名称不同的路径)。
就我个人而言,当我需要这样做时,我将路径分开并从父文件夹进行浅层遍历。它的请求更多,但我从未遇到过该方法的可靠性和速度方面的任何问题,并且它也适用于上述方法会失败的公共文件夹,例如Exchange Web Service FolderId 用于 user 创建的文件夹。