見出し画像

AppSheetで在庫管理アプリをノーコードで作る - アクションとワークフローで入出庫履歴を登録する

カカト@ノーコード開発推し です。

まだまだAppSheetネタで行きますのでよろしくお願いします。

引き続き、AppSheetを使い在庫管理アプリを作っていきます。

前回は、在庫の登録画面を作成し、カテゴリと商品のコンボボックスを連動し、数量と商品単価で金額を自動計算する処理を実装しました。

今回は、AppSheetの Action と Workflow機能を使い、在庫を登録・変更した際に自動的に履歴情報(入出庫履歴的なもの)を別テーブルに登録する機能を作っていきたいと思います。

それでは行きましょう。

事前準備

入出庫履歴を作るにあたり、「変更前在庫数」を保持する列が必要となるので在庫テーブルに項目を追加します。

※物理列の追加ですが、AppSheet画面ではできません。元となるデータソース(Google Driveでスプレッドシートを使っている場合はそのファイル)を開き、列を追加した後、在庫テーブルの列設定より "Regenerate structure" をクリックすると追加されます

変更前在庫数の Type は Numberとしてください。

画像4

詳細画面を開き、Auto Complete の App formulaに以下の式を入力します。

[_THISROW_BEFORE].[在庫数]

画像5

はい、また新しい関数が出てきました。

[_THISROW_BEFORE] を列の前につけることで、変更前の列の値が取得できます。

詳しくは以下を参照ください。

[_THISROW_BEFORE].[在庫数] で、変更前の在庫数を取得しています。

では次に、履歴を管理するテーブルの設定をしていきます。

Data」→「Tables」より、入出庫履歴テーブルを追加します。

画像1

列の設定はこんな感じにします。

画像5

列の内容からなんとなくわかると思いますが、在庫を登録した都度、入出庫履歴テーブルに履歴登録日(実際は日時)、商品、カテゴリ、棚番号を書き込み、変更前の在庫数、入庫数、出庫数、そして変更後の在庫数として現在庫数を登録します。

入庫数、出庫数ですが、在庫が増えた場合は入庫、在庫が減った場合は出庫として編集します。

これで事前準備は終わりです。


入出庫履歴を登録するActionを作る

ここからが今回のメインテーマとなります。

Behavior」メニューより、「Action」タブをクリックし、「New Action」をクリックします。

画像3

以下で設定してください。

画像6

Action name:入出庫履歴登録アクション
For a record of this table:在庫
Do this:「Data: add a new row to another table using values from this row」
Table to add to:入出庫履歴

アクションという名のごとく、ここではAppSheetで実行される処理を作ることができます。

今回作ったのは、在庫テーブル(For a record of this table)の対象行の値を使い、入出庫履歴(Table to add to)に新規行を追加するアクション ということになります。

AppSheetでは他にも以下のアクションを作成することができます。

画像23

ここでの詳細説明は割愛しますが、例えば CSVのダウンロードやアップロード、画面遷移や他のAppSheetのアプリに移動、行の削除、ファイルを開く・・などのアクション定義が用意されています。

続けて、入出庫履歴テーブルの列と、在庫テーブル列のマッピングをします。

左に入出庫履歴テーブルの列が並んでいますので、列に応じた在庫テーブルの列を選択していきます。

なお、履歴登録日には処理した日時を入れたいので、NOW() と入力してください。

画像7

次に入庫数と出庫数ですが、入庫数には以下の式を入力します。

IF([在庫数] - [変更前在庫数] > 0, [在庫数] - [変更前在庫数], 0)

画像8

IF()関数を使い、在庫数から変更前在庫数を引いた値を条件として処理を分岐させています。

在庫数 - 変更前在庫数がゼロより大きければ、在庫数 - 変更前在庫数を入庫数としています。そうでなければゼロとしています。

ちなみにここでいう「在庫数」とは、処理した後の在庫数となります。

実際に値を入れてみると、こんな感じです。

