Não encontrou o que procurava? Dê uma olhada nessas páginas!

Blog

Status Help Automatizado - Usando descrições de colunas SQL como status help

03 de Junho de 2019
Por Vincent Oorsprong

Como um desenvolvedor de aplicações Windows ou Web, você não counsidera uma aplicação completa se ela não conter uma forma de ajuda on-line.

É um pouco direto, mas é verdade, que escrever documentação é um trabalho duro e não há tantos desenvolvedores que gostem de fazer isso ... a maioria gosta de ser criativo, e escrever um documento não é muito atraente.

O mesmo pode ser dito sobre adicionar status help, tool-tips e adicionar placeholders a uma aplicação, embora isso seja um pouco mais fácil, pois um desenvolvedor pode adicioná-los diretamente no código-fonte ou como status help na classe do dicionário de dados. A adição de status help no dicionário de dados também pode ser vista como documentação para as colunas de uma tabela no banco de dados.

Se você criar as tabelas do seu banco de dados, e com isso suas colunas, deve ser uma tarefa fácil, pois você já tem os detalhes sobre o que vai nas colunas em sua mente ou em um documento. Se você não é proprietário do banco de dados e está escrevendo um programa em torno de um banco de dados existente, é mais difícil, pois você pode não ter esses detalhes e adicionar status help aos nossos dicionários de dados, o qual pode ter centenas de tabelas, não é um trabalho fácil.

Descobri recentemente que o banco de dados de exemplo Adventure Works 2012 da Microsoft contém uma descrição de coluna, e podemos usá-la dinamicamente para fornecer o help na aplicação. A vantagem de usar essa maneira dinâmica é que o help pode ser alterado no nível do banco de dados e o desenvolvedor da aplicação não precisa se ajustar,ou solicitar mais informações.

A instrução SQL para a descrição da coluna é:


SELECT [objname], [value] FROM [fn_listextendedproperty] (NULL, ’schema’, ’" - <SchemaName> - "’, ’table’, ’" - <TableName> - "’, ’Column’, NULL);

Com essa informação, decidi criar uma classe cMSSQLDataDictionary. Esta é uma subclasse da classe DataDictionary e pode ser facilmente usada dentro de seus projetos com base no MSSQL, onde o banco de dados contém informações sobre colunas.


Procedure RetrieveColumnDescriptions
Handle hoSQL hTable hoConnection hoStatement
String sSchema sTableName sColumnName
String[][] sStatusHelpData
Integer iColumns iColumn

Get Create (RefClass (cSQLHandleManager)) to hoSQL
Get Main_File to hTable
Get SQLFileConnect of hoSQL hTable to hoConnection
If (hoConnection <> 0) Begin
Get SQLOpen of hoConnection to hoStatement
If (hoStatement <> 0) Begin
Get_Attribute DF_FILE_OWNER of hTable to sSchema
Get_Attribute DF_FILE_TABLE_NAME of hTable to sTableName
Send SQLExecDirect of hoStatement ("SELECT [objname], [value] FROM [fn_listextendedproperty] (NULL, ’schema’, ’" - sSchema - "’, ’table’, ’" - sTableName - "’, ’Column’, NULL);")
Get SQLFetchResultsetValues of hoStatement to sStatusHelpData
Get Field_Count to iColumns
For iColumn from 1 to iColumns
Send CopyColumnDescriptionElement iColumn hTable sStatusHelpData
Loop
Send SQLClose of hoStatement
End
Send SQLDisconnect of hoConnection
End
Send Destroy of hoSQL
End_Procedure

O método acima recupera as descrições de coluna e envia uma mensagem para adicioná-las como status help do dicionário de dados para cada coluna da tabela. O código para isso é:


Procedure CopyColumnDescriptionElement Integer iColumn Handle hTable String[][] sStatusHelpData
String sColumnName
Integer iElements iElement

Get_Attribute DF_FIELD_NAME of hTable iColumn to sColumnName
Move (SizeOfArray (sStatusHelpData) - 1) to iElements
For iElement from 0 to iElements
If (sStatusHelpData[iElement][0] = sColumnName) Begin
Set Status_Help iColumn to sStatusHelpData[iElement][1]
Procedure_Return
End
Loop
End_Procedure

Agora tudo o que temos que ter é a classe cMSSQLDataDictionary enviando a mensagem RetrieveColumnDescriptions, e isso pode ser feito no evento End_Construct_Object.

Não sei se outros bancos de dados têm uma opção semelhante, mas, se tiverem, você provavelmente não terá muito trabalho para implementá-la.