AppSheetMemo

AppSheetを使ったスマホアプリ開発メモ。画像メインなのでPC閲覧推奨。

メール内容とテンプレート

メールは件名と送り主と本文を設定できれば運用できると思っています。PDFを作成して添付ファイルにして送付なんてこともできる模様。私は試してません。

 

Email Subjectで件名、Email Bodyで本文、From Displayで送り主、PreHeaderは本文上部です。デプロイしないでテスト運用するとPreHeaderに追加されてしまう文章があるので注意。

f:id:tanaka0:20211006143547p:plain

 

メールの本文にはテンプレートを使うことができ、GoogleドキュメントかMicrosoft Wordが使えます。Createを選択するとGoogleドキュメントのテンプレートが自動作成されます。テンプレートを用意すると上記のEmail Bodyが無効になります。Viewを選択するとテンプレートが表示され、Googleドキュメントであればそのまま編集できます。自動作成されるテンプレートの場所は、Googleドライブ/appsheet/data/アプリ名/content/、です。

 

デフォルトで作成されるテンプレートはこんな感じ。テーブルの情報がダダ洩れです。

f:id:tanaka0:20211006150822p:plain

 

そのまま使うとこんな感じ。余白すごい。

f:id:tanaka0:20211006155027p:plain

 

テンプレートの余白がメール本文に反映される模様。余白は0にしましょう。

Googleドキュメント>ファイル>ページ設定

f:id:tanaka0:20211006152953p:plain

 

こんな感じに書き換えました。関数を駆使すれば他のテーブルの情報も読み出せる!

f:id:tanaka0:20211006150944p:plain

 

コメント部分、色々試したけど改行できなかった・・・苦肉の策「□」で見た目調整。ベタ書きですが表もこんな感じに出せる!

f:id:tanaka0:20211006164240p:plain     f:id:tanaka0:20211006164517p:plain

 

以上。

プッシュ通知

プッシュ通知ができる模様。スマホで確認しましたが連続通知すると圧がすごい。

f:id:tanaka0:20211005081727p:plain

 

先日まで作っていたTODOアプリのBotの処理にTaskを追加して簡易確認してみます。

f:id:tanaka0:20211005081743p:plain

 

Taskの編集画面。Send a notificationを選択し、Toにはメールアドレスを入れました。

f:id:tanaka0:20211005081750p:plain

 

ユーザカスタムしたい場合はチェックを外し、TitleとBodyに好きな文面を入力。DeepLinkは自動入力されてます。届いたプッシュ通知を選択すると指定したアプリが開く!

f:id:tanaka0:20211005081756p:plain

 

以上。

TODOアプリを作る

TODOアプリをまじめに作ります。作業の状態、重要度、作業期日、カレンダーで期日確認、管理者画面で表示/非表示の切り替えと行削除、詳細が欲しいのでメモ書きを追加、指定した条件でメール送信する機能を考えてます。

 

完成画面スマホ版こんな感じ。

f:id:tanaka0:20211004095707p:plain     f:id:tanaka0:20211004095720p:plain

 

f:id:tanaka0:20211004095730p:plain     f:id:tanaka0:20211004095740p:plain

 

メインテーブルはこんな感じ。insert_dateはいらないかも・・・

f:id:tanaka0:20211003102553p:plain

メモ書き用テーブル。

f:id:tanaka0:20211003102601p:plain

 


 

■ 各画面を作る


Slicesで表示フラグがONのものだけ表示するやつを作る。数式は[visible]だけ入れればOK。

f:id:tanaka0:20211003103956p:plain

 

メインのビューを作り、さっき作ったSliceを設定します。2行以上表示されてもレイアウトに違和感が殆どない(と思う)Cardビューを使います。好みによって変えて下さい。

f:id:tanaka0:20211003110522p:plain

 

ソート、グループと集計、レイアウトを決めます。Action部分は全部Noneです。

f:id:tanaka0:20211003111932p:plain

 

メモリストのビューはrefにして隠します。View Optionsの説明は省略!

f:id:tanaka0:20211003113648p:plain

 

管理者用画面を作ります。まだ開発段階ですのでアクセスしやすい場所に表示しておきます。開発がひと段落したらPositionをmenuにしましょう。「N」と「Y」と表示されていますが、後述のグループ分けで[visible]を指定することでこうなってます。後で変えられます。

