ORDA foi um dos principais anúncios da Cimeira 4D de 2018, abrindo um mundo de novas possibilidades em 4D. Para saber mais sobre ORDA e os seus benefícios, consulte este post para ver como ORDA irá mudar a sua forma de trabalhar.
INTRODUÇÃO
Com a ORDA, os dados são acedidos através de uma camada de abstracção: a datastore. Uma datastore é um objecto que fornece uma interface para a base de dados e os seus dados através de objectos. Por exemplo, uma tabela é mapeada para um objecto de dataclass, um campo é um atributo de um dataclass. O novo ds retorna uma referência sobre o datastore da aplicação. Se quiser saber mais, dê uma vista de olhos ao artigo de síntese na documentação.
Para o guiar na exploração das características ORDA , preparámos um glossário dos diferentes termos e conceitos, juntamente com a sua definição.
ORDA também fornece algumas informações úteis sobre a estrutura da base de dados.
Isto pode ser muito útil ao escrever código genérico…. sem conhecer a estrutura de uma base de dados.
Descarregar a ferramenta de classificação dinâmica TIP
Aqui está um exemplo:
Uma vez que a DataStore devolvida pelo comando ds é um objecto, pode ser iterado através de um comando for each loop para obter os seus atributos (também conhecidos por DataClasses).
Isto permite-lhe escrever um código genérico aplicável a todas as tabelas expostas na DataStore.
No exemplo abaixo, construímos uma colecção de objectos contendo as DataClasses.
C_OBJECT($dataClassObj)
C_TEXT ($dataClassName)
For each ($dataClassName;ds)
$dataClassObj :=New object
$dataClassObj .name:=$dataClassName
$dataClassObj .value:=ds[$dataClassName]
Form .dataClassList.push($dataClassObj)
End for each
Esta colecção pode ser exibida numa caixa de listagem para permitir aos utilizadores seleccionar uma classe de dados. Depois, podemos continuar com o código genérico da classe de dados seleccionada.
Um objecto dataClass também pode ser iterado através de um for each loop para obter os seus atributos contendo propriedades úteis:
-
- nome: nome da DataClassAttribute no modelo de dados
- tipo: a categoria do atributo:
- “armazenamento”: equivalente a um campo na base de dados 4D
- “relatedEntity”: um atributo de relação N -> 1
- “relatedEntities”: um atributo de relação 1 -> N
- relatedDataClass: o nome da classe de dados relacionada com o atributo (se a espécie for “relatedEntity” ou “relatedEntities”)
Tendo em conta toda esta informação, pode escrever código genérico sem conhecer a estrutura da sua base de dados.
Na base de dados de exemplo TIP fornecida, aprenderá como fazê-lo de forma dinâmica:
- seleccionar uma DataClass da DataStore,
- construir uma caixa de listagem com todas as propriedades da classe de dados, incluindo a entidade relacionada com o primeiro nível, e
- construir uma ferramenta de ordenação.
Aqui está uma visão geral desta DICA: