无法在 Outlook VSTO 中使用 PropertyAccessor 设置项目日期时间(如 PT_SYSTIME)

Unable to set item datetime (as PT_SYSTIME) using PropertyAccessor in Outlook VSTO

使用以下代码将 Outlook 中的日期时间列设置为 c# 日期时间值

documentItem.PropertyAccessor.SetProperty(
    "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/TestDate/0x0000001F",
    documentItem.PropertyAccessor.LocalTimeToUTC(DateTime.Now));

将列值转换为 PT_APPTIME 类型,无法在 Outlook-Tableview 中显示、排序等。

我将值设置为 PT_SYSTIME 的所有尝试(例如,创建我自己的 PROPVARIANT 结构,Marshal.StructureToPtr,...)均因各种异常而失败。

有没有一种方法可以在不使用赎回库的情况下设置日期时间值,这对于这个目的来说有点过分了?

难道TestDate是用户名属性?请记住,OOM 不理解 属性 中的类型 (0x0000001F),它会将 "TestDate/0x0000001F" 视为 属性.

的名称

尝试使用 UserProperties.Add

我前段时间遇到过同样的问题;在 PropertyAccessor 多次尝试和错误之后,我求助于将 MailItemMAPIOBJECT 属性 传递给 C++/CLI 扩展库项目中的方法,因为它是合并托管 objects 和非托管 header 文件(即 Outlook 2010 MAPI API headers)以设置 属性 的最简单方法MAPI 直接接口。

我首先使用 Marshal::GetIUnknownForObjectMAPIOBJECT 获取一个 IUnknown* 指针,然后在其上使用 QueryInterface 以及 IID_IMessageIID_IMAPIProp ids 来获取相应的接口,然后使用 IMAPIPropGetIDsFromNamesSetPropsSaveChanges 来设置 属性.

(我从 this codeproject article 那里得到了大致的想法,并根据我的需要对其进行了调整...)

考虑到 Outlook 如何处理视图列中的 PT_APPTIME 值(即完全无法对它们做任何事情,而只是显示空白值)我怀疑 PropertyAccessor 行为关于日期可以称为错误以外的任何东西;对于这样一个(看似)简单的操作,真的不需要花费那么多的时间...:(