Как создать пользовательские свойства с EWS или EWS Managed API, чтобы они отображались в окне выбора полей - PullRequest
0 голосов
/ 12 января 2011

Я хотел бы создать пользовательские свойства с помощью EWS, чтобы они отображались в окне выбора полей в Outlook. Я знаю, что это возможно с помощью VBA, объектная модель предоставляет коллекцию Item.UserProperties. Однако, используя EWS, я могу получить доступ только к Item.ExtendedProperty.

Проблема с ExtendedProperty заключается в том, что он не отображается в списке доступных для выбора свойств пользователя.

Основная проблема заключается в том, что наше серверное приложение пытается хорошо работать вместе с клиентом Dynamics CRM Outlook. Клиент Outlook CRM использует UserProperty для хранения пользовательских свойств, и наше приложение может работать только с EWS, и мы не можем найти способ создания пользовательских свойств.

Пример кода:

Свойства пользователя (VBA Outlook):

Dim WithEvents m_objApp As Outlook.AppointmentItem

Private Sub Application_ItemLoad (элемент ByVal 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
        };
    }

Подобный вопрос был задан на форуме Microsoft почти год назад, но ответа пока нет. http://social.technet.microsoft.com/Forums/en-NZ/exchangesvrdevelopment/thread/c4d6bbb9-ba6a-4aa4-9e39-98a52b733a8c

Я надеялся, что ТАК будет более успешным:)

Спасибо, Джефри

1 Ответ

0 голосов
/ 08 апреля 2011

Я думал, что эти два метода эквивалентны, если вы используете публичные строки (что, похоже, так и есть). Как насчет использования MFCMAPI, чтобы увидеть разницу в том, что генерируется?

...