Outlook Redemption: GetNamesFromIDs
-
05-07-2019 - |
Frage
Ich versuche, alle Eigenschaftsnamen / Werte aus einem Outlook-Elemente zu erhalten. Ich habe benutzerdefinierte Eigenschaften zusätzlich zu den Standard-Outlook-Elementeigenschaften. Ich verwende Erlösung um die Outlook-Warnungen zu erhalten, aber ich habe einige Probleme mit dem GetNamesFromIDs Verfahren, das auf einem Redemption.RDOMail Artikel ....
Ich bin mit meiner Erlösung Sitzung die Nachricht zu erhalten und zu versuchen, die Nachricht zu verwenden, um die Namen aller Eigenschaften zu erhalten.
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
Ich bin mir nicht ganz sicher, was als erster Parameter zu GetNamesFromIDs passiert in. Die Definition von GetNamesFromIDs ist wie folgt:
GetNamesFromIDs(MAPIProp as Object, PropTag as Integer) As Redemption.NamedProperty
Ich bin mir nicht ganz sicher, was als MAPIProp Objekt übergeben werden soll. Ich sehe nicht, diese Eigenschaft in der Dokumentation verwiesen. http://www.dimastr.com/redemption/rdo/MAPIProp.htm# Eigenschaften
Jede Hilfe oder Einsicht wäre sehr dankbar.
Lösung
Ich glaube, ich es herausgefunden. Ich habe nur VBA verwendet, so müssen Sie „denken, um“ es Einschränkungen ist, wird es nach dem gleichen Schema in VB.NET folgen.
Die Funktion Unterschrift ist diese:
Function GetNamesFromIDs(MAPIProp As Unknown, PropTag As Long) As NamedProperty
Als erster Parameter erfordert ein Objekt, das die IUnknown
Schnittstelle unterstützt. Mit Blick auf die Rückzahlung docs wurde klar, dass es eine Schnittstelle mit dem Namen _MAPIProp
, von dem viele andere RDO Objekte abgeleitet (IRDOMail
ist unter ihnen). So muss das sein das sehr RDOMail
Sie versuchen, Daten zu erhalten, aus.
das Wissen, brauchte es nur noch einen subtilen Hinweis von der Dokumentation, um es funktioniert:
einen prop-Tag (> = 0x80000000) gegeben, gibt die GUID und ID der benannten Eigenschaft.
So Eigenschaftstag >= 0x80000000
werden müssen, bedeutet dies, es wird nicht für alle Eigenschaften arbeiten, aber nur für die benutzerdefinierten diejenigen (Ich denke, das ist der Unterschied in diesem Fall korrigiert mich wenn ich falsch liege). Passing in Immobilien-Tags nicht diese Bedingung erfüllt löst eine Fehlermeldung (0x8000ffff „unerwartete Ergebnisse“).
Hier ist mein Code. Es ist VBA, so vergib mir die Hex () Fehler, wie VBAs long integer für Zahlen, die große überläuft. Ich bin sicher, dass Sie das Bild bekommen.
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
Erster Ausschnitt aus der Ausgabe:
8041001E ( urn:content-classes:message )
GUID: {00020386-0000-0000-C000-000000000046}
ID: content-class
Andere Tipps
Nun, für Hintergrundinformationen, der Autor schlägt etwas mit wie OutlookSpy zu sehen, wie Outlook die Eigenschaften gespeichert werden.
Mit Blick auf dieser Austausch (stellen Sie sicher durch alle Follow-up-Antworten zu lesen), ist es nicht viel mehr (in der Tat, ich denke, ein Punkt, an dem Typen MVP Outlook GetNamesFromIDs
wenn er bedeutet GetIDsFromNames
).
Was Sie könnten versuchen, wird mit GetIDsFromNames
, um zu sehen, was dem zurückgibt, und dann das zu GetNamesFromIDs
passieren verwenden.
I Redemption habe vor, nicht jedoch in dieser besonderen Art und Weise, so ist alles, was ich für Sie habe ...