このORDAシリーズの最新版では、新しいORDAのコンセプトが、既存のオブジェクトやコレクションとどのように相互作用するかを見ていきます。実際、エンティティやエンティティセレクションをオブジェクトやコレクションに変換したり、オブジェクトやコレクションからエンティティやエンティティセレクションを構築することが可能です。そうすることで、ORDAのコードを既存のコードに簡単に統合することができます。コードを書き換えることなく、ORDAの利点をフルに活用することができます
今日は SELECTION TO ARRAYと ARRAY TO SELECTIONを使ってサーバーから切り離された形で作業していますが、フィールドの数だけ配列を管理しなければなりません。また、現在のレコードについては、どのような形でも抽出できるわけではありません。ORDAを使えば、データベースからエンティティやエンティティセレクションを簡単にエクスポートして、個別に作業することができます。また、それだけでなく、以前に作成したオブジェクトやコレクションをデータベースにインポートすることも可能です。 すべて1つの簡単な方法で行えます。
これは、クライアントサーバーモードで効率的に作業したり、他のアプリケーションと通信したり、 バッチプロセスを使用してデータをインポートしたりするのに非常に便利です。
エンティティとエンティティセレクションをオブジェクトとコレクションにエクスポートする
以下の例は、この構造に基づいています。さっそく手を動かしてみましょう
オブジェクトへのエクスポート
エンティティは、オブジェクトとして抽出するために toObject() メソッドを使用します。ここでは、$pupil のエンティティをオブジェクトとして抽出しています。抽出するプロパティを選択することができます。
そして、このオブジェクトの値を変換する JSON Stringifyコマンドを適用して、このオブジェクトの値をJSON文字列に変換し、ネットワーク経由で送信することができます。C_OBJECT
($pupil;$pupilObject)
C_TEXT ($pupilString)
//Get the first pupil whose last name is "Dunaway" $pupil :=ds.Pupil.query("lastName=:1"; "Dunaway").first()
If ($pupil#Null)
// Turn the entity to an object
$pupilObject :=$pupil.toObject("firstName, lastName, email")
$pupilString :=JSON Stringify($pupilObject) // Stringify the object
End if
$pupilObject オブジェクトになります。
{ "firstName":"Cecil", "lastName":"Dunaway"(ダナウェイ)。 "email":"Cecil.Dunaway@echo" }
EXPORT TO COLLECTIONs
エンティティセレクションをコレクションにエクスポートするには toCollection() メソッドを使用してコレクションにエクスポートできます。ここでは、$pupils エンティティセレクション (2 つのエンティティを含む) をコレクションとしてエクスポートしています。生徒のプロパティのみを抽出することにします。 lastName andfirstName プロパティのみを抽出し、school 関連エンティティのすべてのプロパティも抽出することにします。
次に JSON Stringifyコマンドを適用して、このコレクションの値を JSON 文字列に変換し、それをネットワーク経由で送信します(例)。
C_OBJECT
($pupils)
C_COLLECTION ($pupilsCollection)
C_TEXT ($pupilsString)
// Get the pupils whose first name starts with "L"
$pupils :=ds.Pupil.query("firstName=:1"; "L@")
//Turn the entity selection to a collection of objects $pupilsCollection :=$pupils.toCollection("lastName,firstName,school.*")
$pupilsString :=JSON Stringify($pupilsCollection)
$pupilsCollection コレクションになります。
[ { "firstName":"ローレン", "lastName":"Bouchard", "学校": { "ID":45, "名前":"芸術学校", "state":"ニュージャージー州" }. }, { "firstName":"ローリー", "lastName":"Valenti"(ヴァレンティ)。 "学校": { "ID":46, "名前":"数学の学校", "state":"ニュージャージー"}. } ]
のオプションが増えました。 toObject() と toCollection() メソッドのオプションもあります。詳細はドキュメントをご覧ください。
オブジェクトとコレクションからエントリとエントリのセレクションをインポート
Objects からインポートする
エンティティは、オブジェクトから fromObject()メソッドでオブジェクトからエンティティを構築することができます。ここでは、指定されたオブジェクトから新しい$pupil エンティティを作成しています。
C_OBJECT($pupil;$pupilObject)
$pupilObject :=New object("firstName"; "Mary"; "lastName"; "Smith"; "email"; "Mary.Smith@whisky")
//Create a new empty entity
$pupil:=ds.Pupil.new(
)
//Fill entity
$pupil.fromObject($pupilObject)
コレクションからインポートする
エンティティの選択は、コレクションから fromCollection() メソッドを使用します。ここでは、与えられたコレクションから$pupils エンティティセレクションを構築しています。
このメカニズムは、新しいエンティティの作成や既存のエンティティの更新に使用できることに注意してください。単に、主キーがオブジェクトに存在するかどうかに依存する。
C_OBJECT
($pupils)
C_TEXT($txtPupils)
C_COLLECTION ($pupilsCollection)
$txtPupils :=Document to text(Get 4D folder(Current resources folder)+"pupils_data.json")
//Get a collection of objects
$pupilsCollection:=JSON Parse($txtPupils)
$pupils :=ds.Pupil.fromCollection($pupilsCollection)
で、以下は $pupilsCollection collection:
[ { // エンティティの主キーが与えられていない。新しいエンティティが作成される "firstName":"マーク", "lastName":"Mac Arthur", "email":"Mark.MacArthur@yankee "です。 "学校": { "__KEY":"45" } }, { // エンティティの主キーを指定する。このエンティティは(存在すれば)更新される "__KEY":3436, "firstName":"Victor", "lastName":"Valenti"(ヴァレンティ)。 "email":"Victor.Valenti@NEWSCHOOL "です。 "学校": { "__KEY":"45" } } ]