我想使用 EWS 创建用户属性,以便它们出现在 Outlook 的字段选择器中。我知道使用 VBA 是可能的,对象模型公开了 Item.UserProperties 集合。但是,使用 EWS 我只能访问 Item.ExtendedProperty。
ExtendedProperty 的问题在于,它没有出现在可选用户属性列表中。
根本问题是我们的 server-side 应用程序尝试与 Dynamics CRM Outlook 客户端很好地协同工作。 CRM Outlook 客户端使用 UserProperty 来存储自定义属性,并且我们的应用程序只能与 EWS 一起使用,我们找不到创建用户属性的方法。
一些示例代码:
用户属性(VBA Outlook):
昏暗的事件 m_objApp 和 Outlook.AppointmentItem
私人 Sub Application_ItemLoad(ByVal 项作为对象)
If Item.Class = olAppointment Then
Set m_objApp = Item
End If
结束子
私人 Sub m_objApp_Open(Cancel 为布尔值)
Dim oProp1 As UserProperty
Dim oProp2 As UserProperty
If m_objApp.UserProperties.Count = 0 Then
Set oProp1 = m_objApp.UserProperties.Add("crmid", olText)
oProp1.Value = ""
Set oProp2 = m_objApp.UserProperties.Add("crmLinkState", olText)
oProp2.Value = "0"
m_objApp.Save
End If
结束子
扩展属性(Exchange EWS):
CalendarItemType item = new CalendarItemType();
item.MeetingTimeZone = new TimeZoneType() { TimeZoneName = _userTimeZone };
item.StartSpecified = true;
item.Start = GetDateFromXml(node.Value);
item.EndSpecified = true;
item.End = GetDateFromXml(node.Value);
List<ExtendedPropertyType> properties = new List<ExtendedPropertyType>();
properties.Add(CreateExtendedProperty("crmid", pending.CrmId.Value.ToString(), MapiPropertyTypeType.String));
properties.Add(CreateExtendedProperty("crmLinkState", "2", MapiPropertyTypeType.Double));
item.ExtendedProperty = properties.ToArray();
CreateRequest createRequest = new CreateItemType()
{
Items = new NonEmptyArrayOfAllItemsType
{
Items = new ItemType[] { item }
},
SavedItemFolderId = new TargetFolderIdType()
{
Item = new DistinguishedFolderIdType()
{
Id = folder,
Mailbox = new EmailAddressType() { EmailAddress = _user.MailBox }
}
},
SendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToNone,
SendMeetingInvitationsSpecified = true
};
CreateItemResponseType response = exchange.CreateItem(createRequest);
private ExtendedPropertyType CreateExtendedProperty(string name, string value, MapiPropertyTypeType type)
{
return new ExtendedPropertyType()
{
ExtendedFieldURI = new PathToExtendedFieldType()
{
PropertyName = name,
DistinguishedPropertySetId = DistinguishedPropertySetType.PublicStrings,
DistinguishedPropertySetIdSpecified = true,
PropertyType = type
},
Item = value
};
}
差不多一年前,在 Microsoft 论坛上也曾提出过类似的问题,但还没有答案。 http://social.technet.microsoft.com/Forums/en-NZ/exchangesvrdevelopment/thread/c4d6bbb9-ba6a-4aa4-9e39-98a52b733a8c
我希望 SO 会更成功:)
谢谢,杰弗里
1 回答
我认为这两种方法是等效的,只要您使用 publicstrings(看起来像您这样做)即可。如何使用 MFCMAPI 查看生成的内容之间的差异?