今回は、AppSheetでアプリからデータベースを参照するときにコントロールするのが大事な、キー(Key)と、行番号(_RowNumber)について触れていきたいと思います。
キー(Key)とは何か?
AppSheetでは、テーブルの各行を識別するために、テーブルの列の一つ(もしくは複数)をキーとして管理します。どの項目をキーに割り当てるかは任意ですが、キーに指定された列は他の行との重複が許されなくなります。同じデータが違う行にあると、どの行かAppSheetが判定できなくなるからですかね。
キーは、ワークフローやアクションを設定、実行する際に非常に重要になります。キーがどの行に対する判定や操作か特定するからです。そして、キーは各テーブルに最低一つ必要です。
どの列をKeyにするかは、Columnsタブで対象テーブルを表示させ、KEY?欄にチェックするだけです。例えば、以下のような感じですが例が良くないですね。「Key」という列ではなく、「Unique ID」という列にキーが設定されています。
キーの種類
AppSheetのヘルプセンターでは、3種類のキーがあると説明しています。自然キー、システム自動生成キーと行番号キーです。
AppSheet Help Center - What is a key?
Natural Key(自然キー)
テーブルのデータをキーとして取り扱うもので、一般的なキーの設定といえます。データはユーザーが作成したものをそのまま使いますので、データが重複するリスクがある列はキーに設定するべきではありません。在庫管理アプリでは、例えば「Barcode」列は、同じ商品を幾度も入庫する可能性があるので、キーに設定するべきではないといえます。
なお、キーはスプレッドシートの数式で設定することはできません。数式では再計算した結果違う値になってしまい重複する可能性があるからです。また、スプレッドシート側で計算すると、オフライン時に連動することができません。
System Generated Key(システム生成キー)
システムにより自動生成されるキーです。連番キーと乱数キーがあります。
連番キーは番号が自動的に一つずつ増えていくキーで、例えば請求書番号のようなものが挙げられます。ただし、現行のAppSheetシステムでは、複数ユーザーでアプリを使用する場合には連番キーの生成はできません。同時に複数ユーザーがデータを作ってしまう可能性があるからのようです。一応、MAX関数を使えばできないことはない、と説明されています。
MAX (注文テーブル[請求書番号])+1
のような数式となります。
乱数キーは、乱数関数で重複しない値を自動的に生成するものです。乱数関数はUNIQUEIDとRANDBETWEENの2つがあります。
UNIQUEID関数は、16進数で8桁の乱数を自動生成します。列の書式は「Text」になります。
RANDBETWEEN関数は、あらかじめ指定した上限と下限の数値の間で、数値を自動生成する擬似乱数関数です。
いずれも、ユーザー数やオフライン環境などに影響することなく、値を作ることができますので、自然キーとしない場合は、こうした関数で作ったシステム生成キーを使うことになります。
Row Number Keys(行番号キー)
スプレッドシートの行番号をそのままキーとして扱うものです。AppSheetでスプレッドシートを読み込むとき、AppSheetがキーに適当な列がないと判断した場合、テーブルの一列目に「_RowNumber」列が自動生成されます。しかし、AppSheetは行番号キーの使用を推奨していません。スプレッドシートでの行の追加や削除によるデータの変化と連携できないからです。
「_RowNumber」列にキーを設定すると、AppSheetは警告メッセージを出すようになります。
行番号をキーとして指定しても、大きな問題があるとは限りません。それゆえ、エラーではなく警告になっています。しかし、ワークフローやアクションなど、テーブル間の操作を行うようなことになると、行番号キーを原因としたエラーや想定しない挙動が発生することになります。
実行時エラーが発生した時、行番号キーを設定していることが原因とされることがあります。こうしたときには、改めて他の項目をキーとして設定することになりますが、他の項目もキーとして相応しくない場合もあり、どの項目をキーとするか頭を悩ますことになります。
【AppSheetで在庫管理】トラブル時にアプリの実行時エラーを確認するAudit History Logの使い方
AppSheetでアプリを作っていてもうまくいかない時があります。そんな時エラー箇所を特定するべく、アプリの動作履歴を確認する機能のAudit History Logをご紹介します。
自動生成キーのすすめ
AppSheetアプリ作成においては、自動生成キーをあらかじめ各テーブルに設定することをお勧めします。ワークフローなど、AppSheetの魅力的かつ複雑な機能を使おうとすると、キーの設定有無が期待通りの動きにつながることがあるからです。当サイトのアプリでは、各テーブルに「Unique ID」列を作り、UNIQUEID関数でキーの値を発行しています。
後から作ると、テーブルに既にデータが記録されており、これらの各行に重複しないキーデータを用意しなければならないので手間です。
設定の仕方は、キー用の列を作り、「KEY?」にチェックを入れ、「INITIAL VALUE」欄に「UNIQUEID()」と入れます。これにより、テーブルに新しい行が作成されるたびに、自動生成キーが乱数で生成されます。
何かと自動で設定されることが多いAppSheetですが、このような準備をあらかじめやっておくと、アプリ構築もよりスムーズになります。
よろしければ、以下の各記事もどうぞ!
シリーズ目次
素人がノーコードで在庫管理アプリを簡単に作る・・・実際に作ってみるとどうなるのか?AppSheetを使って食料品の在庫管理アプリを作ってみました。バーコードの読み取り、入庫、出庫の動きをアプリで作りながら、ポイントや気づきを中心に触れてみました。素人ですので、書いてあるよりも良い方法もあるかもしれませんが、AppSheetからアプリを使い始めるまでの流れは一通り説明しています。実際の開発時間は、夕食後の時間を使って一週間程度です。さらに続編として、入出庫履歴の記録と在庫データの表示も追加しています。
在庫管理アプリ構築編
その2:AppSheetの導入とテーブルの設定
その3:アプリの表示をカスタマイズする
その4:数式と関数のフィルターでスライスを作ってデータを抽出する
その5:データを抽出、そのバーコードありますか?
その6:数式で分岐を設定する
その7:LINKTOFORM関数を使ってデータも引き渡し
その8:他のフォームに遷移する
その9:データを自動消去する
その10:デプロイしてみる
その11:おわりに
0 件のコメント:
コメントを投稿