ORDA:オブジェクトとコレクションを使った仕事

Deeplからの自動翻訳

このORDAシリーズの最新版では、新しいORDAのコンセプトが、既存のオブジェクトやコレクションとどのように相互作用するかを見ていきます。実際、エンティティやエンティティセレクションをオブジェクトやコレクションに変換したり、オブジェクトやコレクションからエンティティやエンティティセレクションを構築することが可能です。そうすることで、ORDAのコードを既存のコードに簡単に統合することができます。コードを書き換えることなく、ORDAの利点をフルに活用することができます

今日は SELECTION TO ARRAYARRAY TO SELECTIONを使ってサーバーから切り離された形で作業していますが、フィールドの数だけ配列を管理しなければなりません。また、現在のレコードについては、どのような形でも抽出できるわけではありません。ORDAを使えば、データベースからエンティティやエンティティセレクションを簡単にエクスポートして、個別に作業することができます。また、それだけでなく、以前に作成したオブジェクトやコレクションをデータベースにインポートすることも可能です。 すべて1つの簡単な方法で行えます。

これは、クライアントサーバーモードで効率的に作業したり、他のアプリケーションと通信したり、 バッチプロセスを使用してデータをインポートしたりするのに非常に便利です。

ORDA: オブジェクトとコレクションを扱う

エンティティとエンティティセレクションをオブジェクトとコレクションにエクスポートする

以下の例は、この構造に基づいています。さっそく手を動かしてみましょう

オブジェクトへのエクスポート

エンティティは、オブジェクトとして抽出するために 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"
}
}
]

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