Je pense que je compris. J'ai utilisé VBA seulement, donc vous devez "réfléchir" à ses limites, il suivra le même schéma dans VB.NET.
La signature de la fonction est la suivante:
Function GetNamesFromIDs(MAPIProp As Unknown, PropTag As Long) As NamedProperty
En tant que premier paramètre, il nécessite un objet qui prend en charge l'interface IUnknown
. En regardant les documents Redemption, il est devenu clair qu'il existe une interface nommée _MAPIProp
, à partir de laquelle de nombreux autres objets RDO sont dérivés (IRDOMail
est parmi eux). Donc, cela doit être le très RDOMail
vous essayez d'obtenir des données sur.
Sachant cela, il faut seulement une autre touche subtile de la documentation pour le faire fonctionner:
Étant donné une balise prop (> = 0x80000000), renvoie le GUID et l'ID du nom propriété.
Donc, balise de propriété doit être >= 0x80000000
, cela signifie qu'il ne fonctionnera pas pour toutes les propriétés, mais seulement pour les groupes personnalisés (je suppose que c'est la distinction dans ce cas, corrigez-moi si je me trompe.) En passant balises de propriété ne remplissant pas cette condition génère un message d'erreur (0x8000ffff "résultats inattendus").
Voici mon code. C'est VBA, alors pardonnez-moi le Hex() blunder, car les VBA longs débordent pour des nombres aussi gros.Je suis sûr que vous aurez l'image.
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
extrait d'abord de la sortie:
8041001E ( urn:content-classes:message)
GUID: {00020386-0000-0000-C000-000000000046}
ID: content-class
Un up vote serait bien si cela a fonctionné. :-) – Tomalak
Certainement! Merci d'avoir regardé cela - je l'apprécie vraiment. –
Cool! :-) C'était un peu difficile à trouver, googling n'a pas vraiment aidé. Mais c'est vraiment une bonne question, donc je peux facilement donner +1 pour ça aussi. – Tomalak