AppSheetで在庫管理アプリをノーコードで作る - 削除処理や項目の変更可否を制御する
カカト@ノーコード開発推し です。
AppSheetでノーコードで在庫管理アプリを作る シリーズ。
前回はCSVファイルのダウンロードとインポート機能の実装方法を解説しましたが、内容をその前に戻し、以下の投稿にて実装した "在庫登録機能" を改善したいと思います。
在庫の登録・変更・削除を行った際、入出庫履歴の情報を自動的に作成されるようにしたものの、
1)在庫のレコードを削除した際、履歴がいい感じに登録されない
2)商品や棚番号の変更をした際、履歴がいい感じに登録されない
といった問題があります。
ということで、今回はこの問題を解決すべく、AppSheet の テーブルおよび列レベルでの制御機能を使いたいと思います。
在庫テーブルを削除できないようにする
まず、削除 の問題ですが、削除された際のアクションとワークフローを作る というやり方もありですが、今回はあえて 「ユーザーが画面から在庫レコードの削除ができないようにする」方法で対処していきます。
現状は、以下のように画面からゴミ箱ボタンを押すことで在庫レコードを削除できてしまいます。
この削除機能自体を消してみます。
「Data」 → 「Tables」 より 在庫 を選択し展開します。
「Are updates allowed?」の項目で、"Delete" をクリックし、非選択の状態にします。
すると・・・
ゴミ箱アイコンが消えて、削除できないようになりました。
これで在庫レコードの削除の制御は完了です。簡単ですね。
Editable_If で 項目の変更ができないようにする
次に、在庫レコードの変更時、商品や棚番号が変更できてしまう問題の対応ですが、変更時はカテゴリ・商品・棚番号の変更はできないように項目自体を表示オンリーに制御してみましょう。
在庫の削除制御でやったように、「Are updates allowed?」で Update を非活性にしてしまうと、在庫数も変更ができないためそのやり方は採用できません。
ここは項目レベルでの制御が必要となりますが、これは AppSheetの 「Editable?」の設定で関数を使うことで制御することができます。
まずはカテゴリから。
在庫テーブルより、"カテゴリ" 列の詳細を開き、「Update Behavior」を展開し「Editable?」の右にあるフラスコのアイコンをクリックします。
Expression Assistant が立ち上がるので、試しに以下の式を入力してみましょう。
ISBLANK([カテゴリ])
「カテゴリがBLANK(空白)だったら、編集可能」という意味になります。
SAVE して、テストしてみます。
登録済みの在庫レコードを開いてみます。
カテゴリに値が入っている場合は変更はできなくなりました。
次に、新規登録してみましょう。
SAVEする前にも関わらず、カテゴリを選択した後、カテゴリが変更できなくなってしまいました。
ということでこれではダメですね。
「カテゴリに値が入っていたら・・」という条件だとよろしくないので、「新規登録だったら・・・」という条件にしてみましょう。
式を、以下に変更します。
NOT(IN[ID], 在庫[ID])
「(登録対象の)ID列の値が、在庫テーブルのIDに含まれているか」というチェックを行い、その結果が TRUE / FALSE(真偽)で返されます。
TRUEの場合(=ID列の値が在庫テーブルにない)、新規のレコードとなりますので、カテゴリの登録・変更が可能
FALSEの場合(=ID列の値が在庫テーブルにある)、在庫レコードの変更となりますので、カテゴリの登録・変更は不可
となります。
なお、NOT() を使わない場合、上記の判定は逆になります。
SAVEして、テストしてみましょう。
新規登録時、カテゴリの変更ができるようになりました。
在庫レコードの更新時は、カテゴリの変更できないようになりました。
カテゴリ列で動作確認できましたので、同じ式を、商品、棚番号の列にも設定しましょう。
そうすると、在庫レコードの変更時、在庫数だけ変更できるようになります。
ついでに、在庫数にマイナス値が入れられてしまうため、在庫数の「Minimum value」をゼロにしておきます。
これでオッケーです。
今回、「レコードの削除ができない」 と、「変更時はカテゴリ~棚番号の項目が変更できない」よう制御を追加しましたが、これにより以下の課題が発生しました。
1)在庫数をゼロにすることで削除とみなす・・とした場合、在庫ゼロのレコードが残り続けてしまう
2)登録した在庫の、カテゴリ、商品、棚番号が変更できない
1)に対する解決策としては、在庫数ぜロのレコードは一覧に表示しないよう、Sliceを作る、定期的に在庫数ぜロのレコードを消すようなワークフローを作るなどが考えられます。
2)は、画面を別に作ることで対処可能です。
コードを書かない開発でも、こういった課題の解決は考える必要があります(それがシステム開発の醍醐味だったり)。
ということで、何回かに渡って説明してきた在庫管理アプリ作成ですが、今回で一旦終わりとします。
上述の課題以外にも、在庫テーブルのキー列を「ID」値にしたため、同じカテゴリ・商品・棚番号の在庫が複数登録できる(なんかクリティカルな・・)とかがあり、完成品とは言えない代物です 😰
機能追加や修正したら公開しようかと思いますので、その際はnoteでお知らせします!
この記事が気に入ったらサポートをしてみませんか?