f:id:tanaka0:20211003120524p:plain

 

レイアウトを同じように設定し、管理者画面用に削除を追加。

f:id:tanaka0:20211003121305p:plain

 

・・・最初にやっておくべきでした。画面を乱発するので、現在どの画面なのかを確認できるようにします。開発中だけでも構いませんので設定推奨。

f:id:tanaka0:20211003155338p:plain

 

Detail画面を作っていきます。todoテーブルとmemolistテーブル連携用のバーチャルカラムをtodoテーブルに作ります。名前はmemoとしました。赤丸以外は変更不要。

=ref_rows("memolist", "todouid")

f:id:tanaka0:20211003161921p:plain

 

ビューを作ります。要らない情報が多い!減らします。

f:id:tanaka0:20211003155344p:plain

 

滅茶苦茶スッキリしました。これで連携も出来てるので、Addを押せばmemoを無尽蔵に書き込めます。管理者表示用のDetailも同様に作ります。(省略)

f:id:tanaka0:20211003161853p:plain

 

メモ用のDetailを作ります。また要らない情報を削ります。

f:id:tanaka0:20211003163305p:plain

 

滅茶苦茶スッキリ!

f:id:tanaka0:20211003163746p:plain

 

Form、編集画面を作ります。この辺は定型の文字を選ぶだけなので、選択肢にします。

f:id:tanaka0:20211003164939p:plain

 

[visible]は「N/Y」だと分かりにくいので、「非表示/表示」に変更します。

f:id:tanaka0:20211003165410p:plain

 

statusを選択肢から選べるようにします。「Ongoing/Stop/Finish」を用意。

f:id:tanaka0:20211003170438p:plain

priorityも選択肢から。「Low/Middle/High/Top」を用意。

f:id:tanaka0:20211003170819p:plain

 

その他、INITIAL VALUEにvislbeはtrue、statusはStop、priorityはLowを設定、全部必須入力にしました。選択肢が大きいので、Dropdownの方がスッキリするかもしれません。

f:id:tanaka0:20211003171252p:plain

 

contents部分には長い文章を入れる部分なのでLongTextに変更。改行も可。

f:id:tanaka0:20211003174111p:plain

 

Googleスプレッドシートのセルに入る最大の文字数が50,000とのこと。画面上でも、あまりに長い文章が入力されてしまうと見づらくなるので、ある程度の制限は必要と考えます。memolistのmemoにも同様の制限をかけましょう。

f:id:tanaka0:20211003173148p:plain

 

画面を作ります。管理者用画面も同様に作成します。

f:id:tanaka0:20211003201331p:plain

 

こんな感じで編集できる項目を追加します。管理者画面ではvisibleとinsert_dateを追加します。

f:id:tanaka0:20211003201340p:plain


memolistの編集画面も作ります。memoはLongTextに、最大文字数を500にしました。

f:id:tanaka0:20211003203007p:plain

 

importanceも選択肢から。「Normal/Caution/Important」を用意。INITIAL VALUEはNormal。

f:id:tanaka0:20211003203019p:plain


画面の配置。

f:id:tanaka0:20211003204004p:plain

 

必要なヤツだけ表示。

f:id:tanaka0:20211003204315p:plain

 

カレンダーを作ります。

f:id:tanaka0:20211004155205p:plain

 

最終日だけ分かればいいので、StartとEnd両方にdeadline_dateを指定しています。

f:id:tanaka0:20211004155631p:plain

※本アプリで全く意味が無いinsert_dateをstart_dateに変更して、カレンダーで期間表示なんてできれば、よりアプリっぽいかも!とは思いますが、やりません。

 


 

■ 少し装飾


Format rulesを追加してpriorityを色で分かるようにする。Highはオレンジ、Topは赤にしてみた。コピーすると楽。

f:id:tanaka0:20211003210502p:plain

 

Importanceも同様に装飾。重要書き込みが分かりやすいかと。Importantは赤、Cautionはオレンジと下線、斜体にしてみた。やはりコピーすると楽。

f:id:tanaka0:20211003211142p:plain


一覧画面でmemoの書き込み数が分かるといいなーと考えたので実装してみた。todoにバーチャルカラムvTitleを作成。memoは関数ref_rowsでmemolistのデータを引っ張ってきています。これを関数countで数えて、0だったらタイトルをそのまま表示、0以外だったらタイトル(5)の様に表示しています。

