これは誰もが遭遇した問題かもしれません。ユーザーのために、エンティティセレクションを表示する素敵なインターフェースをデザインしたとします。ユーザーはエンティティを削除して表示を絞り込むことができますが、その後には削除したエンティティがあった場所に空のスペースが現れてしまいます。
この場合、どうしたらいいのでしょう。削除後にエンティティセレクションを作り直す? いいえ、その心配はもうありません! 4D 20 R6 では、たった 1行のコードでこの問題を解消する便利な機能が導入されました。
この機能がどうやってインターフェースを美しく保ち、ユーザーを満足させるかについて説明していきます。
HDI: エンティティセレクションから未定義エンティティを取り除く
エンティティセレクションのclean関数
この機能がどのように動作するのか見てみましょう。
エンティティセレクションがリストボックスに表示され、ユーザーはいくつかのエンティティを削除することができます。
下のリストボックスには、Form.persons のエンティティセレクションが表示されます。ユーザーはそのうちのいくつかのエンティティを選択し (リストボックスの “選択された項目” にForm.selectedが設定されています)、削除ボタンをクリックします。このとき、以下のコードだけを実行すると
Form.selected.drop()
Form.persons:=Form.persons
このように歯抜けのエンティティセレクションとなります:
しかし、コードの最後の行に、新しいclean() 関数を下のように追加するだけで:
Form.persons:=Form.persons.clean()
空白スペースは魔法のように消え、とてもユーザーフレンドリーなインターフェースになります:
REST API $entityset の $cleanパラメーター
アプリケーションが REST API を使用している場合、$entityset REST API で $clean パラメーターを使用することもできます。
次のような、削除されたエンティティ (__STAMP プロパティだけの青いオブジェクトの箇所) を含むエンティティセレクションがあるとします:
{
"__DATACLASS": "Persons",
"__entityModel": "Persons",
"__GlobalStamp": 0,
"__COUNT": 3,
"__FIRST": 0,
"__ENTITIES": [
{
"__STAMP": 0
},
{
"__KEY": "2",
"__TIMESTAMP": "2024-05-23T09:26:19.658Z",
"__STAMP": 1,
"ID": 2,
"firstname": "Broddy",
"lastname": "Cristofanini"
},
{
"__KEY": "3",
"__TIMESTAMP": "2024-05-23T09:26:19.658Z",
"__STAMP": 1,
"ID": 3,
"firstname": "Candie",
"lastname": "Figin"
}
],
"__SENT": 3
}
以下のリクエストを実行すると、削除されたエンティティを含まない新しいエンティティセットを取得できます (949062617AF6408CB198B3CB41FB72FB はエンティティセットID です):
/$entityset/949062617AF6408CB198B3CB41FB72FB?$clean=true&$method=entityset
結果はどうなるでしょう? 削除された要素を含まないエンティティセットが返されます:
{
"__ENTITYSET": "/rest/Persons/$entityset/8F658F3BA1884DE6BEC1FCFF4A7938F0",
"__DATACLASS": "Persons",
"__entityModel": "Persons",
"__GlobalStamp": 0,
"__COUNT": 2,
"__FIRST": 0,
"__ENTITIES": [
{
"__KEY": "2",
"__TIMESTAMP": "2024-05-23T09:47:50.933Z",
"__STAMP": 1,
"ID": 2,
"firstname": "Broddy",
"lastname": "Cristofanini"
},
{
"__KEY": "3",
"__TIMESTAMP": "2024-05-23T09:47:50.933Z",
"__STAMP": 1,
"ID": 3,
"firstname": "Candie",
"lastname": "Figin"
}
],
"__SENT": 2
}
この新機能により、エンティティセレクションの管理がかつてないほど簡単になりました。インターフェースを整頓し、ユーザーエクスペリエンスを向上させましょう!