ORDA – Migliorare l’API con l’ambito delle funzioni

Tradotto automaticamente da Deepl

4D v18 R4 e ORDA hanno reso possibile la creazione di funzioni di classe di alto livello al di sopra del modello di dati. Ciò consente di scrivere codice orientato al business per nascondere la complessità, ridurre gli errori e accelerare il processo di sviluppo.

Con 4D v18 R5, stiamo introducendo ancora più funzioni per aiutarvi a ottimizzare e organizzare il vostro codice. Ad esempio, potrebbe essere necessario eseguire una funzione localmente sul client per migliorare le prestazioni quando si lavora in modalità client/server. Ora è possibile! Oppure, se esponete il vostro database come server REST, potreste volere che alcune funzioni siano disponibili sul lato server ma nascoste per i vostri client REST. Anche questo è possibile!

HDI: parole chiave per le funzioni nelle classi del modello di dati ORDA

Sono disponibili due nuove parole chiave per le funzioni nelle classi del modello di dati ORDA:

lavorare in C/S con la parola chiave LOCAL

Le funzioni vengono eseguite sul server per impostazione predefinita in C/S, ma ora è possibile scegliere di eseguirne alcune sul client. Questo può migliorare notevolmente le prestazioni.

Esempio

In questo esempio, abbiamo una classe di dati Studenti. Scriviamo una funzione che restituisca l’età degli studenti.

blank

Ecco la funzione age() nella classe di entità cs.StudentsEntity.

Class extends Entity

// This is an estimate of the age
local Function () : ( . #!00-00-00!) := ( )- ( . ) age Variant
IfThisbirthDate
$0Year ofCurrent dateYear ofThisbirthDate
Else
:= $0Null
End if

Questa è una casella di riepilogo che mostra tutti gli studenti con la colonna età mappata con l’espressione This.age():

blank

Grazie alla parola chiave local, la funzione age() viene eseguita localmente sul client con la data di nascita caricata durante la visualizzazione dell’elenco. Questo è importante per essere in sintonia con l’ottimizzazione delle richieste ORDA di 4D v17 R5.

Senza la parola chiave local, la funzione age() farebbe partire una richiesta al server per ogni riga!

parola chiave esposta

Come promesso con 4D v18 R4, abbiamo migliorato le funzioni di esposizione per il server REST. Ora, con 4D v18 R5, è possibile scegliere quali funzioni pubblicare (o meno).

È possibile utilizzare la parola chiave exposed per pubblicare una funzione come API per i client REST.

Nell’esempio seguente, la funzione registerNewStudent() nella classe di dati cs.Students è richiamabile da un client REST, mentre computeStudentId() non lo è.

Class extends DataClass

$entityexposed Function registerNewStudent($student: Object) : Object
var $entity : cs.StudentsEntity
var $status : Object

$entity :=ds.Students.new()
.fromObject($student)
$entity .
studentId:=This.computeStudentId()
$status:=$entity.save()

If ($status.success)
$0 :=$entity
Else
$0 :=$status
End if

// This function not callable from a REST client
Function computeStudentId() : Integer
//calcolo di un nuovo Id studente
Use (Storage.
infos)
Storage.
infos.studentId:=Storage.infos.studentId+1
$0:=Storage.
infos.studentId
End use

Ecco il codice di chiamata sul client REST:

var $connectstudentId;$ds;$student;$result: Object
var $studentId : Integer

$connect := New object("hostname"; "127.0.0.1:8044")
$ds :=Open datastore($connect; "demo")

$student :=New object("firstname"; "Mary"; "lastname"; "Smith")
// Execution is OK, no error is raised
$result:=$ds.Students.registerNewStudent($student)

//An error is raised
$:=$ds.Students.computeStudentId()

Nota: in 4D v18 R4, tutte le funzioni sono esposte sul server REST. In 4D v18 R5, le funzioni NON sono esposte per impostazione predefinita. Non dimenticare di contrassegnare le funzioni che si desidera esporre.

Consultate la documentazione e l’HDI qui sopra per saperne di più sulle nuove funzioni!

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert è entrata a far parte del team 4D Product come Product Owner nel 2017. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Marie-Sophie si è laureata presso la scuola di ingegneria ESIGELEC e ha iniziato la sua carriera come ingegnere presso IBM nel 1995. Ha partecipato a vari progetti (di manutenzione o di costruzione) e ha lavorato come sviluppatrice Cobol. In seguito ha lavorato come progettista UML e sviluppatore Java. Ultimamente i suoi ruoli principali erano l'analisi e la scrittura dei requisiti funzionali, il coordinamento dei team di business e di sviluppo.