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

时间:2011-01-12 13:17:47

标签: outlook dynamics-crm exchangewebservices

我想使用EWS创建用户属性,以便它们出现在Outlook中的字段选择器中。我知道使用VBA是可能的,对象模型公开了一个Item.UserProperties集合。但是,使用EWS我只能访问Item.ExtendedProperty。

ExtendedProperty的问题在于,它没有出现在可选择的用户属性列表中。

根本问题是我们的服务器端应用程序尝试与Dynamics CRM Outlook客户端一起很好地工作。 CRM Outlook客户端使用UserProperty存储自定义属性,我们的应用程序只能与EWS一起使用,我们找不到创建用户属性的方法。

一些示例代码:

用户属性(VBA Outlook):

Dim WithEvents m_objApp As Outlook.AppointmentItem

Private Sub Application_ItemLoad(ByVal Item As Object)

If Item.Class = olAppointment Then
    Set m_objApp = Item
End If

End Sub

Private Sub m_objApp_Open(取消为布尔值)

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

End Sub

扩展属性(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
        };
    }

大约一年前,微软论坛上也提出了类似的问题,但尚无答案。 http://social.technet.microsoft.com/Forums/en-NZ/exchangesvrdevelopment/thread/c4d6bbb9-ba6a-4aa4-9e39-98a52b733a8c

我希望这会更成功:)。

谢谢, 杰弗里

1 个答案:

答案 0 :(得分:0)

我认为这两种方法只要你使用了公共字符串就可以了(就像你看到的那样)。如何使用MFCMAPI来查看生成内容的差异?