“エンティティのdataClassを知るにはどうしたらいいですか?ジェネリック・メソッドを書くのに必要です”.”dataClassのフィールドに関する情報が必要です:そのタイプは何ですか?そのタイプは何ですか?一意か?“.これらは、フォーラムで皆様から寄せられた質問です。4D v17 R5は、その答えを提供します。新しい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をダウンロードして、さらに学びましょう。また、ドキュメントセンターもぜひご覧ください。