変数と型とは
「変数」は、ビジネス状態を保持し、(式を介して)applicationページのcomponentsにバインドされる名前付き情報です。 変数は、コンポーネントにバインドされたときに、RESTエンドポイントから取得されたデータ値を提供し、ユーザーに表示できます。 また、コンポーネントで必要な他の状態を保持することもできます。
ユーザーがコンポーネント値を入力または変更する場合、変更も変数に書き込まれます。 このケースでの変数の動作は、主にactionsによって制御され、基礎となるRESTエンドポイントをコールして変更を適用できます。 コンポーネント、変数およびアクションは、applicationの基本構成要素を形成します。
- String、Number、Booleanなどのプリミティブ変数(ワイルドカード型Anyでも)。
- データ構造を格納するために使用されるオブジェクトや配列などの構造化変数。
- メタデータの取得に使用する組込み変数。たとえば、現在のページのIDおよびタイトルにアクセスしたり、現在のユーザーに関する情報にアクセスしたりします。
変数データの型および構造を定義する複合変数は、typesと呼ばれます。 すべての変数には、組込みまたはカスタムのいずれかのタイプが割り当てられます。 開発者は、たとえばRESTペイロードに一致するタイプを作成し、そのタイプに割り当てられた変数を使用してデータを渡すことができます。
変数値は、名前が示すとおりに変更できます。 そのため、会社名や"foot-to-meter"換算レートなど、時間の経過とともに変化しない値を格納する場合は、constantsを使用します。 定数には他の変数と同様に型指定されますが、変数とは異なり、初期化後に値を変更することはできません。ただし、定数のデフォルト値が他の変数を参照する式である場合を除きます。この場合、他の変数値が変更されると、定数値が変更されます。
- application: applicationレベルで定義された変数は、application内の任意の場所で使用できます。 これらは、applicationフローおよびページ内およびページ間でアクセス可能なログイン名およびその他のデータを格納する場合に便利です。
- フロー: フロー・レベルで定義された変数は、フローとそのフロー内のページで使用できます。
- ページ: ページ・レベルで定義された変数は、そのページ内でのみ使用できます。
- フラグメント: フラグメント・レベルで定義された変数は、そのフラグメント内でのみ使用できます。 また、外部ページで参照されているフラグメントは、ページで定義されている変数を参照できません。
- レイアウト: レイアウト・レベルで定義された変数は、そのレイアウト・コンテナ内でのみ使用できます。
- アクション・チェーン: アクション・チェーン・レベルで定義された変数は、そのアクション・チェーン内でのみ使用できます。
入力パラメータとしての変数
変数を使用して、入力としてマークすることで、ページ間でパラメータを渡すことができます。 ページ変数を入力パラメータとしてマークする場合は、契約の一部となり、そのページに移動する方法を指定します。 必要に応じてさらにマークできます。そのページに移動するには設定する必要があります。
パラメータは、起動するページまたはフローのURLに渡すこともできます。 この方法では、パラメータに基づいて特定のデータを表示するページをブックマークできます。
デフォルト値および式
変数の初期値はデフォルト値によって決定されます。 デフォルト値を指定しない場合、値は"not set"または未定義であり、初期値はそのタイプに基づいて決定されます。 指定した場合、デフォルト値は静的値または式になり、定数、システム・プロパティ、静的値などの他の変数を暗黙的オブジェクト($variablesや$pageなど)を介して参照できます(変数の値の抽出に使用される)。
デフォルト値を式として定義すると、式の参照が変更されると、変数が更新されます。 たとえば、fullName変数のデフォルト値は{{ $variables.firstName + ' ' + $variables.lastName }}に設定できます。 firstNameまたはlastNameが更新されると、fullName変数が更新されます。
| 名前 | 説明 | 入手可能な場所 |
|---|---|---|
$application |
現在のapplicationレベルで定義された変数の値を取得します。 たとえば、empNameという変数がapplicationレベルで定義されている場合、$application.variables.empName式を使用してその値を取得します。 | 現在のapplication |
$flow |
現在のフロー・レベルで定義された変数の値を取得します。 フロー・レベルでempNameが定義されている場合、$flow.variables.empName式を使用してその値を取得します。 | 現在のフロー |
$page |
現在のページ・レベルで定義された変数の値を取得します。 現在のページ・レベルでempNameを定義した場合は、$page.variables.empName式を使用してその値を取得します。 | 現在のページ |
$variables |
現在のスコープで定義された変数の値を取得するショートカット。 たとえば、empNameが現在のページ・レベルで定義されている場合、$page.variables.empNameを使用する場合と同じ方法で$variables.empNameを使用できます。
|
variablesプロパティを持つすべてのスコープ |
$fragment |
フラグメント内で定義された変数の値を取得します。 empNameをフラグメント・レベルで定義した場合、$fragment.variables.empName式を使用して、特にアクション・チェーンの値を取得します。 $variables.empNameを使用して、フラグメントのローカル値を取得することもできます。
ノート: すべてのフラグメントには一意のIDがあり、$fragment.info.idを使用してフラグメント内でアクセスできます。 $fragment.info.idは、コンポーネントのIDプロパティに設定された式内、またはネストされたフラグメントのID内で使用できます。 |
現在のフラグメント |
$layout |
現在のレイアウト・レベルで定義された変数の値を取得します。 レイアウト・レベルでempNameを定義した場合、$layout.variables.empName式を使用してその値を取得します。 | 現在のレイアウト |
$chain |
アクション・チェーンで実行されているアクションの変数を参照するために使用されます。 | アクションが実行されているチェーン |
$parameters |
ページ変数はvbEnterイベントまで存在しないため、beforeEnterイベントでのみページの入力パラメータを参照してください。
|
beforeEnterイベント
|
$listeners |
コンポーネント内のapplication、フローまたはページのイベント・リスナー($listeners.onSelectionChangeなど)を参照してください。
|
フローまたはページ内 |
$event |
イベント・リスナーでイベントのペイロードのコンテンツを取得します。 カスタム・イベントのイベント・リスナーの場合、$eventにはそのイベントのペイロードが含まれます。 変数onValueChangedイベントをリスニングするイベント・リスナーの場合、$eventはプロパティname, oldValue, valueおよびdiffを持つ構造です。 「変数が変更された場合のアクション・チェーンの開始」を参照してください。
|
イベント・リスナーと変数onValueChangeリスナー
|
$initParams |
式で使用できる宣言初期化パラメータ。 初期化パラメータ(またはinitParams)は早期に評価され、変数が存在する(たとえば、サービス宣言または翻訳バンドル・パス)前に評価される式で使用できます。 initParamsは、app-flow.jsonのconfigurationブロック内に定義されます。次に例を示します: |
どこででも |
$modules |
現在のWebアプリケーションでインポートされたグローバル関数モジュールによって公開されるメソッドをコールするためのショートカット。 アクション・チェーン内のグローバル関数にアクセスするには、$modules.<module-id>.<function-name>(...)構文を使用します。たとえば、$modules.commonUtils.titleCase()または$modules.dateLocalUtils.dateToIsoString()です。ここで、titleCaseおよびdateToIsoStringは、そのWebアプリケーションのfunctions.jsonファイルに定義されている関数の名前です。 モジュールをインポートするコンテナは、$page.modules、$fragment.modulesなど、$modulesが使用可能であると想定できます。
|
ビジネス・ルール、検証ルールおよびデフォルト値、およびJavaScriptアクション・チェーンの拡張式ビルダー |
これらの変数定義は、Visual Builderの他の変数とほぼ同じものを使用できます。つまり、JS関数のパラメータとして、アクション(ifなど)などのコンポーネント属性で使用できます。
変数イベント
値が変更されると、変数はonValueChangedイベントを発行します。 (デフォルト値が変数を含む式である場合は、定数にonValueChangedイベントを追加することもできます。) たとえば、従業員の名前プロパティを変更してから従業員をリセットすると、フレームワークによって、従業員が変更されたイベントが送信され、ペイロードの一部として名前が変更されたことが示されます。
$event暗黙オブジェクトを使用して取得できます。
-
$event.oldValueは、変数の古い値を提供します。 -
$event.valueは、変数の新しい値を提供します。 -
$event.diffは複合型に使用でき、古い値と新しい値の差を提供します。
onValueChangedイベントは、値が実際に変更された場合にのみトリガーされることに注意してください。変数値を同じ値に設定すると、このイベントはトリガーされません。
変数がこのイベントを呼び出すたびに、アクション・チェーンをトリガーできます。 たとえば、ユーザーが従業員表の行をクリックすると、従業員IDが変更されるたびに従業員情報を取得するようにアクション・チェーンを設定できます。
データバインディング
変数は、主にデータを表示するためにコンポーネントにバインドされますが、これらの変数は、データがどこから導出されるか、または何に使用されているかを認識しません。 RESTコールから変数を移入するには、「RESTコールを実行するアクション」および「結果をその変数に割り当てるアクション」を使用してアクション・チェーンを組み立てます。 一般的なケースの場合、Visual Builderでは、RESTコールのペイロードと一致するようにその変数の作成をすばやく開始できるため、RESTコール・ペイロードをページにすばやくバインドできます。 通常、変数タイプはRESTペイロードの構造と一致しますが、ユースケースに一致する独自のタイプを定義してから、そのタイプを使用する変数にRESTペイロードをマッピングすることもできます。
ビルトイン変数
Visual Builderには、アプリケーション・メタデータへのアクセスを可能にするいくつかの組込み変数が用意されています。
- currentPage
-
IDやタイトルなど、現在のページのメタデータの一部にアクセスするには、
applicationオブジェクトのcurrentPage変数を使用します。 この変数は、ナビゲーション中に現在のページが変更されると自動的に更新され、現在選択されているページでナビゲーション・コンポーネントを更新するために使用できます。名前 説明 $application.currentPage.id現在のページのパス。 パスは、フロー階層内のページのロケーションを表します。 $application.currentPage.pathapplicationの現在のページのパス。 パスは、フロー階層内のページのロケーションを表します。 $application.currentPage.title現在のページのタイトル。 $flow.currentPageこのフローの現在のページのID。 - currentFlow
-
ページに
routerFlowがある場合は、$page.currentFlow変数を使用して、現在のフローのIDを取得します。 - path
-
path変数を使用して、フォルダにあるイメージなど、リソースへのパスを構築します。名前 説明 $application.pathアプリケーション・フォルダにあるリソースを取得するために必要なパス。 $flow.pathフロー・フォルダのリソースを取得するために必要なパス。 - user
-
user変数を使用して、セキュリティ・プロバイダから返される情報に基づいて、現在のユーザーに関する情報にアクセスします。名前 説明 $application.user.userIdユーザーID (文字列)。 $application.user.fullNameユーザーのフルネーム(文字列)。 $application.user.emailユーザー電子メール(文字列)。 $application.user.usernameユーザー名(文字列)。 $application.user.roles1つ以上のユーザー・ロール(文字列の配列) $application.user.roles.roleNameroleNameがこのユーザーのロールである場合は、trueを返します。$application.user.permissions1つ以上のユーザー権限(文字列の配列)。 $application.user.permissions.permNamepermNameがこのユーザーの権限である場合は、trueを返します。$application.user.isAuthenticatedユーザーが認証されている場合、 trueを返します。 - info
-
info変数を使用して、アプリケーションおよびページ・ディスクリプタに関する情報を取得します。名前 説明 $application.info.idapp-flow.jsonで定義されているアプリケーションID。$application.info.descriptionapp-flow.jsonで定義されているアプリケーションの説明。$flow.info.idflow-id-flow.jsonで定義されているフローID。$flow.info.descriptionflow-id-flow.jsonで定義されているフローの説明。$page.info.titlepage-id-page.jsonで定義されているページ・タイトル$page.info.descriptionpage-id-page.jsonで定義されているページの説明
「Oracle Visual Builder Studioページ・モデル・リファレンス」の「組込み変数」も参照してください。