“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.