最近Glide Appsを使って在庫管理アプリを作っています。
はじめ、商品マスタの名称をキーにしていましたが、名称を変更した場合に紐づけした履歴が表示されなくなってしまいました。
マスタデータに対してRowIDを発行してキーにすることで対応できたので、備忘録として残します。
やりたいこと
商品名を変更した際に、リレーションした明細もそのまま表示できるようにしたい。
今の問題点は、リレーションのキーを商品名にしているため、
親であるマスタの商品名を変更しても子である明細の外部キーは変わらないため、履歴がついてこない。
RowIDの発行
Table画面で新規列を追加します。
Column TypeでRow IDを選択します。
Row IDを作成し、Doneをクリック。
すると、自動的に各マスタにRow IDが割り振られます。
これは、新規で明細を追加しても自動的に反映されます。
履歴データとリレーション
明細シート(在庫購入履歴)に対して、外部キーであるRow IDを格納する項目を追加しました。
これは、Row ID自体を発行するのではなく、明細入力時に親であるマスタのRow IDを格納するため、ただのテキスト項目です。
Glideの画面ではなく、スプレッドシート側で追加します。
続いて、在庫一覧シートでリレーションを行います。
①新規列を追加し、Relationを選択します。
②キーとなる列にRow IDを選択し、関連付けるテーブルと列を指定します。
③今回の場合は、明細シートの商品IDを連携します。
④また、明細は複数でるのでMatch multipleにチェックを入れます。
これでテーブル側の設定は完了です。
続いて、レイアウト画面です。
レイアウト作成
在庫一覧のタブ内で、Inline Listとして明細シートを設定します。
Form Buttonをクリックし、中身のフォームを設定します。
中身の設定としては、Text Entryの商品IDの初期値として、
商品マスタ(在庫一覧)の商品IDを設定します。
それにより、明細に対して自動的に親の商品IDが設定されることになります。
このまま明細を投稿することで、自動的に紐づけが行われます。
投稿結果
右上から実際に投稿してみると、明細が表示されました。
また、カレー粉という名称をカレールーに変更してみます。
その場合でも、履歴の明細はちゃんと表示されたままになりました。
これでやりたいことは完了ですね。
まとめ
・キーにはRow IDを使用する
・子データに親データのRow IDを外部キーとして格納する項目を作る
・Row IDでリレーションを行う
ということになりました。
実際にこれを示しているブログやサイトが見つからなかったので備忘録です。
コメント