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

本文关键字:时间 日期 作为 PT SYSTIME 项目 设置 Outlook VSTO PropertyAccessor | 更新日期: 2023-09-27 18:21:24

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

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

将列值转换为PT_APPTIME类型,该类型无法在Outlook表视图中显示、排序等。

我所有将该值设置为PT_SYSTIME的尝试(例如,创建我自己的PROPVARIANT结构Marshal.StructureToPtr…)都失败了,但出现了各种异常。

有没有一种方法可以在不使用兑换库的情况下设置日期时间值,这在这个目的上是过分的?

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

我不久前也遇到过同样的问题;在对PropertyAccessor进行了多次尝试和错误之后,我求助于将MailItemMAPIOBJECT属性传递给C++/CLI扩展库项目中的方法,因为这是组合托管对象和非托管头文件(即Outlook 2010 MAPI API头文件)以直接使用MAPI接口设置属性的最简单方法。

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

(我从这篇代码项目文章中得到了大致的想法,并根据我的需求进行了调整…)

考虑到Outlook如何处理视图列中的PT_APPTIME值(即完全无法对它们执行任何操作,而只是显示一个空值),我怀疑PropertyAccessor关于日期的行为是否可以称为错误;对于这样一个(看似)简单的操作,真的没有必要走那么长的路…:(

TestDate是用户属性的名称吗?请记住,OOM不理解属性中的类型(0x0000001F),它将把"TestDate/0x0000001F"视为属性的名称。

请尝试使用UserProperties.Add