2008-10-30 9 views
1

J'essaie d'obtenir tous les noms de propriété/valeurs d'un élément Outlook. J'ai des propriétés personnalisées en plus des propriétés de l'élément de perspective par défaut. J'utilise Redemption pour contourner les avertissements Outlook, mais j'ai quelques problèmes avec la méthode GetNamesFromIDs sur un Redemption.RDOMail Item ....Outlook Redemption: GetNamesFromIDs

J'utilise ma session de rachat pour obtenir le message et essayer de utilisez le message pour obtenir les noms de toutes les propriétés. Je ne suis pas totalement sûr de ce qu'il faut passer en tant que premier paramètre à getNamesFromIDs. La définition de GetNamesFromIDs est la suivante:

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

Je ne suis pas tout à fait sûr de ce que devrait être transmis comme l'objet MAPIProp. Je ne vois pas cette propriété référencée dans la documentation. http://www.dimastr.com/redemption/rdo/MAPIProp.htm#properties

Une aide ou un aperçu serait grandement apprécié.

+0

Un up vote serait bien si cela a fonctionné. :-) – Tomalak

+0

Certainement! Merci d'avoir regardé cela - je l'apprécie vraiment. –

+0

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

Répondre

2

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 
2

Eh bien, pour l'information de fond, l'auteur suggests en utilisant quelque chose comme OutlookSpy pour voir comment Outlook stocke les propriétés.

En regardant this exchange (assurez-vous de lire toutes les réponses de suivi), il n'y a pas beaucoup plus (en fait, je pense à un moment donné les types MVP Perspectives GetNamesFromIDs quand il signifie GetIDsFromNames).

Ce que vous pouvez essayer utilise GetIDsFromNames pour voir ce que cela renvoie, puis l'utiliser pour passer à GetNamesFromIDs.

Je l'ai utilisé Redemption avant, mais pas de cette manière particulière, de sorte que est tout ce que j'ai pour vous ...