Pergunta

Eu estou tentando obter todos os nomes de propriedade / valores de um item do Outlook. Tenho propriedades personalizadas, além das propriedades item do Outlook padrão. Eu estou usando a redenção para contornar os avisos do Outlook, mas eu estou tendo alguns problemas com o método GetNamesFromIDs em um Redemption.RDOMail item ....

Eu estou usando minha sessão de resgate para obter a mensagem e tentar usar a mensagem para obter os nomes de todas as propriedades.

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

Eu não estou totalmente certo do que passar em como o primeiro parâmetro para GetNamesFromIDs. A definição de GetNamesFromIDs é a seguinte:

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

Eu não estou totalmente certo de que deve ser passado como o objeto MAPIProp. Eu não vejo esta propriedade referenciada na documentação. http://www.dimastr.com/redemption/rdo/MAPIProp.htm# Propriedades

Qualquer ajuda ou insight seria muito apreciada.

Foi útil?

Solução

Eu acho que eu percebi isso. Eu tenho usado VBA somente, então você precisa "pensar em torno" É limitações, ele seguirá o mesmo esquema em VB.NET.

A assinatura da função é o seguinte:

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

Como o primeiro parâmetro que requer um objeto que suporta a interface IUnknown. Olhando para os docs de resgate ficou claro que há uma _MAPIProp interface chamada, a partir do qual muitos outros objetos RDO são derivados (IRDOMail está entre eles). Portanto, este deve ser o RDOMail você está tentando obter dados de fora.

Sabendo disso, ele precisava de apenas um outro toque sutil dos docs para fazê-lo funcionar:

Dada uma tag prop (> = 0x80000000), retorna o GUID e ID da chamada propriedade.

Assim tag propriedade deve ser >= 0x80000000, isso significa que ele não vai funcionar para todas as propriedades, mas apenas para os personalizados (eu acho que é a distinção neste caso, me corrija se eu estiver errado). Passando em não tags de propriedade cumprir esta condição gera uma mensagem de erro (0x8000ffff "resultados inesperados").

Aqui está o meu código. É VBA, então perdoe-me o Hex (erro), como VBAs transborda inteiro longo para números tão grande. Tenho certeza que você vai obter a imagem.

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

Primeiro trecho da saída:

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

Outras dicas

Bem, para informação de fundo, o autor sugere usando algo como OutlookSpy para ver como o Outlook armazena as propriedades.

Olhando para essa troca (certifique-se de ler todas as respostas de acompanhamento), não há muito mais (na verdade, eu acho que em um ponto os tipos Outlook MVP GetNamesFromIDs quando ele significa GetIDsFromNames).

O que você pode tentar é usar GetIDsFromNames para ver o que os retornos, e depois usar isso para passar para GetNamesFromIDs.

Eu tenho Redemption usado antes, mas não dessa maneira particular, de modo que é tudo que eu tenho para você ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top