書籍管理アプリをAppSheetで作る - バージョン1.1
初めてAppSheetでの開発にトライするにあたり、記録しながら開発している。
今までのスクラップ (2つ)
次はメルカリに出すものをピックアップできるよう改修するつもりだったが、一つ課題が増えた。
書誌情報がない場合にどうするか
書誌情報の取得に Google Books API を使って実装し、50冊余り登録した。うち、9冊のデータが見つからなかった。手作業でネットを検索して埋めるにはキツい数だ。別のAPI(OpenBD)を利用させてもらうことにした。
GAS側
アーキテクチャを再掲する。
この図はこの問題を解決した後に書いたため、すでにOpenBDの呼び出しが入っている。GASの書誌情報関数の内容を、GoogleBooksAPIで取得できなかった場合にはOpenBDのAPIを呼び出して返す実装にした。
AppSheet側
もう一度バーコードをスキャンして登録しなおせばアプリの改修は必要ない。だが、書誌情報のなかった本を探してもう一度バーコードを読ませるなど面倒きわまりない。
書誌情報がなかった場合のGoogleSheetsの当該レコードに、ISBNの列だけは埋まっている。再度スキャンする必要はない。書誌情報を再取得するためのUIを置き、GASの書誌情報取得関数を呼び出して列を埋め直すことにした。
【実装手順】
- Action(イベントを発生させる要素)にReloadを新規作成し、適当な列を適当な値で埋める定義をする。こうすることで行更新イベントを発生させる
- View(画面UI定義)で、一覧画面の行の右スワイプと、詳細画面のボタンにActionを配置する
- Bot(イベント発生をトリガにロジックを動かす)を1つ新規作成し、行更新イベントが発生したらGAS関数を呼び出して列を埋める、という定義をする
Reload Actionには「tite列を"Reloading..."
という文字列にする」と定義した。
Botには「更新イベントが発生したら」を書いたあと、「行の登録イベントのプロセスと同じだな」と思ったので、登録のほうのBotのリンク(再利用可能スイッチ)をONにして、それを呼び出す定義をした。
これだけで無事動いた。動く様子↓
AppSheet側は簡単といえば簡単だが、引数を渡したり、列に埋めるための定義がマウスオペレーションありの単純作業でちょっとつらかった。こういう単純作業は普段はcopilotがやってくれるのに慣れてしまっている。