AppSheetでフォームを遷移するLINKTOFORM関数について。前回は読み込んだバーコードをもとに、条件分岐の方法についてご説明しました。LINKTOFORM関数については前回の記事も合わせてご覧ください。
AppSheetで食料品の在庫管理アプリを作る。バーコードで読み取ったアイテムが既知かどうか確認し、目的のフォームにディープリンクを使って遷移させてみます。
条件分岐のIF式、
if(in([Barcode],Products[Barcode]),条件が真の場合, linktoform("Products_Form","Barcode",[Barcode]))
のうち、「判定が真であった場合のフォームの遷移」について、今回もLINKTOFORM関数を活用して、テーブルのデータを別のテーブルに引き渡していきます。
AppSheetのUIが変更になりました
2022年10月よりAppSheetのUIが新しくなっていますが、このブログ記事のUIは更新前のものになっています。AppSheetではUIを新旧切り替えすることが可能です。記事の画像のUIと実際のUIが異なる場合はUIの切り替えを試してみてください。切り替えは以下のボタンを押すとできます。
他のテーブルのデータを参照する
スキャンしたバーコードがすでに商品登録されていた場合、在庫情報の登録画面に進むことになりますが、その際、バーコードに紐ついている商品名や商品分類は在庫情報入力フォームに自動表示させたいところです。そうでないと、毎回商品情報を入力することになり意味がないですね。
LINKTOFORM関数では、遷移先のフォームと関連するテーブルにデータを渡すことができることは前回説明していますが、ここで問題となるのは、遷移元のテーブル(New Inventory)にはバーコード情報しかないこと。商品情報はProductsテーブルにありますので、この情報を呼び出す必要があります。
ここでは、SELECT関数を使うことにしました。SELECT関数は、テーブルの指定の列で、条件に該当する行の値を取得してくれます。複数行が条件に該当する場合はリストとして値を返してくれますが、ここではバーコードは重複なしのユニークですので、一つの値が返ってくることになります。
SELECT(指定のテーブル[指定の列], 対象の行の条件)
ということで、バーコード番号をもとに商品情報(Productsテーブル)の商品名(Name列)を返すために、次のような記述としました。
select(Products[Name],([Barcode]=[_THISROW].[Barcode])
ここで、[_THISROW]は、現在のテーブル(New Inventory)の現在の行、を指しています。これによりProductsテーブルのBarcode列と区別がつくようになっています。Productsテーブルにおいて、Barcode列が現在のテーブルのBarcode列の値と一致する行のName列の値を返す、という記述となっています。なんだかまどろっこしいですが・・・
いずれにせよ、SELECT関数の戻り値をLINKTOFORM関数で商品情報として在庫情報テーブルに渡してやれば、新規在庫の商品情報は自動的に表示・登録される、というわけです。
商品名・メーカー名・分類・商品写真も遷移先フォームに渡す
この調子で、商品名・メーカー名・商品分類に商品写真も遷移先フォームに渡すことにします。全部入れるとこのようになります。
linktoform("Inventory List_Form","Barcode",[Barcode],"Name",select(Products[Name],([Barcode]=[_THISROW].[Barcode])),"Manufacturer",select(Products[Manufacturer],([Barcode]=[_THISROW].[Barcode])),"Category",select(Products[Category],([Barcode]=[_THISROW].[Barcode])),"Image",select(Products[Image],([Barcode]=[_THISROW].[Barcode])))
ちゃんと合っているのか怪しくても、Expression Assistantがチェックしてくれますので、IF式に組み込みます。式の全体はこのようになりました。
if(in([Barcode],Products[Barcode]),linktoform("Inventory List_Form","Barcode",[Barcode],"Name",select(Products[Name],([Barcode]=[_THISROW].[Barcode])),"Manufacturer",select(Products[Manufacturer],([Barcode]=[_THISROW].[Barcode])),"Category",select(Products[Category],([Barcode]=[_THISROW].[Barcode])),"Image",select(Products[Image],([Barcode]=[_THISROW].[Barcode]))), linktoform("Products_Form","Barcode",[Barcode]))
これを、Destination列の数式として設定します。
これで条件分岐の準備は整いました。残るは、バーコードの読み取り画面と、読み取った際に他のフォームに遷移させるアクションを設定するのみです。
次の「他のフォームに遷移する」に続く・・・
シリーズ目次
素人がノーコードで在庫管理アプリを簡単に作る・・・実際に作ってみるとどうなるのか?AppSheetを使って食料品の在庫管理アプリを作ってみました。バーコードの読み取り、入庫、出庫の動きをアプリで作りながら、ポイントや気づきを中心に触れてみました。素人ですので、書いてあるよりも良い方法もあるかもしれませんが、AppSheetからアプリを使い始めるまでの流れは一通り説明しています。実際の開発時間は、夕食後の時間を使って一週間程度です。さらに続編として、入出庫履歴の記録と在庫データの表示も追加しています。
在庫管理アプリ構築編
その2:AppSheetの導入とテーブルの設定
その3:アプリの表示をカスタマイズする
その4:数式と関数のフィルターでスライスを作ってデータを抽出する
その5:データを抽出、そのバーコードありますか?
その6:数式で分岐を設定する
その7:LINKTOFORM関数を使ってデータも引き渡し
その8:他のフォームに遷移する
その9:データを自動消去する
その10:デプロイしてみる
その11:おわりに
0 件のコメント:
コメントを投稿