Compartilhar via


Criar uma lista de distribuição no PAB

Aplica-se a: Outlook 2013 | Outlook 2016

Os clientes podem criar uma lista de distribuição diretamente em um contêiner modificável, como o PAB (catálogo de endereços pessoal).

  1. Crie uma matriz de marca de propriedade de tamanho com uma marca de propriedade, PR_DEF_CREATE_DL (PidTagDefCreateDl), da seguinte maneira:

     SizedPropTagArray(1, tagaDefaultDL) =
     {
         1,
         {
             PR_DEF_CREATE_DL
         }
     };
    
  2. Chame IAddrBook::GetPAB para recuperar o identificador de entrada do PAB. Se houver um erro ou GetPAB retornar zero ou NULL, não continue.

     LPENTRYID peidPAB = NULL;
     ULONG cbeidPAB = 0;
     lpIAddrBook->GetPAB(&cbeidPAB, &peidPAB);
    
  3. Chame IAddrBook::OpenEntry para abrir o PAB. O parâmetro de saída ulObjType deve ser definido como MAPI_ABCONT.

     ULONG ulObjType = 0;
     LPABCONT lpPABCont = NULL;
     lpIAddrBook->OpenEntry(cbeidPAB, peidPAB,
                     NULL,
                     MAPI_MODIFY,
                     &ulObjType,
                     &lpPABCont);
    
  4. Chame o método IMAPIProp::GetProps do PAB para recuperar a propriedade PR_DEF_CREATE_DL, o modelo que ele usa para criar uma lista de distribuição.

     lpPABCont->GetProps(0,
                 tagaDefaultDL,
                 &lpspvDefDLTpl);
    
    
  5. Se GetProps falhar:

    1. Chame o método IMAPIProp::OpenProperty do PAB para abrir a propriedade PR_CREATE_TEMPLATES (PidTagCreateTemplates) com a interface IMAPITable .

    2. Crie uma restrição de propriedade para pesquisar a linha com a coluna PR_ADDRTYPE (PidTagAddressType) igual a "MAPIPDL".

    3. Chame IMAPITable::FindRow para localizar essa linha.

  6. Salve o identificador de entrada retornado por GetProps ou FindRow.

     peidDefDLTpl = lpspvDefDLTpl->Value.bin.pb;
     cbeidDefDLTpl = lpspvDefDLTpl->Value.bin.cb;
    
    
  7. Chame o método IABContainer::CreateEntry do PAB para criar uma nova entrada usando o modelo representado pelo identificador de entrada salvo. Não suponha que o objeto retornado será uma lista de distribuição em vez de um usuário de mensagens quando essa chamada for remota. Observe que o sinalizador CREATE_CHECK_DUP é passado no parâmetro ulFlags para impedir que a entrada seja adicionada duas vezes.

     lpPABCont->CreateEntry(cbeidDefDLTpl,
                     peidDefDLTPL,
                     CREATE_CHECK_DUP_STRICT,
                     &lpNewPABEntry);
    
  8. Chame o método IUnknown::QueryInterface da nova entrada, passando IID_IDistList como o identificador de interface, para determinar se a entrada é uma lista de distribuição e dá suporte à interface IDistList : IMAPIContainer . Como CreateEntry retorna um ponteiro IMAPIProp em vez do ponteiro IMailUser ou IDistList mais específico, marcar que um objeto de lista de distribuição foi criado. Se QueryInterface tiver êxito, você pode ter certeza de que criou uma lista de distribuição em vez de um usuário de mensagens.

  9. Chame o método IMAPIProp::SetProps da lista de distribuição para definir seu nome de exibição e outras propriedades.

  10. Chame o método IABContainer::CreateEntry da lista de distribuição para adicionar um ou mais usuários de mensagens.

  11. Chame o método IMAPIProp::SaveChanges da lista de distribuição quando estiver pronto para salvá-la. Para recuperar o identificador de entrada da lista de distribuição salva, defina o sinalizador KEEP_OPEN_READWRITE e, em seguida, chame IMAPIProp::GetProps solicitando a propriedade PR_ENTRYID (PidTagEntryId).

  12. Libere a nova lista de distribuição e o PAB chamando seus métodos IUnknown::Release .

  13. Chame MAPIFreeBuffer para liberar a memória para o identificador de entrada do PAB e a matriz de marca de propriedade de tamanho.