AppSheet | execute an action on a set of rows でテーブルをまたぐ処理

folder_openAppSheet

AppSheet (アップシート)には、ボタンクリックで処理を実行したり、作業を自動化するアクション(Action)という機能があります。アクションには大きく分けて、

  1. UI Navigations:Viewを切り替える
  2. Data Changes:データの一部を変更(追加、更新、削除)する
  3. External Communications:情報を外部サービスに送信する(プッシュ通知やSMS)

の3つがあります。
このブログでは、Data Changesの「Data: set the values of some columns in this row」を何度か解説してきました。

今回は、Data Changesの「Data: execute an action on a set of rows」について解説します。

1. AppSheet の「execute an action on a set of rows」は設定が難解

Data Changesには使用頻度が高い「Data: execute an action on a set of rows」アクションが用意されています。

「Data: execute an action on a set of rows」には、テーブルをまたいだ処理ができるという使い道があります。
複雑でなければ、GAS(Google Apps Script)や外部サービスに頼らず、AppSheetだけで処理が実行できるようになります。

ところが、「Data: execute an action on a set of rows」は設定が難解で使いこなすのが難しいアクションではないでしょうか?
公式ドキュメントの解説もそれほど詳しくなく、ユースケースも少ないので分かりにくいと思います。

この記事では、在庫管理アプリのユースケースを使って「Data: execute an action on a set of rows」の設定について解説してみます。
使用する在庫管理アプリは、このブログで解説している在庫管理アプリ(7回シリーズ)です。
ブログを読んでアプリを自作していない場合は、メルマガ購読者特典のサンプルアプリをダウンロードしても大丈夫です。

2. 在庫管理アプリでテーブルをまたいだ処理をやってみる

この記事では、在庫管理アプリのユースケースでテーブルをまたいだ処理をやってみましょう。

在庫管理アプリ(第3回)では、virtual columnを使用して商品の在庫量を計算、表示しました。
今回のケースでは、以下の手順でデータソース(Googleスプレッドシート)に在庫量を書き込むようにしてみます。

  1. 「入出庫履歴」テーブルに入庫、出庫、棚卸などの履歴を追加する
  2. 追加した履歴の商品と同じ商品を「商品」テーブルで探す
  3. 「商品」テーブルの在庫量を保存する列(在庫量_atcual)の値を更新する

データソースに列を追加したら、AppSheetでRegenerateする

まずは、データソース(Googleスプレッドシート)に在庫量を保存する列を追加します。
在庫管理アプリをエディタで開いて、エディタ左側メニュー「Data」をクリックします。
メインパネル右上の「View data source」をクリックします。

データソースのGoogleスプレッドシートを開いたら、「商品」ワークシートをクリックして開きます。
在庫量を保存する列をひとつ追加します。
「在庫量」という名前のvirtual columnがあるので、重複しないようにしましょう。

actual column(virtual columnの反対)に保存するので「在庫量_actual」という名前の列を追加しました。

データソースを変更したので、AppSheet側の列設定(スキーマ)を更新する必要があります。

Dataナビゲーションで「商品」テーブルを選択します。
メインパネル右上の「Regenerate schema」アイコンをクリックします。

「Regenerate」をクリックします。
データソースを変更したときには、AppSheet側で必ず「Regenerate schema」をしておきましょう。

「在庫量_actual」列が「商品」テーブルに追加されます。
Typeを「Number」にしておきましょう。

ビューを設定する

追加した「在庫量_actual」列をビュー(View:画面)で表示するように設定します。

エディタ右側のプレビューでタブメニュー「商品」を選択します。
商品マスタをどれかひとつクリックして表示します。

プレビュー画面下にある「View: 商品_detail」のリンクをクリックします。

メインパネルに「商品_Detail」ビュー設定パネルが表示されます。

Column orderに「Add」ボタンで「在庫量_actual」列を追加します。
後で比較するので、「在庫量」列の下に配置します。

「CSVエクスポート」ビューも確認してみましょう。
プレビュー左上の三本線アイコンをクリックします。

「CSVエクスポート」メニューをクリックします。

表の右端に「在庫量_actual」列が表示されていれば問題ありません。
追加されていない場合は、スライスで追加しておきます。

3. アクションを設定する

「set the values of some columns in this row」を用意する

アクションを設定します。

「execute an action on a set of rows」のアクションを作成する前に、別のアクションを一つ用意しておきます。
「execute an action on a set of rows」は単独では動きません。
必ず、もうひとつ別のアクションと組み合わせる必要があります。

エディタ左側メニュー「Actions」をクリックします。
Actionsナビゲーションの右にある「+」(Add Action)ボタンをクリックします。

「Create a new action」ボタンをクリックします。

メインパネルに新規アクション設定パネルが表示されます。
はじめに、在庫量を計算して「在庫量_actual」列に値を保存するアクションを作成します。

  • Action name:在庫量_actualに在庫量を保存
  • For a record of this table:商品
  • Do this:Data: set the values of some columns in this row

