Validação interna
Ao criar um pacote de instalação, você pode usar a função MsiViewModify ou o método View.Modify para garantir que os dados inseridos sejam sintaticamente corretos. Para obter mais informações, confira o método Modify. No nível mais baixo, a coluna de uma tabela de banco de dados pode armazenar inteiros (curtos ou longos), cadeias de caracteres ou dados binários. No entanto, um pacote de instalação requer inteiros ou cadeias de caracteres específicos em determinadas tabelas. Essas especificações são mantidas na tabela _Validation. Por exemplo, a coluna FileName da tabela File é uma coluna de cadeia de caracteres, mas armazena especificamente um nome de arquivo. Portanto, não só a entrada deve ser uma cadeia de caracteres, mas também deve seguir os requisitos para nomear arquivos.
Os vários valores de enumeração de validação usados com a função MsiViewModify permitem a validação imediata em diferentes níveis. A enumeração MSIMODIFY_VALIDATE_FIELD pode ser usada para validar campos individuais de um registro. Ela não valida chaves estrangeiras. A enumeração MSIMODIFY_VALIDATE valida uma linha inteira e inclui a validação de chave estrangeira. Se você estiver inserindo uma nova linha em uma tabela, use a enumeração MSIMODIFY_VALIDATE_NEW para verificar se está adicionando dados válidos, bem como usando chaves primárias exclusivas. Uma inserção falhará se as chaves primárias não forem exclusivas. Se uma chamada para MsiViewModify com uma das enumerações de validação retornar um erro, você poderá fazer chamadas repetidas para MsiViewGetError, para diagnosticar o problema. MsiViewGetError indica a coluna em que o erro ocorreu, bem como o valor de enumeração para ajudar a corrigir o problema. Para obter mais informações, confira o método GetError.
Você também pode usar a validação interna para garantir que outros autores insiram dados corretamente na sua tabela personalizada. Adicione cada uma das colunas da tabela personalizada à tabela _Validation usando o nome da tabela personalizada e o nome da coluna como a chave primária. Forneça uma descrição ou finalidade de cada coluna na coluna Description da tabela _Validation. Insira os requisitos aplicáveis para cada coluna usando as colunas Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Category e Set:
- Se a coluna for Nullable, insira um 'Y'. Caso contrário, insira um 'N'.
- Se a coluna for uma coluna inteira e puder conter um intervalo de inteiros, insira esse intervalo usando as colunas MinValue e MaxValue.
- As colunas de chave estrangeira são identificadas usando as colunas KeyTable e KeyColumn.
- Para colunas de cadeia de caracteres, especifique uma Categoria como Filename, GUID ou Identifier. Para mais informações, confira tipos de dados de coluna.
- Se os dados só puderem pertencer a um número específico de valores (cadeia de caracteres ou inteiro), use a coluna Set para listar os valores aceitáveis.
Veja a seguir uma lista das colunas (além de Table, Column e Description) na tabela _Validation que pode ser preenchida se a coluna for do tipo especificado. (Observe que você não precisa preencher todas as colunas.)
Type | Colunas |
---|---|
Integer | Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Set |
String | Nullable, KeyTable, KeyColumn, Category, Set, MinValue, MaxValue |
Binário | Nullable, Category (Category deve ser "Binária") |
Os ambientes de criação podem usar MSIMODIFY_VALIDATE_DELETE. Essa enumeração pressupõe que você deseja excluir a linha. Nenhuma validação de campo ou chave estrangeira será executada. Essa enumeração realmente executa uma validação inversa de chave estrangeira. Ela verifica a tabela _Validation quanto às referências nas colunas KeyTable e KeyColumn da tabela à qual a linha "excluída" pertence. Se houver colunas que listam a tabela que contém a linha "excluída" como uma chave estrangeira potencial, ela percorrerá essa coluna para ver se algum dos valores referencia valores na linha "excluída". Um retorno de erro significa que você interrompeu a integridade relacional do banco de dados excluindo a linha.