AppSheet小ネタ(4)

AppSheetで、今表示しているテーブルとは別なテーブルにデータを書き込みたいってこと、ありませんか?
何がしたいのか?
私がしたかったのは、Referenceがあるテーブルデータを詳細表示しているときに、「REFでどんどん飛んで行ったあとで、一気に元の一覧に戻りたかった」というものです。
しかも、そのテーブルデータを一覧表示している画面が、切り口を変えて複数あるので、単純に一覧画面に戻れなくて困っていました。
そのため
- 予め、適当なテーブルに「戻り先」のようなカラムを用意
- テーブル表示されている一覧画面で、詳細表示するデータをタップされたら、「戻り先」に現在のCONTEXT("View")を保存
- いろいろ飛んで行って、最終的に戻りたくなったら、「戻る」ボタンをタップ
- 「戻り先」に保存されている一覧画面に戻る
ということをしたかったわけです。
解決策
AppSheetで「一覧ビューでのタップ」をきっかけに、別テーブル(テーブルB)へのデータ書き込みと詳細ビューへの遷移を同時に行うには、「Grouped Action(グループ化されたアクション)」を作成し、それを一覧ビューの EventActions に設定します。
- テーブルBを更新するアクションを作成
まず、テーブルB側の値を書き換えるアクションを作ります。
For a record of this table: テーブルB
Do this: Data: set the values of some columns in this row
Set these columns: 更新したい列と値を指定 - テーブルAから「テーブルBのアクション」を呼び出すアクションを作成
テーブルAをタップした時に、テーブルBのアクションを実行させます。
For a record of this table: テーブルA
Do this: Data: execute an action on a set of rows
Referenced Table: テーブルB
Referenced Rows: ここで更新したいテーブルBの行を特定します。
例: LIST("テーブルBのキー") (特定の1行の場合)
例: FILTER("テーブルB", [ステータス]="未完了") (条件に合う行すべて)
Referenced Action: 手順1で作成したアクションを選択 - 詳細ビューへ遷移するアクションを作成
次に、本来の動作である詳細ビューへの遷移を定義します。
Action name: 任意(例: Go to Detail )
For a record of this table: テーブルA
Do this: App: go to another view within this app
Target: LINKTOROW([ID], "テーブルA_Detail")
※ [ID] はテーブルAのキー列名、"テーブルA_Detail" は遷移先の詳細ビューの名前に置き換えてください。 - アクションをグループ化する
上記2つのアクションを順番に実行するアクションを作成します。
Action name: 任意(例: Tap Action )
For a record of this table: テーブルA
Do this: Grouped: execute a sequence of actions
Actions:
Add to Table B (手順1のアクション)
Go to Detail (手順2のアクション) - 一覧ビューにアクションを割り当てる
最後に、一覧ビューをタップした時にこのグループアクションが動くように設定します。
Views から対象の「テーブルAの一覧ビュー」を選択します。
Behavior セクションにある Event Actions の項目を探します。
Row Selected のプルダウンから、手順3で作成した Tap Action を選択して保存します。
これで、一覧でデータをタップした瞬間に、バックグラウンドでテーブルBへデータが書き込まれ、そのまま詳細画面が表示されるようになります。
まとめ
単独のActionではできないことでも、いくつかステップをまとめるとできるようになることもあります。
処理に困ったら、一度に行うのではなく、ステップに分けて考えるといいアイデアが浮かぶかもしれません。

