Métodos dos membros da ORDA para obter a informação da estrutura

Tradução automática de Deepl

“Como posso conhecer a classe de dados de uma entidade? Preciso dela para escrever métodos genéricos“. “Preciso de informação sobre um campo numa DataClass: qual é o seu tipo? É indexado? É única?“. Estes são os tipos de perguntas que o ouvimos fazer no fórum. 4D v17 R5 fornece as respostas: introduzindo novos métodos de membros ORDA para fornecer informações úteis sobre a sua base de dados. Continue a ler, porque irá apreciar os benefícios de reduzir o tamanho do seu código e torná-lo reutilizável e fácil de manter!

HDI: Exemplo de obtenção de informação sobre a estrutura da base de dados com ORDA

Agora, pode obter informações relacionadas com a estrutura, tais como tabela ou número de campo. Isto pode ser útil ao integrar a ORDA passo a passo no seu código 4D clássico. No entanto, o principal objectivo destes métodos de membros é dar-lhe uma forma de escrever código genérico que seja aplicável independentemente da estrutura da base de dados.

Obter a classe de dados de uma entidade ou uma selecção de entidade

entidade dataclass

Que alegria ter uma entidade inteligente que conhece a sua própria classe de dados!

O getDataClass() O método de membro devolve o objecto da classe de dados correspondente à entidade. Depois, pode chamar qualquer método de membro disponível na DataClass.

No exemplo abaixo, chamamos o new() método dos membros. Cria uma nova entidade a partir da entidade fornecida e copia os dados de endereço. É também recebido um objecto contendo o nome da propriedade e o seu valor para a entidade recém-criada.

C_OBJECT($1;$entity;$entityContent;$newEntity;$status)
C_OBJECT ($2;$attribute)

$entity :=$1
$attribute

:=$2new() $newEntity :=$entity.getDataClass().

$entityContent :=$entity.toObject("endereço.*")
//We copy address from the received entity
$newEntity.fromObject($entityContent)

//We fill the created entity with received property name and value
$newEntity [$attribute.name]:=$attribute.value
$status :=$newEntity.save()

selecção da entidade dataclass

O getDataClass() O método de membro devolve o objecto DataClass correspondente à selecção da entidade. O método abaixo recebe uma selecção de entidade e cria novas entidades com os mesmos dados de endereço.

C_OBJECT($1;$inputSelection;$newEntitySelection)
C_COLLECTION ($esContent)
$inputSelection :=$1
alert (String($inputSelection.length) + " entidades vão ser duplicadas")
$esContent :=$inputSelection.toCollection("endereço")
$newEntitySelection :=$inputSelection.getDataClass().fromCollection($esContent)
alert (String( ($newEntitySelection.length) + " entidades foram criadas")

obter informação sobre um dataclass

O getInfo() método de membro disponível na DataClass, também devolve informação útil. No exemplo abaixo, obtemos IDs que correspondem à chave primária da Persons dataClass, depois recuperamos as entidades correspondentes.

C_OBJECT($es;$settings)
$settings :=New object
$settings .parameters:=New object("receivedIds";getIds ()))
// The getIds() method returns a collection of IDs
$settings .attributes:=New object("pk";ds.Persons.getInfo().primaryKey)
$es :=ds.Persons.query(":pk in :receivedIds";$settings)

atributo dataclass

Com 4D V17.0, aprendeu que cada atributo DataClass é um objecto. Foram agora melhorados com informação conceptual e estrutural.

Aqui está um exemplo rápido.

C_TEXT($text)
$text :=JSON Stringify(ds.Cats.ID)
//$text =
//{"name":"ID","kind":"storage","type":"number","indexed":true,
//"keywordIndexed":false,
"autoFilled":true,"mandatory":true,"unique":true,
//"fieldNumber":1,"fieldType":9}

Descarregue o IDH acima para saber mais! E não se esqueça de verificar o centro de documentação.

Avatar
• Proprietário do produto - Marie-Sophie Landrieu -Yvert entrou ao time 4D Product como Proprietária do Produto em 2017. Como tal, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Marie-sophie se formou na Escola de Engenharia de ESIGELEC e começou sua carreira como engenheira da IBM em 1995. Participou em vários projetos (de manutenção e criação) e trabalhou como desenvolvedora de Cobol. Depois trabalhou como designer de UML e desenvolvedora de Java. Suas principais funções foram analisar e redigir requisitos funcionais, coordenar os times de negócio e de desenvolvimento.