構造情報を取得するためのORDAメンバーメソッド

Deeplからの自動翻訳

エンティティのdataClassを知るにはどうしたらいいですか?ジェネリック・メソッドを書くのに必要です”.”dataClassのフィールドに関する情報が必要です:そのタイプは何ですか?そのタイプは何ですか?一意か?“.これらは、フォーラムで皆様から寄せられた質問です。4D v17 R5は、その答えを提供します。新しいORDAメンバーメソッドを導入し、あなたのデータベースに関する有用な情報を提供します。コードのサイズを小さくし、再利用と保守を容易にすることの利点を実感していただけると思いますので、読み続けてみてください

HDI:ORDAでデータベースの構造情報を取得する例

さて、テーブルやフィールド番号などの構造関連情報を取得することができます。これは、ORDAを段階的にクラシック4Dコードに統合する際に役立ちます。しかし、これらのメンバメソッドの主な目的は、データベースの構造に関係なく適用できる汎用的なコードを書く方法を提供することです。

エンティティまたはエンティティセレクションの dataClass を取得します。

エンティティdataclass

自分自身の dataClass を知っている賢いエンティティを持つことは、何と嬉しいことでしょう!

この getDataClass()は、そのエンティティに対応するdataClassオブジェクトを返します。そして、そのdataClassで利用可能な任意のメンバ・メソッドを呼び出すことができます。

以下の例では new()メンバ・メソッドを呼び出しています。これは、提供されたものから新しいエンティティを作成し、アドレス・データをコピーします。また、新しく作成されたエンティティのプロパティ名とその値を含むオブジェクトも受け取ります。

C_OBJECT$attribute

($1;$entity;$entityContent;$newEntity;$status)
C_OBJECT ($2;$attribute)

$entity :=$1
:=$2$newEntity :=$entity.getDataClass().new()$entityContent :=$entity.toObject("address.*")
//We copy address from the received entity
$newEntity . 。fromObject($entityContent)

//We fill the created entity with received property name and value
$newEntity [$attribute.name]:=$attribute.value
$status :=$newEntity.save()

エンティティ選択データクラス

また getDataClass()member メソッドは、エンティティの選択に対応するdataClassオブジェクトを返します。以下のメソッドは、エンティティ・セレクションを受信し、同じアドレス・データを持つ新しいエンティティを作成します。

C_OBJECT($1;$inputSelection;$newEntitySelection)
C_COLLECTION ($esContent)
$inputSelection :=$1
alert (String($inputSelection.length) + " エンティティが重複する")
$esContent :=$inputSelection.toCollection("address")
$newEntitySelection :=$inputSelection.getDataClass().fromCollection($esContent)
alert (String($newEntitySelection.length) + "エンティティが作成されている")

データクラスに関する情報を取得する

このメソッドは getInfo()dataClassで利用可能なmemberメソッドは、有用な情報も返します。以下の例では、dataClass の主キーに一致する ID を取得します。 Persons dataClass の主キーに一致する ID を取得し、対応するエンティティを取得します。

C_OBJECT
($es;$settings)
$settings :=New object
$settings .parameters:=New object("receivedIds";getIds ())
// The getIds() method returns a collection of IDs $settings attributes :=New object("pk";ds.Persons.getInfo().primaryKey)
$es :=ds.Persons.query(":pk in :receivedIds";$settings)

データクラス属性

4D V17.0 で、dataClass 属性がオブジェクトであることを学びました。現在では、概念的、構造的な情報で強化されています。

以下は、簡単な例です。

C_TEXT($text)
$text :=JSON Stringify(ds.Cats.ID)
//$text =
//{"name":"ID","kind":"storage","type":"number","indexed":true,
//"keywordIndexed":false,
"autoFilled":true,"mandatory":true,"unique":true,
//"fieldNumber":1,"fieldType":9}

上記のHDIをダウンロードして、さらに学びましょう。また、ドキュメントセンターもぜひご覧ください。

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