=if(count([memo])=0,[title],[title]&" (" & count([memo]) & ")")

f:id:tanaka0:20211003212548p:plain

件数を数えるには関数selectでも出来たのでメモ。ref_rows同様リストの件数を返す模様。これらはエクセルで言うところの関数COUNTIF。便利。
=count(select(memolist[todouid],[todouid]=[_thisrow].[uid]))

titleをvTitleに変更して、memoの書き込み数が一覧画面から確認できた!上記で作ったFormat rulesも変更も忘れない。管理者画面も同様。とりあえず操作画面は完成。

f:id:tanaka0:20211003214049p:plain

 



■ メールを送る

 

statusがFinishに変更された時にメールを送信したい。

AppSheetではAutomationという機能で、指定したテーブルの挿入時、更新時、削除時とかのタイミングで処理を走らせることができる!時間指定もできる模様。Automation機能のTaskでメール送信やSMS送信もできる模様。

 

Automation>Bots>New Botを選択。

f:id:tanaka0:20211004135707p:plain

 

AIさんから処理の提案をしてくれます!やりたいことに近いものがあればそれを選んでカスタムするのが楽ですが、今回は全部手作業でやります。提案は無視してCreate a custom botを選びます。

f:id:tanaka0:20211004140820p:plain

 

Configure eventを選択してEventを作ります。

f:id:tanaka0:20211004140830p:plain

 

またAIさんから提案が出ましたが、Create a custom eventを選択。提案は全部無視します。

f:id:tanaka0:20211004140839p:plain

 

Botの中にEventが作れました!Eventは画面右部分で編集できます。ここで編集しているEventはEventsタブを開いた所にEvent単体で表示されます。そちらで編集しても問題ないです。

todoテーブルのData Change、Updates onlyの時に処理を行うよう設定します。できたら次の処理を作ります。+Add a stepを選択。

f:id:tanaka0:20211004143354p:plain

 

AIの提案を無視してStepを作成したら、作成されたStep、Run a task、Branch on a conditionの順に選択します。ここでは処理の分岐を作っています。

f:id:tanaka0:20211004143857p:plain


Finishに書き換えられた時を判定する条件式を入れます。[_THISROW_BEFORE]を使うと変更前のカラムデータを参照できます。変更前の情報をどこかに保管しておかないと実現できないはずですが、どうやってるんだ?便利!入力したら分岐先に処理を追加します。

=and([_THISROW_BEFORE].[status]<>"Finish",[status]="Finish")

f:id:tanaka0:20211004144807p:plain

 

AIの提案の中に「メールを送る」がありました。あえて選ばずCreate new taskを選択。

f:id:tanaka0:20211004145704p:plain

 

Taskのデフォルトが「メールを送る」なので保存を押せば完成です。後で分からなくならないよう適切な名前を付けましょう。

f:id:tanaka0:20211004150951p:plain

 

テストしました。指定した条件の時だけメールも届きました!

f:id:tanaka0:20211004152127p:plain

デフォルトのメール設定ではテーブルの情報まで届いてしまう模様。メールの件名や本文をスッキリさせたいところではありますが、やりたいことはできたのでヨシ!

メールでできることは後程まとめます。


以上。

カラム認識範囲がおかしい場合の対処

TODOアプリを作ってます。優先順位リストを作って、ユーザに選択させたい!

f:id:tanaka0:20210929092140p:plain

 

テーブルをアプリに追加して、prioritylistテーブルからリストを取得、選択できるようにします!この画面で、もうちょっと下にスクロールしてButtonsを選びます。

f:id:tanaka0:20210929092736p:plain

 

できましt・・・選択肢が足りません。上のstatus選択肢は問題ないのに。

f:id:tanaka0:20210929095022p:plain

 

テーブル構成を見てみると正しく読み込めていません。1行目ではなく4行目のMiddleがカラム名と認識されている模様。

f:id:tanaka0:20210929092149p:plain

Regenerate Structurreで再構成したりMiddleをpriorityに変更したりしても状況は変わりませんでした。

 

対処法は、この部分を太文字にする!これだけ!その後Regenerate Structurreするかテーブル削除して再取り込み!

f:id:tanaka0:20210929094040p:plain

 

