ORDA – 関数スコープでAPIを改善する

Deeplからの自動翻訳

4D v18 R4とORDAにより、データモデルの上にハイレベルなクラス関数を作成することが可能になりました。これにより、ビジネス指向のコードを書くことで、複雑さを隠し、エラーを減らし、開発プロセスをスピードアップすることができます。

4D v18 R5では、コードの最適化と整理を支援する機能をさらに充実させました。例えば、クライアント/サーバーモードで作業しているときに、パフォーマンスを向上させるために、クライアント上でローカルに関数を実行する必要があるかもしれません。それが可能になりました。また、データベースをRESTサーバーとして公開する場合、サーバーサイドでは利用可能だがRESTクライアントでは非表示にしたい関数があるかもしれません。これも可能です!

HDI: ORDAデータモデルクラスにおける関数のキーワード

ORDAデータモデルクラスで関数のための2つの新しいキーワードが利用可能です。

C/SでLOCALキーワードを使用して作業する

C/Sでは、関数はデフォルトでサーバー上で実行されますが、その一部をクライアント上で実行するよう選択できるようになりました。これにより、パフォーマンスを大幅に向上させることができます。

この例では、Studentsデータクラスを持っています。生徒の年齢を返す関数を書いてみましょう。

blank

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() という式でマップされたすべての生徒を表示するリストボックスです。

blank

ローカルキーワードのおかげで、 () 関数は、リストボックスを表示しながら、生年月日を読み込んでクライアント上でローカルに実行されます。これは、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を参照してください。

Avatar
- プロダクトオーナー - Marie-Sophie Landrieu-Yvertは、2017年にプロダクトオーナーとして4Dプロダクトチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。彼女は1995年にESIGELEC Engineering Schoolを卒業し、IBMでエンジニアとしてのキャリアをスタートさせました。様々なプロジェクト(保守や新規のプロジェクト)に参加し、Cobolのデベロッパーとして働きました。その後、UMLデザイナーおよびJavaデベロッパーとして勤務。最近は、機能要件の分析・記述、ビジネスチームと開発チームの調整などを主に担当しています。