ノーコードでスマホで動くアプリが作れるGoogleのAppSheetを触ってみての備忘メモです。
とりあえず作ってみたアプリの話はこちら。
行を追加した後にそのフォームを開く
Copyしてエディットを開くという標準アクションもありますが、特定の項目を変更してコピーする場合には、「add a new row to another table using values from this row」が便利です。
しかし、このアクションではデータの追加のみとなり、編集するには、手作業で追加したデータを開く必要があります。
これを1つのアクションボタンで操作できるようにする方法がありました。
まずアクションを2つ作ります。そして、その2つのアクションを連続して実行するアクションを作成します。
1つ目は行を追加するアクション。「Data: add a new row to another table using values from this row」です。
2つ目はリンクでその作った行のフォームを表示するアクションです。
1つ目は通常のアクションなのでここでは説明は割愛します。
2つ目は[Do this]で「App: go to another view within this app」を選択し、リンク先の[Target]には、数式で以下を指定します。
=LINKTOROW(maxrow("テーブル名", "_RowNumber"), "テーブル名_Form")

Targetの数式部分をクリックして数式を入力します。

これで追加したテーブルの一番新しい行を表示させます。つまり、出来上がりは1つ目のアクションで行を追加し、2つ目のアクションで最も新しい行、つまり1つ目のアクションで追加した行を開きます。
最後に、2つのアクションを連続して実行するアクションを作成します。
新しくアクションを作成し、[Do this]の項目で「Grouped: execute a sequence of actions」を選択すれば作成できます。
そして、[Actions]の項目に、1つ目と2つ目のアクションを指定すれば完成です。
画面でのアクションボタンの並び順はReorder itemsで調整
ボタンのView上での並び順を変えたいときは、Actionsの並び替えボタン(Reorder items)で調整が可能。

表示用のデータ列はvirtual columnで
ヘッダーである列とある列を組み合わせたい。などの場合にはデータのスプレッドシートに列を追加せずに、Appsheet上でだけ列を追加することができます。
データベースエディット画面の右上の+ボタンでvirtual columnが追加できます。

追加したら数式でその列の内容を定義することができます。
列と列をつなげる
[列名称] & ":" & [列名称]
日付時間列から日付だけを取り出す
DATE([日付時間の列名])
スライスしたデータのViewから元データのDetailとformへの移動
データのスライスを作成すると、自動的にスライスごとにDetailのViewとFormのViewが作成される。
スライスを使うViewを作成すると、そこからアイテムを選択すると、そのスライスのDetailのViewが開く。そして、それを編集しようとするとスライスのFormのViewが開く。
新規の行を作成するときも各スライスのFormのViewが開く。
編集するデータ自体はスライスする前の元のデータを編集することになる。
もとのデータのDetailやFormのViewで並び順や表示の有無を調整しても、スライスのDetailやFormのViewには反映されない。
そこで、元のデータのDetailとFormのViewリンクを開くアクションを作成して、それを利用することで、常に元データのDetailのView、FormのViewを開くようにする。
開くDetailのViewの統一
ネット上で参考にしたのは、こちらのリンク先。
リンク先とは少し違うやり方で対応できた。
説明上、元のデータの名前(スプレッドシートのシート名)を「MainData」とする。
- MainDataのアクションを作成する。
- NAMEは説明上、”open_detail”
- Do this は「APP:go to another view within this app」
- Targetは、「=LINKTOROW([_THISROW], “MainData_Detail”)」
- スライスを使用するViewのBehaviorのEvent Actionsを編集する。
- Row Selected のところで作成したアクション”open_detail”を選択する
これを各Viewに設定することでDetailは解決する。Detailを開いてからの編集は元データのFormのViewに飛ぶので解決。
一方で、スライスしたViewの状態で、編集ボタンや新規追加の場合は以前としてスライスしたデータ用のFormのViewが開いてしまう。
開くFormのViewの統一
Viewの各アイテムにボタン表示しておき編集するとき、Viewから新規作成するとき、との2つアクションを作る。
Viewの各アイテムにボタン表示しておき編集

- MainDataのアクションを作成する。
- NAMEは説明上、”edit_form” とする
- Do this は「APP:go to another view within this app」
- Targetは、「=LINKTOROW([_THISROW], “MainData_Form”)」
- Display nameは、「EDIT」など短くてそれっぽい名前でアイコンも標準で作成されているeditと近いものを選ぶ(同じでもよいと思うが作成中や試用中は標準のeditか追加したアクションかわからなくなるので違うものにしといたほうがよい。)
- ボタンのpositonは元からあるEditに合わせる。各Viewで元のEditは使わずに新しく作ったopen_formアクションを使うようにする。
- 各ViewのActions (各アクションボタンの表示/非表示の設定)で、作成した”edit_form” を追加して、標準のEditの位置にもっていってから、標準のEdit、addをRemove(非表示)にする。
Viewから新規作成するとき
- MainDataのアクションを作成する。
- NAMEは説明上、”add_form” とする
- Do this は「APP:go to another view within this app」
- Targetは、「=LINKTOLINK(“MainData_Form”)」
- Display nameは、「ADD」など短くてそれっぽい名前でアイコンも標準で作成されているaddと近いものを選ぶ(同じでもよいと思うが作成中や試用中は標準のeditか追加したアクションかわからなくなるので違うものにしといたほうがよい。)
- ボタンのpositonは元からあるAddに合わせる。各Viewで元のAddは使わずに新しく作ったopen_formアクションを使うようにする。
- 各ViewのActions (各アクションボタンの表示/非表示の設定)で、作成した”add_form” を追加して、標準のaddの位置にもっていってから、標準のEdit、addをRemove(非表示)する。
- ボタンの表示をViewごとで区分したい場合はアクションボタンのBihaviorで設定できる。
Only if this condition is trueで
「=IN(CONTEXT(“view”, LIST(“表示したいviewの名前”, “Viewの名前”, …))
で設定できる。LIST内に表示したいViewを記載していく。
コメント