首页 文章

如何使用 EWS 或 EWS 托管 API 创建用户属性,以便它们出现在字段选择器中

提问于
浏览
0

我想使用 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 回答

  • 0

    我认为这两种方法是等效的,只要您使用 publicstrings(看起来像您这样做)即可。如何使用 MFCMAPI 查看生成的内容之间的差异?

相关问题