Set these columnsは「在庫量_actual」を選択します。
「=」の入力フィールドをクリックして、Expression Assistantを開きます。

以下の式をコピペします。

この式は、

で解説した、「Related 入出庫履歴s」を使用して在庫量を計算する式です。
Expression Assistantにコピペして、「Save」します。

アクションボタンを表示しないので、Prominenceを「Do not display」にします。

「execute an action on a set of rows」を設定する

本題の「execute an action on a set of rows」アクションを作成しましょう。

Actionsナビゲーションの右にある「+」(Add Action)ボタンをクリックします。

「Create a new action」ボタンをクリックします。

メインパネルに新規アクション設定パネルが表示されます。
入出庫履歴に追加した商品と同じ商品を「商品」テーブルで探す(フィルタリングする)アクションを作成します。

  • Action name:入出庫した商品をフィルタリング
  • For a record of this table:入出庫履歴
  • Do this:Data: execute an action on a set of rows
  • Reference Table:商品

「execute an action on a set of rows」の設定項目とその意味については以下を参考にしてください。

Action name 一意のアクション名を付けます。
For a record of this table アクションのトリガになるテーブル:
「入出庫履歴」テーブルにレコード(行)を追加したときにアクションを実行するので、「入出庫履歴」がトリガになります。
Do this 実行するアクションの種類です。
Referenced Table アクションを実行するテーブル:
入出庫した商品と同じ商品を「商品」テーブル内でフィルタリングするので、「商品」テーブルが実行するテーブルになります。
Referenced Rows アクションを実行するレコード(行)をフィルタリングする条件式を設定します。
Referenced Action Referenced Rowsに対して行うアクションを設定します。

Referenced Rowsには式を設定します。
入力フィールドをクリックして、Expression Assistantを開きます。

以下の式をコピペします。

 

Referenced Rowsには、アクションを実行するレコード(行)をフィルタリングする条件式を設定します。
ここでは、入出庫した商品と同じ商品を「商品」テーブル内でフィルタリングします。

「入出庫履歴」テーブルの「商品」列はデータ型(Type)を「Ref」にしているので、「商品テーブル」のKEY(JANコード)がひとつ含まれています。
LIST関数を使って「KEY(JANコード)をひとつだけ含むLIST」をフィルタリングの条件式にしています。

Expression Assistantにコピペして、「Save」します。

Referenced Actionは、先ほど作成した「在庫量_actualに在庫量を保存」アクションを選択します。

アクションボタンは表示しないので、Prominenceを「Do not display」にします。

イベントアクション(Event Actions)を設定する

最後に、イベントアクション(Event Actions)を設定します。
「入出庫履歴」テーブルに履歴を追加、または更新したときにアクションを実行するようにします。

エディタ右側のプレビューで、タブメニュー「入出庫履歴」をクリックして選択します。
「+」(Add)ボタンをクリックします。

プレビュー画面下にある「View: 入出庫履歴_Form」のリンクをクリックします。

メインパネルに「入出庫履歴_Form」ビューの設定パネルが表示されます。

Behaviorタブをクリックして開きます。

Event Actionsに、Form Savedという設定項目があります。
「フォーム画面で保存した時(Form Saved)」なので、データを追加または更新した時に実行するアクションを設定します。

さきほど追加した「入出庫した商品をフィルタリング」アクションを選択します。

エディタ右上の「Save」をクリックして保存すれば、設定は完了です。

4. AppSheet アプリを操作して確認する

正しく設定できているか確認してみましょう。

エディタ右側のプレビュー画面で、タブメニュー「入出庫履歴」をクリックして選択します。
「+」(Add)ボタンをクリックします。

「商品」をどれか一つ選択します(PC上ではスキャンができないので、クリックして選択します)。
操作内容で「入庫」を選択して、「入庫数量」を入力します。
「Save」をクリックして、入庫履歴を追加します。

タブメニュー「商品」を選択して、いま入出庫履歴を追加した商品をクリックして表示します。

「在庫量」列(virtual column)の値と「在庫量_actual」列の値が同じなら成功です。

「CSVエクスポート」メニューでも確認してみます。
こちらも「在庫量」列の値と「在庫量_actual」列の値が同じなら成功です。

データソース(Googleスプレッドシート)を確認してみましょう。
「在庫量_actual」列に「在庫量」列(virtual column)と同じ値が書き込まれていることが分かります。

同じように、出庫、棚卸を入出庫履歴から追加して「在庫量」列の値と「在庫量_actual」列の値が同じになるか確認してみてください。

以上、「execute an action on a set of rows」を使ってテーブルをまたいだ処理をやってみました。
在庫量の計算は、virtual columnを使用した方が簡単にできますが、アクションを工夫すればデータソース(Googleスプレッドシート)に在庫量の値を書き込めるようになります。

Share Me!

前の投稿
AppSheetでタスク管理アプリ(第7回)アクションで列の値を更新する
次の投稿
AppSheetの料金 – 無料と有料の違い、ライセンスの数え方

関連記事

メニュー