さて、SAP AppGyverについての記事第2回です。
SAP AppGyverで作成したフロントエンドのUIアプリケーションを実行する際に最初に表示されるページは上部NAVIGATIONのところで設定するのが一般的です。
設定&動作としては
・ナビゲーションメニューを有効にしている場合
この場合はリストの一番上に設定したページがアプリケーション実行時に表示されます。
・ナビゲーションメニューを無効にしている場合
この場合はプロパティEnabledをNoに設定している際に表示されるPagesプロパティで指定しているページが表示されます。
ページが開かれるとページのロジックの各種イベントとして設定されたロジックが動作することになります。
こちらに解説があります。
ドキュメントにイベントの実行順番の記述が無いので気になったので調べてみました。
ロジックはこのような形でテキスト型の変数にそのイベント名を追加する単純なものです。
実行結果としては
このようにPage Mountedが先に実行され、その後Page Focusedが実行されます。
(この2つのイベントの実行順番が問題になることはそうはないと思いますが、豆知識としてまで。)
どのイベントがどのような状態で実行されるかは把握したほうが良いでしょう。
ここにGlobal canvasのApp launchedイベントも追加してみるとこのようになります。
(ただし、何回か実行するとApp Launched イベントより先にPage mountedイベントが実行されているパターンもありました。)
注意すべきポイントですが、SAP AppGyverのロジックというのは並列で実行されます。上記の動きの場合ですが、
最初に開くページのPage mountedイベントはApp launchedイベントの完了を待ってから実行されているわけではありません。
App Launchedイベントのロジックを下記のようにDelayを挟むように変更して実行してみるとわかりやすいでしょう。
最初のページを表示して(と同時にPage mountedイベントの内容を実行して)Delayに設定した経過するとAop Launchedが表示されました。実際のアプリのロジックで考えた場合、
App launchedイベントに記述したロジックがPage mountedイベントの実行より先に完了しているとは限らないということになります。例えばApp launcedイベントで何か通信を行い、その結果をもって最初のページのPage mountedイベントを実行したいという場合、通信結果が送られてくる前に最初のページのPage mountedイベントが実行されてしまうということが起こりえます。非同期処理の環境ですので処理が完了していると期待して動作するロジックを設計するのは推奨できません。
これを回避するための方法として考えられるのは
・Page mountedイベントの先頭にDelayを挟む
非常に原始的な方法ですが、AppGyverドキュメントにあるいくつかのサンプルはこの手法をとっています。Delayの時間内に処理が完了することを前提としますのでDelayは十分な時間をとることが重要です。
また、以下のようなロジックを組んで、App Launchedイベントで処理完了を示すフラグを参照して続行するという方法もあるでしょう。
処理の順番のみで言うと、Trigger Eventを使用する方法もあります。
これはまずイベント受け取り側を先に設定します。
イベントを送る側では
プロパティでイベントを送信するページのFired From "Trigger Event"を指定します。
これを利用して狙った処理順でロジックを実行することも可能です。
いかがでしょうか?
ロジックを設計・開発するときで処理が2つのロジックにまたがる場合は注意が必要です。
SAP AppGyverのロジック開発を楽しんでみてください。