くますきIT日記

IT系資格、競技プログラミングの情報を書いていきます。

Budibase④実装に関するメモ。

 

 

1.本記事について

Budibaseでのアプリ開発をある程度実施して、把握した仕様や注意点を記録する。

※量が多いので、随時追記していく。

 

2.Navigation

 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を利用したテーブル項目を作成すると、

 コンポーネント標準のページネーションを利用できない。

 この場合、頑張ってページネーション処理を自作する必要がある。

 

github.com

 

②データのCRUD画面

 queryを利用したテーブル項目を作成すると、

 CRUD画面を自作する必要がある。

 (Field groupコンポーネントを使うと少しだけ楽になる)

 

docs.budibase.com

 

 

 

①参照するDBに必要に発生

 

次回:xxx