TODOアプリを作る
TODOアプリをまじめに作ります。作業の状態、重要度、作業期日、カレンダーで期日確認、管理者画面で表示/非表示の切り替えと行削除、詳細が欲しいのでメモ書きを追加、指定した条件でメール送信する機能を考えてます。
完成画面スマホ版こんな感じ。
メインテーブルはこんな感じ。insert_dateはいらないかも・・・
メモ書き用テーブル。
■ 各画面を作る
Slicesで表示フラグがONのものだけ表示するやつを作る。数式は[visible]だけ入れればOK。
メインのビューを作り、さっき作ったSliceを設定します。2行以上表示されてもレイアウトに違和感が殆どない(と思う)Cardビューを使います。好みによって変えて下さい。
ソート、グループと集計、レイアウトを決めます。Action部分は全部Noneです。
メモリストのビューはrefにして隠します。View Optionsの説明は省略!
管理者用画面を作ります。まだ開発段階ですのでアクセスしやすい場所に表示しておきます。開発がひと段落したらPositionをmenuにしましょう。「N」と「Y」と表示されていますが、後述のグループ分けで[visible]を指定することでこうなってます。後で変えられます。
レイアウトを同じように設定し、管理者画面用に削除を追加。
・・・最初にやっておくべきでした。画面を乱発するので、現在どの画面なのかを確認できるようにします。開発中だけでも構いませんので設定推奨。
Detail画面を作っていきます。todoテーブルとmemolistテーブル連携用のバーチャルカラムをtodoテーブルに作ります。名前はmemoとしました。赤丸以外は変更不要。
=ref_rows("memolist", "todouid")
ビューを作ります。要らない情報が多い!減らします。
滅茶苦茶スッキリしました。これで連携も出来てるので、Addを押せばmemoを無尽蔵に書き込めます。管理者表示用のDetailも同様に作ります。(省略)
メモ用のDetailを作ります。また要らない情報を削ります。
滅茶苦茶スッキリ!
Form、編集画面を作ります。この辺は定型の文字を選ぶだけなので、選択肢にします。
[visible]は「N/Y」だと分かりにくいので、「非表示/表示」に変更します。
statusを選択肢から選べるようにします。「Ongoing/Stop/Finish」を用意。
priorityも選択肢から。「Low/Middle/High/Top」を用意。
その他、INITIAL VALUEにvislbeはtrue、statusはStop、priorityはLowを設定、全部必須入力にしました。選択肢が大きいので、Dropdownの方がスッキリするかもしれません。
contents部分には長い文章を入れる部分なのでLongTextに変更。改行も可。
Googleスプレッドシートのセルに入る最大の文字数が50,000とのこと。画面上でも、あまりに長い文章が入力されてしまうと見づらくなるので、ある程度の制限は必要と考えます。memolistのmemoにも同様の制限をかけましょう。
画面を作ります。管理者用画面も同様に作成します。
こんな感じで編集できる項目を追加します。管理者画面ではvisibleとinsert_dateを追加します。
memolistの編集画面も作ります。memoはLongTextに、最大文字数を500にしました。
importanceも選択肢から。「Normal/Caution/Important」を用意。INITIAL VALUEはNormal。
画面の配置。
必要なヤツだけ表示。
カレンダーを作ります。
最終日だけ分かればいいので、StartとEnd両方にdeadline_dateを指定しています。
※本アプリで全く意味が無いinsert_dateをstart_dateに変更して、カレンダーで期間表示なんてできれば、よりアプリっぽいかも!とは思いますが、やりません。
■ 少し装飾
Format rulesを追加してpriorityを色で分かるようにする。Highはオレンジ、Topは赤にしてみた。コピーすると楽。
Importanceも同様に装飾。重要書き込みが分かりやすいかと。Importantは赤、Cautionはオレンジと下線、斜体にしてみた。やはりコピーすると楽。
一覧画面でmemoの書き込み数が分かるといいなーと考えたので実装してみた。todoにバーチャルカラムvTitleを作成。memoは関数ref_rowsでmemolistのデータを引っ張ってきています。これを関数countで数えて、0だったらタイトルをそのまま表示、0以外だったらタイトル(5)の様に表示しています。
=if(count([memo])=0,[title],[title]&" (" & count([memo]) & ")")
件数を数えるには関数selectでも出来たのでメモ。ref_rows同様リストの件数を返す模様。これらはエクセルで言うところの関数COUNTIF。便利。
=count(select(memolist[todouid],[todouid]=[_thisrow].[uid]))
titleをvTitleに変更して、memoの書き込み数が一覧画面から確認できた!上記で作ったFormat rulesも変更も忘れない。管理者画面も同様。とりあえず操作画面は完成。
■ メールを送る
statusがFinishに変更された時にメールを送信したい。
AppSheetではAutomationという機能で、指定したテーブルの挿入時、更新時、削除時とかのタイミングで処理を走らせることができる!時間指定もできる模様。Automation機能のTaskでメール送信やSMS送信もできる模様。
Automation>Bots>New Botを選択。
AIさんから処理の提案をしてくれます!やりたいことに近いものがあればそれを選んでカスタムするのが楽ですが、今回は全部手作業でやります。提案は無視してCreate a custom botを選びます。
Configure eventを選択してEventを作ります。
またAIさんから提案が出ましたが、Create a custom eventを選択。提案は全部無視します。
Botの中にEventが作れました!Eventは画面右部分で編集できます。ここで編集しているEventはEventsタブを開いた所にEvent単体で表示されます。そちらで編集しても問題ないです。
todoテーブルのData Change、Updates onlyの時に処理を行うよう設定します。できたら次の処理を作ります。+Add a stepを選択。
AIの提案を無視してStepを作成したら、作成されたStep、Run a task、Branch on a conditionの順に選択します。ここでは処理の分岐を作っています。
Finishに書き換えられた時を判定する条件式を入れます。[_THISROW_BEFORE]を使うと変更前のカラムデータを参照できます。変更前の情報をどこかに保管しておかないと実現できないはずですが、どうやってるんだ?便利!入力したら分岐先に処理を追加します。
=and([_THISROW_BEFORE].[status]<>"Finish",[status]="Finish")
AIの提案の中に「メールを送る」がありました。あえて選ばずCreate new taskを選択。
Taskのデフォルトが「メールを送る」なので保存を押せば完成です。後で分からなくならないよう適切な名前を付けましょう。
テストしました。指定した条件の時だけメールも届きました!
デフォルトのメール設定ではテーブルの情報まで届いてしまう模様。メールの件名や本文をスッキリさせたいところではありますが、やりたいことはできたのでヨシ!
メールでできることは後程まとめます。
以上。