Resumo
Para garantir o uso consistente de propriedades ou campos personalizados, o Microsoft Office Outlook 2003 Service Pack 2 (SP2) e versões posteriores do Outlook limitam algumas das maneiras pelas quais as propriedades personalizadas podem ser introduzidas nos armazenamentos de dados do Outlook. Por exemplo, as propriedades personalizadas podem ser introduzidas de maneiras específicas em arquivos de pastas pessoais (.pst) do Outlook.
INTRODUÇÃO
Este artigo faz o seguinte:
-
Fornece uma visão geral das propriedades personalizadas.
-
Explica como o comportamento das propriedades personalizadas foi alterado no Outlook 2003 SP2 e em versões posteriores do Outlook.
-
Discute algumas práticas recomendadas para criar novas propriedades e alguns métodos que não recomendamos.
Informações adicionais
Sobre propriedades personalizadas
As propriedades personalizadas são usadas por programas de email, como o Outlook, para adicionar mais informações a uma mensagem. Normalmente, essas informações adicionais são usadas por um programa de email para uma finalidade específica. No entanto, há outras maneiras pelas quais as propriedades personalizadas podem ser usadas. Por exemplo, propriedades personalizadas podem ser adicionadas a mensagens ou itens se você usar formulários personalizados do Outlook e esses formulários conterem campos personalizados. As propriedades personalizadas são usadas com frequência para adicionar mais informações para fins de acompanhamento. Propriedades personalizadas também são usadas para adicionar dados que um usuário não precisa ver. Uma solução personalizada também pode adicionar propriedades personalizadas a itens regulares. Uma solução personalizada adiciona programaticamente propriedades personalizadas a uma mensagem ou item sem exigir um formulário personalizado.
As propriedades personalizadas podem ser persistentes no formato de arquivo .msg e no formato de arquivo .oft no Outlook. Além disso, as propriedades personalizadas podem ser persistentes para mensagens de email enviadas pela Internet se o remetente usar a opção Enviar usando o Formato de Texto Rico do Outlook . Essa opção encapsula a seção MAPI da mensagem no TNEF (Formato de Encapsulamento Neutro de Transporte) e, em seguida, o TNEF é decodificado quando a mensagem é recebida.
Um remetente pode enviar um email com propriedades personalizadas nos seguintes cenários:
-
Um formulário personalizado único é enviado. Em formulários pontuais, o formulário é inserido na mensagem. O formulário não é publicado em outro lugar. Para obter mais informações sobre formulários pontuais, confira o seguinte artigo:
-
Um formulário personalizado publicado é enviado. Nesse caso, o formulário personalizado não é enviado porque o formulário não está inserido na mensagem. No entanto, todas as propriedades personalizadas usadas no formulário ainda estão incluídas na mensagem.
Observação Há várias maneiras de se referir a propriedades personalizadas, dependendo do contexto em que as propriedades personalizadas são usadas. Na interface do usuário do Outlook, como no Field Chooser, as propriedades personalizadas são conhecidas como campos definidos pelo usuário ou como campos personalizados. Na biblioteca de objetos do Outlook, as propriedades personalizadas podem ser chamadas de propriedades de usuário ou como propriedades definidas pelo usuário após a coleção UserProperties. No MAPI, os campos personalizados são chamados de propriedades nomeadas. O MAPI fornece uma instalação para fazer o seguinte:
-
Atribuir nomes a propriedades
-
Mapear os nomes para identificadores exclusivos
-
Tornar o mapeamento persistente
Para obter mais informações sobre como as propriedades nomeadas são implementadas no MAPI, visite o seguinte site do MSDN:
http://msdn2.microsoft.com/en-us/library/ms529055.aspx Observação Em um ambiente do Exchange, o termo "armazenamento" conforme usado neste artigo refere-se a um repositório de caixa de correio inteiro (banco de dados). O termo não se refere ao repositório de caixas de correio de um usuário individual. Pode haver um ou mais bancos de dados de caixa de correio do Exchange em uma organização.
Alterações de comportamento no Outlook
A implementação do MAPI no Outlook foi alterada para controlar como as propriedades personalizadas podem ser criadas. Para garantir o uso consistente de propriedades personalizadas, as propriedades personalizadas já devem ser usadas na organização ou no cliente do Outlook. Assim que as propriedades personalizadas estiverem sendo usadas ou registradas, as propriedades personalizadas poderão ser transmitidas livremente para outros clientes do Outlook ou para servidores que estão executando o Exchange Server. As propriedades personalizadas também podem ser enviadas pela Internet.
Normalmente, as mensagens de email são enviadas no formato MIME pela Internet. Quando o Outlook recebe uma mensagem de email da Internet, a mensagem é convertida em uma representação MAPI. Veja a seguir exemplos de protocolos de email da Internet:
-
POP
-
IMAP
-
HTTP (Outlook.com)
Por padrão, o Outlook não permite mais que o email da Internet crie novas propriedades personalizadas. Somente as propriedades que já são criadas no repositório de entrega de emails padrão são preservadas para mensagens de email de entrada. Essa alteração afeta principalmente as mensagens enviadas no TNEF encapsulado (Winmail.dat), em que o remetente usou a opção Enviar usando o Formato de Texto Rico do Outlook . No entanto, as mensagens de Internet que contêm propriedades de cabeçalho de mensagem X também são afetadas.
Observação Mensagens que contêm propriedades personalizadas enviadas em uma organização do Exchange não são afetadas por essas alterações.
Propriedades personalizadas também podem ser salvas em arquivos .msg e em arquivos .oft. Se um usuário abrir um arquivo .msg com propriedades personalizadas, essas propriedades personalizadas não serão salvas no repositório padrão quando a mensagem for salva, encaminhada e assim por diante. Normalmente, os arquivos .oft são usados para fazer backup de formulários personalizados do Outlook. Com arquivos .oft, o novo comportamento se aplica a todos os tipos de itens. O formulário personalizado não será aberto. Em vez disso, a mensagem será exibida no formulário padrão para esse tipo de item específico.
Em resumo, essa alteração no design pode fazer com que duas coisas ocorram:
-
O Outlook ignora propriedades personalizadas não existentes. Se uma propriedade personalizada não existir no repositório de entrega, a propriedade não será criada e seu valor será perdido. Se a propriedade personalizada já existir no repositório de entrega, seu valor será mantido. Essa alteração se aplica ao seguinte:
-
Mensagens de email da Internet que têm TNEF e suas mensagens inseridas.
-
Mensagens S/MIME.
-
Arquivos .msg quando você solta o arquivo .msg em uma janela de item do Outlook para adicionar o arquivo a outro item. Essa alteração também se aplica aos arquivos .msg quando você solta o arquivo .msg na janela principal do Outlook para adicionar o arquivo a uma pasta ou na janela do Microsoft Word quando você usa o Word como editor de email.
-
Arquivos .msg que um usuário clica duas vezes ou clica com o botão direito do mouse para abrir.
-
-
O Outlook ignora a definição de formulário único. Se um formulário único especificar uma propriedade personalizada e essa propriedade personalizada não existir no repositório de entrega, o formulário único não será renderizado. Em vez disso, o usuário verá o formulário padrão para esse tipo de item específico. Essa alteração se aplica a mensagens de email da Internet que contêm uma definição de formulário único encapsulada no TNEF. Essa alteração também se aplica aos arquivos .oft que um usuário clica duas vezes ou clica com o botão direito do mouse para abrir.
Práticas recomendadas e outras maneiras de criar novas propriedades
Há várias maneiras de criar e desenvolver soluções personalizadas. Algumas dessas abordagens são consideradas práticas recomendadas. Outras abordagens também podem funcionar, mas não recomendamos essas abordagens por um ou mais motivos.
Prática recomendada: adicionar campos personalizados de forma programática
Várias APIs podem ser usadas para adicionar campos personalizados programaticamente a itens. Para fazer isso, use o método UserProperties.Add na biblioteca de objetos do Outlook ("Outlook.Application"). O código a seguir ilustra essa prática recomendada.
Set myProp = myItem.UserProperties.Add("MyPropName", olText)
Você também pode usar a biblioteca de objetos CDO ("MAPI. Sessão") para adicionar campos personalizados. Para obter mais informações, visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/ms527518.aspx Para desenvolvedores do C++, o MAPI Estendido pode ser usado para adicionar propriedades nomeadas. Para obter mais informações, visite o seguinte site da MSDN:
Prática recomendada: usar formulários personalizados publicados que contêm campos personalizados
O Outlook confia em grande parte em formulários personalizados publicados. No entanto, o Outlook não confia em formulários não publicados ou formulários únicos. Isso inclui arquivos .oft. Portanto, ao criar uma solução de formulário personalizado, recomendamos que você publique o formulário personalizado. Você deve projetar o formulário para que o formulário não se torne um formulário único. Enquanto um formulário for publicado, o formulário não será afetado pela alteração no Outlook.
Quando você publica um arquivo .oft em um repositório diferente, o repositório padrão permite criar propriedades nesse repositório. Além disso, quando você cria um formulário personalizado que tem propriedades personalizadas e o publica na biblioteca ou pasta de formulários apropriados, as propriedades personalizadas são criadas nos repositórios afetados.
Prática recomendada: implantação programática de formulários personalizados
Se você estiver desenvolvendo um formulário personalizado do Outlook que será usado por outras pessoas, há poucas abordagens que você pode usar. A abordagem que você usa depende de vários fatores. Esses fatores incluem o tipo de formulário, quem usará o formulário, onde o formulário será usado e assim por diante. Normalmente, se um formulário personalizado for usado por muitas pessoas, recomendamos que você publique o formulário na Biblioteca de Formulários Organizacionais. No entanto, se isso não for possível, talvez você queira publicar o formulário em uma pasta compartilhada ou na Biblioteca de Formulários Pessoais de alguns usuários. Você pode instalar programaticamente um formulário personalizado usando o método CreateItemFromTemplate na biblioteca de objetos do Outlook. Você usa o método CreateItemFromTemplate para abrir um arquivo .oft e publicar o formulário usando o método PublishForm. Nesse caso, um arquivo .oft não é afetado pelas alterações de propriedades personalizadas.
Não recomendado: implantar ou enviar arquivos .oft para os usuários abrirem
Você pode salvar formulários personalizados do Outlook como arquivos .oft. Esses formulários podem conter campos personalizados, alterações na interface do usuário e código VBScript (Microsoft Visual Basic Scripting Edition) personalizado para adicionar funcionalidade ao formulário. Embora o Outlook já contenha recursos que impedem a execução do código VBScript em arquivos .oft, o Outlook agora também restringe o uso de arquivos .oft. Se um arquivo .oft contiver propriedades personalizadas e o usuário não tiver usado essas propriedades personalizadas anteriormente, as propriedades personalizadas não estarão no repositório padrão do usuário. O Outlook não renderizará o formulário personalizado quando o usuário clicar duas vezes no arquivo. No entanto, para que o Outlook abra um formulário personalizado armazenado como um arquivo .oft, clique em Arquivo, clique em Novo e clique em Escolher Formulário. Em seguida, você pode alterar o local para Modelos de Usuário no Sistema de Arquivos e, em seguida, clicar em Procurar para abrir o arquivo .oft. O formulário será aberto e você poderá salvar as propriedades personalizadas no repositório padrão.
Não recomendado: use a chave de registro AllowNamedProps
Algumas organizações podem ter motivos válidos para ter determinadas propriedades personalizadas disponíveis em toda a organização. Se vários repositórios forem usados, talvez você queira garantir que um conjunto de propriedades personalizadas possa ser adicionado a todos os repositórios. Portanto, o Outlook 2003 SP2 e versões posteriores dão suporte a chaves de registro do lado do cliente que especificam quais propriedades personalizadas podem ser criadas. Para especificar quais propriedades personalizadas devem ser habilitadas, as propriedades personalizadas são definidas na seguinte chave do registro: HKEY_CURRENT_USER\Software\Microsoft\Office\<versão>\Outlook\AllowedNamedProps\
Observação Nesta chave do registro, <versão> é um espaço reservado para a versão do Outlook que você está usando. Para o Outlook 2003, o número da versão é 11.0. Para o Outlook 2007, o número da versão é 12.0. O número da versão aumentará em versões posteriores do Outlook.
A estrutura geral da chave do registro para uma entrada no registro é:
<guid>
> <Nome da Propriedade
"Kind" (dword)
"ID" (dword)
"Tipo" (dword) Os seguintes espaços reservados são usados na estrutura de chave do registro:
-
<guid>: contém o GUID que especifica o conjunto de propriedades. Os campos ou propriedades personalizados do Outlook que você usa em um formulário personalizado do Outlook têm o GUID {00020329-0000-0000-C000-0000000000046}. No MAPI, o GUID é chamado de PS_PULIC_STRINGS. No entanto, os programas MAPI personalizados podem ter seus próprios GUIDs para propriedades personalizadas.
-
<Nome da Propriedade>: especifica o nome da propriedade. Se a propriedade for nomeada por uma cadeia de caracteres, o <Nome da Propriedade> será o nome da cadeia de caracteres real da propriedade. Se a propriedade for nomeada por uma ID, o valor dessa chave de registro será ignorado. No entanto, você deve dar à propriedade um nome exclusivo para que a propriedade possa ser armazenada no registro. Se a chave Kind estiver definida como 1 ou for <> 0, o nome da chave do registro determinará o nome da propriedade. Se a chave Kind não for igual a 1, esse nome da chave do registro será ignorado.
-
"Kind" (dword): especifica se a propriedade é nomeada por uma ID ou por uma cadeia de caracteres. Se o valor for 0, a propriedade será nomeada por uma ID. O nome é um valor numérico especificado por uma ID. Se o valor for 1, a propriedade será nomeada por uma cadeia de caracteres. Essa configuração é a configuração padrão quando "Kind" não está presente.
-
"ID" (dword): contém o nome da ID de uma propriedade nomeada por uma ID. Essas informações serão necessárias se a chave Kind estiver definida como 0. Se a chave Kind estiver definida como 1, essas informações serão ignoradas.
-
"Tipo" (dword): especifica o tipo de propriedade.
Essa chave do registro é necessária, mas a chave do registro não é usada no momento. A tabela a seguir lista os valores possíveis dessa chave de registro com base no tipo MAPI.
Tipo MAPI |
Valor |
Descrição |
---|---|---|
PT_UNSPECIFIED |
0 |
Reservado para uso de interface, (o tipo não é importante para o chamador) |
PT_NULL |
1 |
Valor da propriedade NULL |
PT_I2 |
2 |
Valor assinado de 16 bits |
PT_LONG |
3 |
Valor assinado de 32 bits |
PT_R4 |
4 |
Ponto flutuante de 4 bytes |
PT_DOUBLE |
5 |
Ponto flutuante duplo |
PT_CURRENCY |
6 |
Int de 64 bits assinado (decimal w/4 dígitos direito de decimal pt) |
PT_APPTIME |
7 |
Hora do aplicativo |
PT_ERROR |
10 |
Valor de erro de 32 bits |
PT_BOOLEAN |
11 |
Booliano de 16 bits (não zero true) |
PT_OBJECT |
13 |
Objeto inserido em uma propriedade |
PT_I8 |
20 |
Inteiro com sinal de 8 bytes |
PT_STRING8 |
30 |
Cadeia de caracteres de 8 bits terminada nulo |
PT_UNICODE |
31 |
Cadeia de caracteres Unicode terminada nulo |
PT_SYSTIME |
64 |
Inteiro filetime de 64 bits com c/número de períodos de 100ns desde 1º de janeiro de 1601 |
PT_CLSID |
72 |
OLE GUID |
PT_BINARY |
258 |
Sem interpretação (matriz de bytes contada) |
PT_MV_UNSPECIFIED |
4096 |
|
PT_MV_NULL |
4097 |
|
PT_MV_I2 |
4098 |
|
PT_MV_LONG |
4099 |
|
PT_MV_R4 |
4100 |
|
PT_MV_DOUBLE |
4101 |
|
PT_MV_CURRENCY |
4102 |
|
PT_MV_APPTIME |
4103 |
|
PT_MV_ERROR |
4106 |
|
PT_MV_BOOLEAN |
4107 |
|
PT_MV_OBJECT |
4109 |
|
PT_MV_I8 |
4116 |
|
PT_MV_STRING8 |
4126 |
|
PT_MV_UNICODE |
4127 |
|
PT_MV_SYSTIME |
4160 |
|
PT_MV_CLSID |
4168 |
|
PT_MV_BINARY |
4354 |
Veja a seguir um exemplo de como definir uma propriedade nomeada por cadeia de caracteres:
Nome: "MyStringFieldName1"
Tipo: PT_LONG
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\AllowedNamedProps\{00020329-0000-0000-C000-000000000046}\MyStringFieldName1] "Type"=dword:00000003
Veja a seguir um exemplo de como definir uma propriedade nomeada por ID:
ID: 0x0330
Tipo: PT_LONG
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\AllowedNamedProps\{00020329-0000-0000-C000-000000000046}\MyMAPIProp1] "Kind"=dword:000000000 "ID"=dword:00000330 "Type"=dword:00000003
Para esses dois exemplos, o registro é semelhante ao seguinte no Editor do Registro:
{00020329-0000-0000-C000-00000000000046}
MyStringFieldName1
Tipo = 3
MyStringFieldName2
Tipo = 3
{00020329-0000-0000-C000-00000000000046}
MyMAPIProp1
Tipo = 0
ID = 330
Tipo = 3
MyMAPIProp2
Tipo = 0
ID = 331
Tipo = 3
Não recomendado: habilitar novamente a capacidade de criar propriedades
Três chaves de registro podem ser implantadas em computadores cliente para desabilitar o bloqueio de propriedades personalizadas e reverter o Outlook ao seu comportamento anterior. Essas chaves de registro têm suporte por políticas de grupo. As seguintes chaves de registro podem reverter o Outlook 2003 ao seu comportamento anterior:
Observação As chaves do registro a seguir não reverter o Outlook 2007 ao seu comportamento anterior.
-
AllowTNEFtoCreateProps (HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Options\Mail] "AllowTNEFtoCreateProps"=dword:000000000): se o valor for 0, o TNEF/MIME não poderá criar novas propriedades personalizadas que não sejam do Outlook. Esse valor é o valor padrão. Se o valor for 1, o TNEF/MIME poderá criar novas propriedades personalizadas que não sejam do Outlook.
-
AllowMSGFilestoCreateProps: se o valor for 0, arquivos .msg e arquivos .oft não poderão criar novas propriedades personalizadas que não sejam do Outlook. Esse valor é o valor padrão. Se o valor for 1, arquivos .msg e arquivos .oft poderão criar novas propriedades personalizadas que não sejam do Outlook.
-
DisallowTNEFPreservation: para facilitar a migração para esse novo comportamento, o Outlook preserva o TNEF original quando as propriedades personalizadas não são criadas. O TNEF original é salvo em um fluxo binário no item salvo. O Outlook usa a seguinte marca de propriedade para salvar o fluxo:
PR_TNEF_UNPROCESSED_PROPS PROG_TAG(PT_BINARY, 0x0e9C). O HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Options\Mail] "DisallowTNEFPreservation "=dword:00000000
A configuração do registro controla se o Outlook cria a propriedade PR_TNEF_UNPROCESSED_PROPS.
Observe que a propriedade PR_TNEF_UNPROCESSED_PROPS é removida de uma mensagem quando você insere uma mensagem em outra mensagem como um anexo. A propriedade PR_TNEF_UNPROCESSED_PROPS também é removida quando você encaminha uma mensagem ou responde a uma mensagem.