Implementação do objeto de status
Aplica-se a: Outlook 2013 | Outlook 2016
Todos os provedores de serviços devem implementar um objeto status e fornecer propriedades dele para a tabela de status de sessão. Você pode incluir uma ou mais linhas na tabela status, dependendo do número de recursos que você controla. Um provedor de transporte, por exemplo, deve criar uma linha na tabela status para cada fila de mensagens gerenciada. Quando ocorrem alterações, a linha de tabela status apropriada deve ser atualizada. Os objetos status são implementados para fornecer acesso às informações incluídas na tabela status e a informações adicionais não incluídas na tabela.
Para implementar um objeto status
Implemente o método OpenStatusEntry do objeto logon. Quando os clientes querem abrir seu objeto status, eles chamam IMAPISession::OpenEntry. O MAPI atende à solicitação aberta chamando o método OpenStatusEntry do provedor, fazendo com que seu provedor abra seu objeto status e retorne ao cliente um ponteiro para sua implementação IMAPIStatus. Na implementação do OpenStatusEntry , conclua as seguintes etapas:
Execute as seguintes tarefas se o objeto logon ainda não tiver criado um objeto status:
Chame o método IMAPISupport::OpenProfileSection do objeto de suporte para acessar a seção de perfil do provedor.
Crie um novo objeto status.
Armazene uma referência à seção de perfil no objeto status do provedor e chame o método IUnknown::AddRef da seção de perfil para incrementar sua contagem de referência.
Armazene uma referência ao objeto logon no objeto status do provedor e chame o método IUnknown::AddRef do objeto logon para incrementar sua contagem de referência.
Armazene uma referência ao objeto status no objeto de logon do provedor.
Chame o método IUnknown::AddRef do objeto status para incrementar sua contagem de referência no objeto logon.
Defina a propriedade PR_OBJECT_TYPE do objeto status (PidTagObjectType) como MAPI_STATUS.
Defina o parâmetro de saída lppMAPIStatus para apontar para o objeto status e retornar.
Verifique o parâmetro de entrada ulFlags . Se ele estiver definido como MAPI_MODIFY e seu provedor oferecer suporte ao acesso de leitura/gravação ao objeto status, retorne um objeto gravável. No entanto, se o provedor não oferecer suporte ao acesso de leitura/gravação ao objeto status, não falhará. Retorne um objeto status somente leitura. Os clientes que esperam receber objetos de leitura/gravação status devem verificar se a permissão de leitura/gravação foi concedida antes de tentar fazer alterações.
Defina todas as propriedades necessárias de status objeto e status tabela. As propriedades que você inclui na linha de tabela status devem estar disponíveis por meio do objeto status, exceto pelas propriedades calculadas pelo MAPI. As propriedades necessárias são as seguintes:
PR_DISPLAY_NAME (PidTagDisplayName)
PR_PROVIDER_DLL_NAME (PidTagProviderDllName)
PR_PROVIDER_DISPLAY (PidTagProviderDisplay)
PR_RESOURCE_TYPE (PidTagResourceType)
PR_RESOURCE_METHODS (PidTagResourceMethods)
PR_RESOURCE_FLAGS (PidTagResourceFlags)
PR_STATUS_CODE (PidTagStatusCode)
Implemente os métodos IMAPIStatus : IMAPIProp apropriados para seu provedor. Dependendo do provedor, você não precisa implementar todos os quatro métodos no IMAPIStatus. Cada provedor deve implementar uma versão somente leitura dos métodos da interface IMAPIProp : IUnknown e do método IMAPIStatus::ValidateState .
Os provedores de transporte também devem implementar o IMAPIStatus::FlushQueues e todos os provedores devem dar suporte a IMAPIStatus::SettingsDialog. No entanto, o suporte para IMAPIStatus::ChangePassword é opcional. Somente os provedores de serviços que exigem senhas e querem permitir que os usuários alterem-as programaticamente precisam implementar esse método. Para cada método compatível, defina o bit correspondente na propriedade PR_RESOURCE_METHODS . Por exemplo, se você dá suporte somente a ValidateState e ConfiguraçõesDialog , defina PR_RESOURCE_METHODS para o seguinte:
STATUS_VALIDATE_STATE | STATUS_SETTINGS_DIALOG
Os clientes devem marcar o valor de PR_RESOURCE_METHODS antes de tentar chamar seu objeto status. Manipular chamadas para qualquer um de seus métodos sem suporte retornando MAPI_E_NO_SUPPORT.
Chame IMAPISupport::ModifiStatusRow durante o logon para adicionar sua linha ou linhas à tabela status. Passe uma matriz de valor de propriedade que contém as informações de coluna para a linha e 0 para o parâmetro ulFlags . Se em algum momento posterior na sessão o status do provedor for alterado e se tornar necessário atualizar as informações da coluna, chame ModifiStatusRow novamente com o conjunto de sinalizadores STATUSROW_UPDATE.
Para obter mais informações sobre objetos status, consulte Objetos de status MAPI.