見出し画像

AppSheetで在庫管理アプリをノーコードで作る - 削除処理や項目の変更可否を制御する

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

AppSheetでノーコードで在庫管理アプリを作る シリーズ。

前回はCSVファイルのダウンロードとインポート機能の実装方法を解説しましたが、内容をその前に戻し、以下の投稿にて実装した "在庫登録機能" を改善したいと思います。

在庫の登録・変更・削除を行った際、入出庫履歴の情報を自動的に作成されるようにしたものの、

1)在庫のレコードを削除した際、履歴がいい感じに登録されない
2)商品や棚番号の変更をした際、履歴がいい感じに登録されない

といった問題があります。

ということで、今回はこの問題を解決すべく、AppSheet の テーブルおよび列レベルでの制御機能を使いたいと思います。


在庫テーブルを削除できないようにする

まず、削除 の問題ですが、削除された際のアクションとワークフローを作る というやり方もありですが、今回はあえて 「ユーザーが画面から在庫レコードの削除ができないようにする」方法で対処していきます。

現状は、以下のように画面からゴミ箱ボタンを押すことで在庫レコードを削除できてしまいます。

画像1

この削除機能自体を消してみます。

Data」 → 「Tables」 より 在庫 を選択し展開します。

Are updates allowed?」の項目で、"Delete" をクリックし、非選択の状態にします。

画像2

すると・・・

画像3

ゴミ箱アイコンが消えて、削除できないようになりました。

これで在庫レコードの削除の制御は完了です。簡単ですね。


Editable_If で 項目の変更ができないようにする

次に、在庫レコードの変更時、商品や棚番号が変更できてしまう問題の対応ですが、変更時はカテゴリ・商品・棚番号の変更はできないように項目自体を表示オンリーに制御してみましょう。

画像4

在庫の削除制御でやったように、「Are updates allowed?」で Update を非活性にしてしまうと、在庫数も変更ができないためそのやり方は採用できません。

ここは項目レベルでの制御が必要となりますが、これは AppSheetの 「Editable?」の設定で関数を使うことで制御することができます。

まずはカテゴリから。

在庫テーブルより、"カテゴリ" 列の詳細を開き、「Update Behavior」を展開し「Editable?」の右にあるフラスコのアイコンをクリックします。

画像5

Expression Assistant が立ち上がるので、試しに以下の式を入力してみましょう。

ISBLANK([カテゴリ])

カテゴリがBLANK(空白)だったら、編集可能」という意味になります。

SAVE して、テストしてみます。

登録済みの在庫レコードを開いてみます。

画像6

カテゴリに値が入っている場合は変更はできなくなりました。

次に、新規登録してみましょう。

画像7

SAVEする前にも関わらず、カテゴリを選択した後、カテゴリが変更できなくなってしまいました。

ということでこれではダメですね。

「カテゴリに値が入っていたら・・」という条件だとよろしくないので、「新規登録だったら・・・」という条件にしてみましょう。

式を、以下に変更します。

NOT(IN[ID], 在庫[ID])

画像8

(登録対象の)ID列の値が、在庫テーブルのIDに含まれているか」というチェックを行い、その結果が TRUE / FALSE(真偽)で返されます。

TRUEの場合(=ID列の値が在庫テーブルにない)、新規のレコードとなりますので、カテゴリの登録・変更が可能

FALSEの場合(=ID列の値が在庫テーブルにある)、在庫レコードの変更となりますので、カテゴリの登録・変更は不可

となります。

なお、NOT() を使わない場合、上記の判定は逆になります。

SAVEして、テストしてみましょう。

新規登録時、カテゴリの変更ができるようになりました。

画像9

在庫レコードの更新時は、カテゴリの変更できないようになりました。

画像10

カテゴリ列で動作確認できましたので、同じ式を、商品、棚番号の列にも設定しましょう。

そうすると、在庫レコードの変更時、在庫数だけ変更できるようになります。

画像11

ついでに、在庫数にマイナス値が入れられてしまうため、在庫数の「Minimum value」をゼロにしておきます。

画像12

これでオッケーです。


今回、「レコードの削除ができない」 と、「変更時はカテゴリ~棚番号の項目が変更できない」よう制御を追加しましたが、これにより以下の課題が発生しました。

1)在庫数をゼロにすることで削除とみなす・・とした場合、在庫ゼロのレコードが残り続けてしまう

2)登録した在庫の、カテゴリ、商品、棚番号が変更できない

1)に対する解決策としては、在庫数ぜロのレコードは一覧に表示しないよう、Sliceを作る、定期的に在庫数ぜロのレコードを消すようなワークフローを作るなどが考えられます。

2)は、画面を別に作ることで対処可能です。

コードを書かない開発でも、こういった課題の解決は考える必要があります(それがシステム開発の醍醐味だったり)。


ということで、何回かに渡って説明してきた在庫管理アプリ作成ですが、今回で一旦終わりとします。

上述の課題以外にも、在庫テーブルのキー列を「ID」値にしたため、同じカテゴリ・商品・棚番号の在庫が複数登録できる(なんかクリティカルな・・)とかがあり、完成品とは言えない代物です 😰

機能追加や修正したら公開しようかと思いますので、その際はnoteでお知らせします!

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