Question

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

J'utilise ma session d'échange pour obtenir le message et j'essaie de l'utiliser pour obtenir le nom de toutes les propriétés.

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

Je ne suis pas tout à fait sûr de ce qu'il faut transmettre en tant que premier paramètre pour 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 qui devrait être transmis en tant qu'objet MAPIProp. Je ne vois pas cette propriété référencée dans la documentation. http://www.dimastr.com/redemption/rdo/MAPIProp.htm# propriétés

Toute aide ou suggestion serait grandement appréciée.

Était-ce utile?

La solution

Je pense que je l'ai compris. J’ai utilisé uniquement VBA, vous devez donc "réfléchir" et ses limitations, 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 prenant en charge l'interface IUnknown . En examinant la documentation Redemption, il est apparu clairement qu’il existe une interface nommée _MAPIProp , à partir de laquelle de nombreux autres objets RDO sont dérivés ( IRDOMail en fait partie). Il doit donc s'agir du même RDOMail que vous essayez d'extraire des données.

Sachant cela, il ne lui fallait qu'un autre indice subtil de la documentation pour le faire fonctionner:

  

Avec une balise prop (> = 0x80000000),   retourne le GUID et l'id du nommé   propriété.

La balise de propriété doit donc être > = 0x80000000 , cela signifie que cela ne fonctionnera pas pour toutes les propriétés, mais uniquement pour les propriétés personnalisées (je suppose que c'est la distinction dans ce cas, corrigez-moi si je Je ne me trompe pas. Passer des balises de propriété ne remplissant pas cette condition déclenche un message d'erreur (0x8000ffff "résultats inattendus").

Voici mon code. C'est VBA, alors pardonnez-moi la faute Hex (), car l'entier long de VBA déborde pour les nombres aussi gros. Je suis sûr que vous obtiendrez la photo.

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

Premier extrait de la sortie:

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

Autres conseils

Eh bien, pour des informations générales, l'auteur suggère d'utiliser quelque chose comme OutlookSpy pour voir comment Outlook stocke les propriétés.

En regardant cet échange (assurez-vous de lire toutes les réponses suivantes), il n’ya pas grand chose de plus (en fait, je pense qu’à un moment donné, le type MVP d’Outlook GetNamesFromIDs lorsqu'il signifie GetIDsFromNames ).

Vous pouvez essayer d'utiliser GetIDsFromNames pour voir ce qui est renvoyé, puis l'utiliser pour passer à GetNamesFromIDs .

J'ai déjà utilisé Redemption auparavant, mais pas de cette manière. C'est tout ce que j'ai pour vous ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top