ORDA選択した2つのエンティティの徹底比較

Deeplからの自動翻訳

ORDAでは複数のエンティティセレクションを同時に扱うことができるため、プロジェクトメソッドやORDAデータモデルクラスの関数にパラメータとしてエンティティセレクションを渡すことで、これを利用することができると思います。

オブジェクト指向プログラミングで、できるだけ少ないコード行数で効率的に作業するためには、堅牢で最適化された関数が必要です。そのため、4D v19 R3では、entitySelectionオブジェクトで利用できる新しい関数 selected()関数です。

そのおかげで、2つのエンティティセレクションを検査したり比較したりすることができます。それでは、詳細をご覧ください。

新しい関数 selected()

2つのエンティティセレクションentitySel1 と entitySel2 が与えられたとき、この関数は entitySel1 の中にある entitySel2 のエンティティのインデックスを返します。

わかりましたか?以下はその例です。

var $invoices

; : . : := . . := . . ("payment = :1"; "Cash") $selection csInvoicesSelection
var $result Object$invoicesdsInvoicesall()
$selectiondsInvoicesquery
$result := . ($invoicesselected$selection)
// $result = {ranges:[{start:1,end:1},{start:9,end:12},{start:18,end:18},{start:21,end:25}]}

この selected()関数は、オブジェクトのコレクションであるranges プロパティを持つオブジェクトを返します。

これらのオブジェクトは、エンティティの範囲(開始 # 終了)または単一のエンティティ(開始 = 終了)を指定する。

全請求書のうち、payment = “Cash “を持つInvoices のエンティティは、インデックスを持つエンティティです。

  • 1
  • 9から12
  • 18
  • 21から25

具体的な使用例

さまざまなテーマ(歴史、芸術、科学、…)の本がある図書館を想像してください。ここに「本」テーブルがあります。

HTML ページでは、特定の主題に関する書籍をハイライト表示したい。

そのために、highlight プロジェクトメソッドを subject パラメータを持つ4DACTIONとして呼び出します。

highlight プロジェクトメソッドコード

var $index :Integer
var $subject ;$text:Text
var $onSubject :cs.BooksSelection
var $indices//Get the subject;$range:Object
var $titles :Collection
var $i :Integer

ARRAY TEXT ($anames; 0 )
ARRAY TEXT ($avalues; 0

WEB GET VARIABLES $anames ;$avalues)

$index :=Find in array($anames; "subject")
$subject :=$avalues{$index}

//Search books about the given $subject
$onSubject:=ds.Books.query("subject = :1";$subject)

//Get ranges of books about the subject
$indices :=ds.Books

.all().selected($onSubject)

//Build a collection with all the titles
$titles :=ds.Books.all().title

// Loop on the $indices.ranges collection of objects
// $indices.ranges is [{start:0,end:0},{start:2,end:4},{start:7,end:9},{start:11,end:11}] For each ($range;$indices.ranges)
For ($i;$range.start;$range.end
)
$titles [$i]:="<b>"+$titles[$i]+"</b>"
End for
End for each
// Build a text with carriage returns $text :=$titles.join("<br/>")

WEB SEND TEXT ($text)

では、ブラウザで4DACTION/highlight?subject=Historyを実行してみましょう。

その結果がこちらです。

blank

それでは、エンティティ選択で最適化されたコードを書いてみましょう!

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