見出し画像

AppSheetで在庫管理アプリをノーコードで作る - 関数で重複チェックを実装しよう

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

今回から、AppSheetで爆速ノーコードアプリ開発 ~基本編~ (マガジンにまとめました)では説明し切れなかった機能を使い、AppSheetで在庫管理アプリをノーコードで作っていきます。

今回は、データ登録時の重複チェックについての投稿となります。

画面を作ったり装飾付けたりといった、視覚的に楽しめる内容ではないのですが、システム開発では必ずといっていいほど実装しなくてはいけない機能ですので、戻るボタンは押さずに、最後までお読みいただくことをお勧めします^^


今回作るアプリ

前回までは検温結果を記録するアプリでしたが、今回は超シンプルな在庫管理アプリを作ってみます。

超シンプル!と言えども、以下の機能くらいは実装してみます。

・カテゴリを指定した商品の登録機能
・商品、棚番号(ロケーション)、数量を入力して入出庫処理
・商品毎に単価を設定し、在庫の金額を計算し表示
・入出庫の履歴登録と照会
・在庫と入出庫履歴のCSVダウンロード機能
  など(後は思いつきで・・)

「一緒に作ってみたい!」というアツい方のために、Excelデータを用意しましたのでご自由にダウンロードしてお使いください。

まずはこのデータを使い、アプリ開発環境を作ります。

作り方わからないよ って方は、以下のnoteを参照ください。

アプリ名は何でもOKですが、こちらは「simple inventory management」という名前で作りましたのでそれっぽいので。

データソースを選ぶと開発環境が作成されます。

画像2

まずは、「カテゴリ」テーブルの重複チェックから実装してみましょう。


キー項目にして重複を防ぐ方法

カテゴリテーブルは、_RowNumber と カテゴリの2つだけで構成されています。

画像2

AppSheetが自動的にカテゴリ列の 「KEY?」 にチェックを付けてくれているので、この時点で同じカテゴリは登録できないようになっています。

実際に試してみましょう。

メニューよりカテゴリをクリックし、(+)をクリックします。

画像3

カテゴリに、"家電" と入力し、SAVEします。

画像4

右上のボタンを押して、データを同期(Excelシートに反映)させます。

画像5

もう一度、(+)を押し、カテゴリに "家電" を入力しSAVEしてみます。

すると、"There is already a row with the key '家電'" と表示され、登録できないよう制御されます。

画像6

このように、列のキー項目として設定するだけで自動的に重複防止のチェックが働きます。

では次に、「キー項目ではないけど重複チェックをする方法」 を解説します。


関数を使って重複を防ぐ方法

まずは商品テーブルを追加します。

「Data」メニューの「Tables」タブをクリックし、「Add a table for "商品"」をクリックします。

画像7

商品テーブルが追加されるので、「View columns」をクリックし列を表示します。

初期設定では以下のようになっており、ID 列がキー項目として設定されています。

画像8

ID列の値は登録時に自動で生成されますので、必ず一意になりますが、このままだと同じ商品(商品列が同じ値)のレコードが登録できてしまいますよね。

本来、こういったマスタを作る場合、商品列をキーとして構築すればよいのですが、今回は列はこのままとして、商品をキー設定せず、AppSheetの関数を使い重複チェックを実装してみましょう

ちなみに、以下のAppSheet フォーラムのページを参考にさせてもらいました。

ガチ英語ページですのでChromeの方は右クリック→日本語に翻訳し読んでみてください。


商品列の左にある鉛筆マークをクリックします。

画像9

Data Validity」をクリックし、「Valid If」の数式テキストをクリックします。

画像10

"Valid If" を使うことで、その列に入力された値が有効かどうか をAppSheetの関数式を使いチェックすることができます。

Expression Assistant が表示されるので、以下をコピペします。

ISBLANK(
  FILTER(
    "商品",
    AND(
      ISNOTBLANK([商品]),
      ([商品] = [_THISROW].[商品])
    )
  )
  - LIST([_THISROW])
)

画像11

いきなり長い式でよくわからないと思いますので、1つずつ説明すると、、、

1.AND() 関数で、以下2つの条件を満たす行を Filter() 関数で商品テーブルよりリストとして取得します。

 1)商品テーブルの"商品"列が空白でない
 2)商品テーブルの"商品"列が、現在の行の商品の値と一致

2.リストとして収集されたレコードより、自身のレコードを除外します(- LIST([_THISROW]) の部分です。これが無いとデータの更新ができないので)

反省:"商品"テーブルと、"商品"列 で同じ名前にしてしまったので説明がわかりづらくなってしまいました・・申し訳ありません。

Filter、AND、_THISROW など色々出てきましたが、以下のページを起点に各関数の説明ページが見れますので、参考にどうぞ。

説明を見ただけではわからないものは、実際に使ってみると理解できたりしますので、まずは写経するなりしてとりあえず使ってみることをお勧めします。

設定が終わりましたら一旦SAVEして、商品のUXを作成しましょう。

View typeは何でもOKですので、商品テーブルを表示するViewを追加します。

画像12

「画面の作成方法なんて知らんわ!もっと説明しろや」という方は、以下参照ください。

適当に画面を作ったら、商品を登録します。

画像13

データを同期した後、もう一度新規登録画面を開き、同じ商品を入力してみましょう。

画像14

はい、重複チェックによりエラーになりました。

"This entry is invalid" ってメッセージは不親切ですので、メッセージを変えてみましょう。

商品列の Valid If の下に、「Invalid value Error」という項目があるので、そこにエラー時に表示するメッセージが設定できます。

画像15

画像16

これで重複チェックは実装できましたので、他の項目を設定します。

画像17

単価の詳細設定では、「Decimal digits」を削除、「Show thousands separator」にチェック、「Currency symbol」 に 円マークを設定します。

画像18

これでSAVEし、以下のようなフォームとして表示されればOKです。

画像19


お疲れ様でした。

いきなりの関数でよくわからん(・・・説明が悪いのは謝ります)ってなるかもしれませんが、使っていくうちに慣れていきますので、恐れず前に進みましょう!

次回は、今回作った「カテゴリ」と「商品」を使い、”在庫登録画面で選択したカテゴリと一致した商品をドロップダウンに表示する”、いわゆる依存型ドロップダウンリスト的なものを作りたいと思います。

次回もお楽しみに!

この記事が気に入ったらサポートをしてみませんか?