我正在开发一个将插入iManage FileSite AddIn的Outlook VSTO Addin,我正在尝试访问当前选择的文件夹ID(在DMS中),我注意到CurrentFolder.EntryID属性包含一个非常大的十六进制string,转换为UTF-16时看起来像iManage的格式错误的ObjectID。见下文(一些信息被编辑):
�"�j���'`�W�vp441!nrtdms:0:!session:REDACTED:!database:TEC:!page:440:??!nrtdms:0:!session:REDACTED:!database:TEC:!publicpagescontainer??!nrtdms:0:!session:REDACTED:!database:TEC:??!nrtdms:0:!session:REDACTED:!explorercontainer??!nrtdms:0:!session:REDACTED:??!nrtmsg:neighborhood:??!nrtmsg:root:
我一直在研究一些正则表达式来将文件夹ID与字符串的其余部分分开,但我不禁想到有一种更稳定的方法。
有人有主意吗?
ENTRYID标识符结构在MSDN中描述。消息存储和地址簿提供程序使用ENTRYID
结构为其对象构造唯一标识符。
您可以使用PropertyAccessor.StringToBinary方法将字符串转换为二进制数据,该方法将Value指定的字符串转换为字节数组。有关使用PropertyAccessor
对象时类型转换的更多信息,请参阅Best Practices for Getting and Setting Properties。
除了@Eugene Astafiev的回答之外,还记录了一些入门ID的格式。解析PST,Exchange和GAL入口ID非常容易。
用MFCMAPI或OutlookSpy查看入口ID。以下是OutlookSpy在缓存的Exchange存储中为消息PR_ENTRYID显示的内容(单击IMessage按钮,选择PR_ENTRYID属性):
abFlags[0]: 00
abFlags[1]: 00
abFlags[2]: 00
abFlags[3]: 00
muid: 5E81754F003E1549B0659F2AEA92E7C2 ({4F75815E-3E00-4915-B065-9F2AEA92E7C2})
Type: 0x0007 (eitLTPrivateMessage)
FolderDatabaseGUID: C7CF2304C77BF64585E8892DD6FF7BAC ({0423CFC7-7BC7-45F6-85E8-892DD6FF7BAC})
FolderGlobalCounter: 0xCAA69A1A0000
Pad1: 0x0000
MessageDatabaseGUID: 4A7CE85ED1AB274C9E20AA3CBFA828B1 ({5EE87C4A-ABD1-4C27-9E20-AA3CBFA828B1})
MessageGlobalCounter: 0x70A650D90100
Pad2: 0x0000