2011-01-12 2 views
0

Outlook의 필드 선택기에 나타나도록 EWS를 사용하여 사용자 속성을 만들고 싶습니다. 객체 모델은 VBA를 사용하여 가능하다는 것을 알고 Item.UserProperties 컬렉션을 노출합니다. 그러나 EWS를 사용하면 Item.ExtendedProperty에만 액세스 할 수 있습니다.EWS 또는 EWS Managed API를 사용하여 사용자 속성을 만들어 필드 선택기에 표시하는 방법

ExtendedProperty의 문제는 is가 선택 가능한 사용자 속성 목록에 나타나지 않는다는 것입니다.

근본적인 문제는 Microsoft의 서버 쪽 응용 프로그램이 Dynamics CRM Outlook 클라이언트와 잘 작동한다는 것입니다. CRM Outlook 클라이언트는 사용자 정의 속성을 저장하기 위해 UserProperty를 사용하며 응용 프로그램은 EWS에서만 작동 할 수 있으며 사용자 속성을 만드는 방법을 찾을 수 없습니다.

일부 예제 코드 :

사용자 속성 (VBA 전망) :

희미한에서 WithEvents m_objApp

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

Outlook.AppointmentItem

개인 서브 Application_ItemLoad (개체로 ByVal의 항목)으로 최종 하위

개인 서브 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 

최종 하위

확장 속성 (교환 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

내가 :)

덕분에 더 성공적이 될 것이다 SO 기대했다, Jeffry

답변

0

나는 당신이 (당신이 할 것처럼 보이는) publicstrings를 사용 두 가지 방법이 long로서 동등한 생각했다. MFCMAPI를 사용하여 생성 된 내용의 차이점을 확인하는 것은 어떻습니까?

+0

일부 사이트에서는 몇 가지 가능한 답변을 보았습니다. Havent는 그것을 시험 할 시간이 있었다. 기본적으로) EWS는 PUBLICSTRINGS guid를 사용해야합니다. b) 관련성이있는 모든 폴더를 통해 addin 루프가 있어야하며 userProperty가 콜렉션에 추가되었는지 확인해야합니다. c) 그런 다음 열보기 등을 사용자 정의 할 수 있습니다. – MJB

관련 문제