Budibase④実装に関するメモ。
- 1.本記事について
- 2.Navigation
- 3.URL variables
- 4.Plugin
- 5.Action
- 6.参照するDBの制約
- 7.Data Providerにテーブルでなくqueryを使用する場合の制約
1.本記事について
Budibaseでのアプリ開発をある程度実施して、把握した仕様や注意点を記録する。
※量が多いので、随時追記していく。
2.Navigation
各ページへのリンクを表示する機能。
リンクはURLで設定する。URL variablesも固定値なら設定可能。
②備考
ーーーーーーーーーーーーーーーー
便利だが、できないことも多い。
以下を行うの場合、自分で独自のNavigationを組み込むしかない。
・リンクを階層で表示する。
・URLやURL variablesを動的にする。
・User roles以外で表示、非表示を制御する。
練習として、階層型リンクを、開閉できるアコーディオンメニューで作ってみた。
その際は、以下プラグインを使用した。
3.URL variables
①URL variablesとは?
いわゆるGETパラメータに近い。
ページ遷移時に、変数を渡すことができる。
②備考
ーーーーーーーーーーーーーーーー
型はすべて文字列になってしまう。
「/home/:aa」 という設定で「aa = integerの1」としても、
型変換しないと文字列として扱われる。配列等も同様。
文字列以外を渡す場合は、受け取り後に型変換して保持する必要がある。
同様に「/home/null」としても「nullという文字列」が渡される。
ーーーーーーーーーーーーーーーー
ページにURL variablesを設定している場合、
「URL variables」の数まで一致させないと遷移できない。
遷移できない場合、エラーも何もなく、ホーム画面に戻される。
※もしかするとF12開発者ツールではエラーが表示されるのか?
なお、URL variablesは空白は認識されない。
例:「/home/:aa」に遷移したい場合、
「/home/あ」 では遷移してくれるが、
「/home/」 では遷移してくれない。(ホーム画面に戻される)
ーーーーーーーーーーーーーーーー
4.Plugin
①Pluginとは?
無料プランは10個まで可能)。
以下で、どんなプラグインがあるか確認できる。
5.Action
①Actionとは?
ボタンクリックや値を更新した際にキックできる処理。
実施したい処理や、渡す値を指定して使用できる。
②備考
ーーーーーーーーーーーーーーーー
「execute query」という処理で、BudiBaseに登録したqueryを実行できるが、
データをselectするqueryを実行した場合、
後続のActionで実行結果を流用できる。(ここですごく動作を拡張できる余地がある)
ただ、後続のActionで実行結果を使用する場合、
「execute query」の順番が変わると、再設定が必要になるので、そこそこ手間。
ーーーーーーーーーーーーーーーー
★重要★
Actionはあくまでもサーバベースで動作する。(とドキュメントにも記載あり)
そのため、1つの動作に以下のような2アクションを設定しても動作しない。
ーーーーー
①フォームの値を更新
②「①」をフィルタ条件に使用するDP(DateProvider)をリフレッシュ
ーーーーー
→ 結果、①は動作するが②は動作しない。(更新前の値でフィルタされる)
なお、同じボタンをもう一度クリックすると、想定通りの②が動作する。
(1回目のクリックで①の値が更新されているため)
→ 上記のような動作を実施したい場合、
ダブルクリックさせるアクションにすれば問題ないと思われる・・。
(1回目のクリックで①の値を更新、2回目のクリックでDBを更新するイメージ)
ただ、ユーザの手間は少し増える。
ちなみに、以下のような処理は1クリックで動作する。
ーーーーー
①query実行(最新の値をサーバサイドで保持した状態)
②フォームの値を「①」の結果で書き換える
ーーーーー
→ただ、結局②の値を使用する場合、ダブルクリック的な実装が必要となる。
6.参照するDBの制約
①参照するDBに必要に発生する制約
テーブルは、必ず単一列の主キーを持つ必要がある。複合主キーは不可。
もし、該当テーブルに単一列の主キーがなければ、
「ALTER TABLE dummy ADD COLUMN id bigserial;」みたいな
SQLでキーを作成する必要があり、非常に影響が大きい。
※なお、Actionでデータを保存(Save Row)するとき、以下の仕様を順守する必要もある。
・Insert時:「_id」列に空白文字を渡す。(nullでもよいかもしれない)
・Update時:「_id」列に単一列の主キー列の値を渡す。
※BudibaseDBでテーブルを作成する場合、
「_id」という一行一位の連番を持つ列が作成される。
用する場合、ダブルクリック的な実装が必要となる。
7.Data Providerにテーブルでなくqueryを使用する場合の制約
ここが、そこそこ影響が大きい。
①Tableコンポーネントの挙動。
queryを利用したテーブル項目を作成すると、
コンポーネント標準のページネーションを利用できない。
この場合、頑張ってページネーション処理を自作する必要がある。
②データのCRUD画面
queryを利用したテーブル項目を作成すると、
CRUD画面を自作する必要がある。
(Field groupコンポーネントを使うと少しだけ楽になる)
①参照するDBに必要に発生
次回:xxx