変更前在庫数:100
在庫数:120
在庫数 - 変更前在庫数:120 - 100 = 20
入庫数:20 

続いて出庫数には以下の式を入力します。

IF([在庫数] - [変更前在庫数] < 0, ABS([在庫数] - [変更前在庫数]), 0)

画像9

ABS()関数を使うと、数値の絶対値を取得できます。

120から100に減った場合を想定し、実際に値を入れてみましょう。

変更前在庫数:120
在庫数:100
在庫数 - 変更前在庫数:100 - 120 = -20
出庫数:20  ※ABS(-20) で 20 としている 

「現在庫数」には 在庫数 を設定したら、列のマッピングは完了です。

最終的にはこんな感じとなります。

画像10

続いて、「Appearance」にある、「Prominence」を "Do not display” にします。非表示にすることで、ユーザーが手動でアクションを実行できないようにしています。

画像11

これでアクションの作成は終わりです。次に、このアクションを実行するためのトリガーを作っていきます。


Workflow Ruleを作りアクションを実行する

Workflow」タブをクリックし、「New Workflow Rule」をクリックします。

画像12

まずは、ワークフローの発火条件を設定します。

画像13

・Rule name:入出庫履歴を登録する
・Target data:在庫
・Update event:ALL_CHANGES

こうすることで、在庫テーブル行に対して登録・更新・削除 のイベント発生時全てを発火条件とすることができます。

ですが、在庫数に変わりがない場合は履歴書いても意味がないため、その場合は除外するための条件を指定します。

If this is true...」の「Condition」に、以下の式を入力します。

[在庫数] - [変更前在庫数] <> 0

画像14

これで発火条件の設定ができました。

最後に、発火時のアクションを設定します。

Do this」にある項目を以下で設定します。

画像15

・Reaction:TakeAction
・Workflow Action Name:#なんでもいいです
・Data Change Action Name:入出庫履歴登録アクションを選択

ポイントとしては、ここで先ほど作成したアクションを指定するようにしてください。

なお、アクションの実行以外にも、EmailやSMSを送ったり、Webhookでの外部サービス実行などができます。

これでワークフローの作成も完了です。SAVEしておきましょう。


テスト

では、作ったアクションとワークフローが動くか試してみましょう。

その前に、入出庫履歴が見れるようにUXより入出庫履歴のViewを追加しておきます。

画像16

では、在庫を新規登録してみましょう。

画像17

入出庫履歴を見てみましょう。

ばっちり登録されていますね!

見えにくいのでタブレットビューで広げてみます。

画像18

今度は在庫数を減らしてみます。

画像19

こちらも入出庫履歴に行が追加されました。

ちゃんと、変更前在庫数が10、そこから3つ出庫され、現在庫(変更後の在庫数)が 7 で登録されましたね。

画像20

では、削除はどうでしょうか?

画像21

入出庫履歴を見てみると・・・

画像22

3行目が削除時に登録された履歴になりますが、なんだかおかしいですね。

削除専用アクションとワークフローを別に作った方がいいかもしれませんね。

または、在庫レコードの削除はさせず、数量をゼロにすることで削除とみなす など仕様自体を検討するってのもありかもしれません。


ということで、一応アクションとワークフローを使い履歴登録はできた訳ですが、機能としては足りていません。

棚番号をA から Bに変えた場合とかを例とすると、棚Aから出庫、棚Bに入庫と2レコードが履歴として欲しいところですが、今回作ったアクションでは1レコードしかできません。

これを対応するには、変更前棚番号をテーブルに追加し、棚番号が変わったら・・というのを条件にワークフロー発火。ワークフローには2つのアクションを定義し、一つは変更前ロケからの出庫、もう一つは変更後ロケへの入庫・・といったフローにすればいけそうな気がします。

機会があれば作ってみようと思います。

次回は引き続き、アクションを使い、CSVのダウンロードとアップロードを作りたいと思います。

いいなと思ったら応援しよう!