使用以下代码将Outlook中的datetime列设置为c#DateTime值
documentItem.PropertyAccessor.SetProperty(
"http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/TestDate/0x0000001F",
documentItem.PropertyAccessor.LocalTimeToUTC(DateTime.Now));
将columnvalue转换为PT_APPTIME类型,不能在Outlook-Tableview中显示,排序等。
我尝试将值设置为PT_SYSTIME(例如,创建我自己的PROPVARIANT结构,Marshal.StructureToPtr,...)失败,但有各种例外。
有没有办法在不使用兑换库的情况下设置日期时间值,这对于此目的来说是否过度?
答案 0 :(得分:0)
TestDate是用户属性的名称吗?请记住,OOM不理解属性中的类型(0x0000001F),它会将“TestDate / 0x0000001F”视为属性的名称。
尝试使用UserProperties.Add。
答案 1 :(得分:0)
我前段时间遇到过同样的问题;经过PropertyAccessor
MAPIOBJECT
的大量试验和错误后,我已经将MailItem
的{{1}}属性传递给C ++ / CLI扩展库项目中的方法,因为它'最简单的方法是将托管对象和非托管头文件(即Outlook 2010 MAPI API头文件)组合在一起,直接使用MAPI接口设置属性。
我首先使用Marshal::GetIUnknownForObject
从IUnknown*
获取MAPIOBJECT
指针,然后在QueryInterface
和IID_IMessage
上使用IID_IMAPIProp
用于获取相应界面的ID,然后使用IMAPIProp
GetIDsFromNames
,SetProps
和SaveChanges
来设置属性。
(我从this codeproject article得到了一般性的想法,并根据我的需要进行了调整......)
考虑Outlook如何处理视图列中的PT_APPTIME
值(即完全无法对它们执行任何操作而只是显示空值)我怀疑PropertyAccessor
关于日期的行为可能被称为除了bug之外的任何东西;对于这样一个(看似简单的)简单的操作来说,真的不应该这么做...... :(