再読み込み後の画面です。カラム名priorityが認識されてます!

f:id:tanaka0:20210929095313p:plain

Relatedなんたらというカラムが追加されています。他のテーブルとの連携用に追加されたカラムと思われます。削除しても復活します!見せたくないならShowをOffにするくらいしか対策は思いつきません。

 

選択肢が全部でました!

f:id:tanaka0:20210929095322p:plain

 

以上。

パーセントと進捗表示(Percent、Progress)

Percent型のカラムをCardViewのimageに指定すると、こんな表示ができる模様。これ以外では数字表示になる模様。活躍できる場所がピンポイント。

f:id:tanaka0:20210925163042p:plain     f:id:tanaka0:20210925163052p:plain

 

Progress型のカラムはこんな表示になる模様。ただしこの表示をできるのはGroup by指定ができる場所と、TableView、Detail、Formに限る。Progress型で出来ることは少ない。

f:id:tanaka0:20210925163101p:plain     f:id:tanaka0:20210925163110p:plain

 

DetailとFormはこんな感じ。ProgressはButtons表示、PercentはRange表示にしました。

f:id:tanaka0:20210925170200p:plain     f:id:tanaka0:20210925170208p:plain

 

データシートはこんな感じ。

f:id:tanaka0:20210925165701p:plain

 


 

■ Percent型の入力

Range表示がオススメ。50%を初期値にしたいならINITIAL VALUEに=0.5を入力。

f:id:tanaka0:20210925172027p:plain

 


 

■ Progress型について

Empty、Quarter、Half、Three Quarter、Fullの5種類で全部です。このテキストパラメータ5種しか受け付けません。25%とか50とか1/2とか指定しても反映されません。5種類しかないので選択肢に最初から盛り込んでしまいましょう。視覚的に分かりやすいButtons表示がオススメ。半分を初期値にしたいならINITIAL VALUEに=Halfを入力。

f:id:tanaka0:20210925174053p:plain

 

Stack表示とDropdown表示も参考まで。

f:id:tanaka0:20210925175919p:plain     f:id:tanaka0:20210925175930p:plain     f:id:tanaka0:20210925175939p:plain

 


 

■ Progressの配色

Form画面でFullは背景色とかぶる!円が見えない!ちょっと気になる。

f:id:tanaka0:20210925181052p:plain

 

Format rulesでこのカラムだけ色指定してしまえば良いのでは!?やってみる。

f:id:tanaka0:20210925192825p:plain

 

Highright colorを設定すると小さい○が追加される模様。EmptyとFullが同じ・・・?

f:id:tanaka0:20210925192839p:plain

 

Fullもまぜてあげて下さい・・・

f:id:tanaka0:20210925194126p:plain

 

さて、Fullだけ個別に色設定してみてどうなるかを試します。ダメだったら仕様だと思って諦めるしかありません。

 

FullとFull以外のFormat rulesを2個つくる。

=[Prog]<>"Full"(Full以外)

※数式は分かりやすい方が良い。ifで書くと長い・・・間違いが起こりそう。

f:id:tanaka0:20210925195826p:plain


=[Prog]="Full"(Fullだけ)

できた!

f:id:tanaka0:20210925200439p:plain

 

Fullの配色設定。上記のFull以外の配色パターンと合わせるには、赤と赤にすれば良い!

f:id:tanaka0:20210925200713p:plain

 

Formの画面。矛盾無し!センスも無し!

f:id:tanaka0:20210925202926p:plain

 

しかし!TableViewでProgressカラムにふたつの〇が表示されると、列幅が〇ひとつ分であるため「〇...」という表示になります。上記の配色に合わせてText sizeの倍率を上げて「〇〇」が入る列幅を確保しようとしてみましたが、小さいほうの〇しかサイズアップしなくて残念バランスになる模様。上記までの説明で使っている画像は、その都度列幅を広げて表示してましたゴメンナサイ(小声)

 

Format rulesでHighright colorを指定しなければ何も問題なかった。

f:id:tanaka0:20210926202921p:plain

 

BrandのPrimary colorとは近いけど違う色にしてるので〇が見える!完全解決!

f:id:tanaka0:20210926202930p:plain

 

以上。

DetailビューとFormビュー

オリジナルのDetailビューとFormビューを作りたい。

 

