4D v18 R4とORDAにより、データモデルの上にハイレベルなクラス関数を作成することが可能になりました。これにより、ビジネス指向のコードを書くことで、複雑さを隠し、エラーを減らし、開発プロセスをスピードアップすることができます。
4D v18 R5では、コードの最適化と整理を支援する機能をさらに充実させました。例えば、クライアント/サーバーモードで作業しているときに、パフォーマンスを向上させるために、クライアント上でローカルに関数を実行する必要があるかもしれません。それが可能になりました。また、データベースをRESTサーバーとして公開する場合、サーバーサイドでは利用可能だがRESTクライアントでは非表示にしたい関数があるかもしれません。これも可能です!
HDI: ORDAデータモデルクラスにおける関数のキーワード
ORDAデータモデルクラスで関数のための2つの新しいキーワードが利用可能です。
C/SでLOCALキーワードを使用して作業する
C/Sでは、関数はデフォルトでサーバー上で実行されますが、その一部をクライアント上で実行するよう選択できるようになりました。これにより、パフォーマンスを大幅に向上させることができます。
例
この例では、Studentsデータクラスを持っています。生徒の年齢を返す関数を書いてみましょう。
cs.StudentsEntity エンティティクラスのage() 関数は次のとおりです。
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
そして、これは年齢カラムがThis.age() という式でマップされたすべての生徒を表示するリストボックスです。
ローカルキーワードのおかげで、 () 関数は、リストボックスを表示しながら、生年月日を読み込んでクライアント上でローカルに実行されます。これは、age4D v17 R5のORDAリクエストの最適化と調和するために重要です。
ローカルキーワードがなければ、 ()関数は、各行ごとにサーバーへのリクエストをトリガーしてしまいます!age
公開キーワード
4D v18 R4で約束したように、私たちはRESTサーバーのためのエクスポーズド関数を強化しました。4D v18 R5では、どの関数を公開するか(または公開しないか)を選択することができるようになりました。
exposedキーワードを使用すると、関数を REST クライアント用の API として公開することができます。
以下の例では、cs.Students データクラスクラスのregisterNewStudent() 関数は、REST クライアントから呼び出し可能ですが、computeStudentId() はそうではありません。
Class extends DataClass
var
exposed Function registerNewStudent($student:Object) :Object
var $entity :cs.StudentsEntity
$status :Object
$entity :=ds.Students.new()$entity .fromObject($student)
$entity .studentId:=This.computeStudentId()
$status:=$entity.save()
If ($status.success
// This function not callable from a REST client)
$0 :=$entity
Else
$0 :=$statusEnd if
Function computeStudentId() : Integer
//新しい学生IDを計算する
Use (Storage.infos)
Storage.infos.studentId:=Storage.infos.studentId+1
$0:=Storage.infos.studentId
End use
以下は、RESTクライアントでの呼び出しコードです。
var $connect
studentId; ; ; : : := ("hostname"; "127.0.0.1:8044") := ( ; "demo") := ("firstname"; "Mary"; "lastname"; "Smith") $ds$student$result Object
var $studentId Integer
$connect New object
$dsOpen datastore$connect$studentNew object
// Execution is OK, no error is raised
$result:= . . ( ) $dsStudentsregisterNewStudent$student
//An error is raised
$:= . ... ...但し、"demo$dsStudents
“は “do “であり、”demo “は “many “である。computeStudentId()
注:4D v18 R4では、すべての関数がRESTサーバーで公開されています。4D v18 R5 では、関数はデフォルトでは公開されません。公開したい関数をマークするのを忘れないでください。
新機能の詳細については、上記のドキュメントとHDIを参照してください。