2008-10-30 4 views
1

Outlook 항목에서 모든 속성 이름/값을 가져 오려고합니다. 기본 Outlook 항목 속성 외에도 사용자 지정 속성이 있습니다. Redemption을 사용하여 Outlook 경고를 처리하지만 Redemption.RDOMail Item의 GetNamesFromIDs 메서드에 문제가 있습니다. ...Outlook 보너스 : GetNamesFromIDs

메시지를 받고 시도하는 데 사용하는 보너스 세션을 사용하고 있습니다. 메시지를 사용하여 모든 특성의 이름을 얻으십시오.

Dim rMessage as Redemption.RDOMail = _RDOSession.GetMessageFromID(EntryID, getPublicStoreID()) 
Dim propertyList As Redemption.PropList = someMessage.GetPropList(Nothing) 
For i As Integer = 1 To propertyList.Count + 1 
    Console.WriteLine(propertyList(i).ToString()) 
    Console.WriteLine(someMessage.GetNamesFromIDs(________, propertyList(i))) 
Next 

getNamesFromIDs의 첫 번째 매개 변수로 무엇을 전달해야하는지 확실하지 않습니다. GetNamesFromIDs의 정의는 다음과 같습니다.

GetNamesFromIDs(MAPIProp as Object, PropTag as Integer) As Redemption.NamedProperty 

MAPIProp 개체로 전달되어야하는 것이 무엇인지 확실하지 않습니다. 문서에서 언급 된이 속성이 표시되지 않습니다. http://www.dimastr.com/redemption/rdo/MAPIProp.htm#properties

도움이나 의견이 있으면 크게 감사하겠습니다.

+0

업 투표 좋을 것이다. :-) – Tomalak

+0

확실히! 이 문제를 조사해 주셔서 감사합니다. 정말 고맙습니다. –

+0

쿨! :-) 이것은 검색하기 힘든 일부 정보였습니다. 인터넷 검색이 실제로 도움이되지 않았습니다. 하지만이 질문은 정말 좋은 질문이므로 +1을 쉽게 줄 수 있습니다. – Tomalak

답변

2

나는 내가 그것을 알아 냈다고 생각합니다. 나는 VBA 만 사용했기 때문에 한계를 "생각해야"할 필요가 있습니다. VB.NET에서 동일한 체계를 따를 것입니다. 그것은 IUnknown 인터페이스를 지원하는 개체를 필요로하는 제 파라미터로서

Function GetNamesFromIDs(MAPIProp As Unknown, PropTag As Long) As NamedProperty 

:

함수 서명이있다. Redemption 문서를 보면 _MAPIProp이라는 인터페이스가 있으며 다른 많은 RDO 개체가 파생 된 것으로 밝혀졌습니다 (IRDOMail). 따라서 이것은 데이터를 가져 오려고하는 바로 RDOMail이어야합니다. 소품 태그를 감안할 때

는 (> = 0x80000000에), 명명 된 속성의 GUID 및 ID를 반환 것을 알고

는, 그것은 작업을 진행하기 위해 문서에서 하나의 다른 미묘한 힌트를 필요로했다.

그래서 속성 태그 >= 0x80000000해야합니다,이 실 거예요하지만 단지 지정 사람 (내가 틀렸다면 정정 해줘. 즉이 경우 구분 것 같다)에 전달하는 모든 속성을 위해 일을 의미합니다 이 조건을 충족시키지 않는 속성 태그는 오류 메시지 (0x8000ffff "예기치 않은 결과")를 발생시킵니다.

여기 내 코드입니다. 그것은 VBA입니다. 그래서 Hex() 실수를 용서하십시오. VBA의 긴 정수는 그 숫자만큼 오버플로됩니다.나는 네가 그림을 얻을 것이라고 확신한다. 출력에서

Sub GetNamesFromIds() 

    Dim rSession As New Redemption.RDOSession 
    Dim rMessage As Redemption.RDOMail 
    Dim PropertyList As Redemption.PropList 
    Dim PropTag As Long 
    Dim EntryId As String 
    Dim i As Integer 

    rSession.MAPIOBJECT = Application.Session.MAPIOBJECT 

    ' retrieve first random mail for this example ' 
    EntryId = ActiveExplorer.CurrentFolder.Items(1).EntryId 
    Set rMessage = rSession.GetMessageFromID(EntryId) 
    Set PropertyList = rMessage.GetPropList(0) 

    For i = 1 To PropertyList.Count 
    PropTag = PropertyList(i) 
    If "0x" & Right("00000000" & Hex(PropTag), 8) > "0x80000000" Then 
     Debug.Print 
     If IsArray(rMessage.Fields(PropTag)) Then 
     Debug.Print Hex(PropTag), "(Array:", UBound(rMessage.Fields(PropTag)), "items)" 
     Else 
     Debug.Print Hex(PropTag), "(", rMessage.Fields(PropTag), ")" 
     End If 
     Debug.Print " GUID:", rMessage.GetNamesFromIds(rMessage, PropTag).GUID 
     Debug.Print "  ID:", rMessage.GetNamesFromIds(rMessage, PropTag).ID 
    End If 
    Next 

End Sub 

첫 번째 조각 : 그것은 밖으로 일 경우

8041001E  (   urn:content-classes:message) 
    GUID:  {00020386-0000-0000-C000-000000000046} 
     ID:  content-class 
2

배경 정보로는 suggestsOutlookSpy과 같은 것을 사용하여 Outlook에서 속성을 저장하는 방법을 확인하십시오. this exchange 보면

, 훨씬 더이없는 (모든 후속 응답을 통해 읽을 수 있는지 확인) (그는 GetIDsFromNames을 의미 할 때 사실, 나는 하나 개의 시점에서 전망 MVP 유형 GetNamesFromIDs 생각).

시도해 볼 수있는 것은 GetIDsFromNames을 사용하여 그 결과를 확인한 다음 GetNamesFromIDs으로 전달하는 것입니다. 내가 아니라이 특정한 방식으로, 이전에 구속을 사용했습니다

, 그게 내가 당신을 위해 가진 전부 그래서 ...

관련 문제