デフォルトのDetailビュー。スクロールしていくとこんな感じ。カラムたくさん。

f:id:tanaka0:20210924140348p:plain     f:id:tanaka0:20210924140354p:plain

 

オリジナルDetailビュー。表示する項目と順序と表示位置を変えることができた!

f:id:tanaka0:20210924142721p:plain

 

デフォルトのFormビュー。スクロールしていくとこんな感じ。長い。

f:id:tanaka0:20210924140407p:plain     f:id:tanaka0:20210924140414p:plain    f:id:tanaka0:20210924140420p:plain

 

オリジナルFormビュー。編集できる項目と順序と表示位置を変えることができた!

f:id:tanaka0:20210924142837p:plain

 


 

■ オリジナルのDetailビューを作る

UX>Brand>Header & Footer>Show view name in headerをOnにする。作業後は戻してもよい。

f:id:tanaka0:20210924142206p:plain

 

システムビューと名前を区別する。PositionをRef以外にするとシステムビューとの切り替えができる!

f:id:tanaka0:20210924141607p:plain

 

Use Card LayoutをOnにすると画面上部をCardビューのような画面にすることができます。設定方法は省略。

f:id:tanaka0:20210924144830p:plain

 

Quick edit columnsにカラムを設定するとDetail画面なのに編集することができます!設定しないカラムはそのまま表示するだけです。Column orderはカラムの表示と表示順を設定できます!全カラムを表示する必要はないのです。Sortはご自由に。

f:id:tanaka0:20210924150419p:plain


Display modeは後述します。カラム名とデータの表示方法を設定です。Slideshow modeはこの画面で横にスワイプして隣のデータを表示させるかどうかの設定です。Max. nested rowsは関数REF_ROWSなどを使ってリスト表示をした時の最大行数です。

f:id:tanaka0:20210924151412p:plain

 

Display mode。Normalはこんな感じ。Centeredは全部中央寄せ。

f:id:tanaka0:20210924152742p:plain     f:id:tanaka0:20210924152749p:plain

No headingsはカラム名が非表示、Side-by-sideは横に対表示。

f:id:tanaka0:20210924152756p:plain     f:id:tanaka0:20210924152804p:plain

 

Use Card LayoutがOffの場合、設定項目が少し変わります。

Main imageに設定した画像がトップに表示されます。画像の表示パターンは3種あり、後述。Header columnsに設定したカラムはトップ中央に表示されます。

f:id:tanaka0:20210924154547p:plain


Main imageの表示パターンをImage styleで設定。Backgroundは背面に表示される。Fill、Fitは後述。

f:id:tanaka0:20210924162528p:plain

Image styleのFillとFit。

f:id:tanaka0:20210924163233p:plain     f:id:tanaka0:20210924163258p:plain

 

上記を駆使して以下の画面が完成。Card Layoutで画像だけ設定し、Column orderでnoteだけ表示、Quick edit columnsもnoteだけ設定、Display modeでSide-by-side。

f:id:tanaka0:20210924165852p:plain

 


 

■ オリジナルのFormビューを作る

 

設定項目はDetailと似てます。だいたい同じ!名前だけはしっかりつける。

f:id:tanaka0:20210924172056p:plain

 

Row keyとPage styleは勉強中。Form styleとColumn orderはDetailと同様にカラム名とデータの表示位置と表示順設定。必須データは必ず表示しましょう。idは非表示のキーにしてあったのですが、設定を強制されました。非表示なので画面には出ない。

f:id:tanaka0:20210924172106p:plain

 

Save/cancel positionは保存ボタンの上下位置設定。Finish viewはSave後に表示するビュー設定。Auto saveとAuto re-openは勉強中。

f:id:tanaka0:20210924173534p:plain

 

以上。

Onboardingビュー

こんな感じ。BACKとNEXTを選択すると次のデータが表示されるシンプル設計。

f:id:tanaka0:20210923175811p:plain

 

■ つくる

f:id:tanaka0:20210923180302p:plain

 

各項目を当てはめます。Noneをにすると該当項目が非表示になり上に詰められます。Finish viewは最後のデータに到達したときに次に表示するビューを設定します。**Automatic**になってますが、どこが表示されるか分かりません。明示的に何を表示するか設定しましょう。

f:id:tanaka0:20210923180010p:plain

 

以上。