![見出し画像](https://assets.st-note.com/production/uploads/images/87529968/rectangle_large_type_2_ff8707e76c5dc56e17fb3ea2c8b2b68a.png?width=1200)
【Click_NoCode】外部DBから読み込んでいるデータを再読み込みする方法
(なぜこれを書いたか?)
NoCodeのClickでアプリを作っています。APIを使ってスプレッドシートからデータを読み込んでいます。スプレッドシートのデータをClickから更新しているのですがデータがなかなか変わりません。おかしいと思ってスプレッドシートを見るとデータは変更されていました。
データが変更になってもClickのカスタムリストに表示するのに非常に時間がかかるんです。これでは使い物にならない!と思ってデータをすぐClickのリストに反映させる方法を考えました。いろいろやった結果、ページを切り替えて元のページに戻ると再読み込み(reload)がされてデータが強制的にリストに反映されることが分かりました。
最初、ページの切り替えは手動でやっていたのですが、これでは面倒なので自動でやろうというのが今回のお題です。
1.変更してもAPIからのデータが反映されない
Clickを使っていて何が困るかというとAdaloと比べた場合、使える機能が圧倒的に不足しているんですね。そういう場合は嘆いていても仕方が無いので外部APIに接続して機能不足を補っています。
APIを通じて外部データベースからClickにデータを持って来る場合、何故かデータの変更にやたら時間がかかるんです。データの更新でも削除でも。スプレッドシートのデータは既に変更されているのにそれをClickに読み込むと反映されるのにえらく時間がかかります。(数分単位)場合によっては変更されないこともあります。
せっかくAPIを使っているのにこれではまずいと思い、データを変更したときにすぐにClickに反映する方法が無いかずっと考えていました。結果から言うと、ページの切り替えをして、また元のページに戻るとデータの再読み込みが強制的に行われ、変更した外部データがすぐ反映されます。
(例)
~データの一括変更例~
簡単なデータベースの例で説明します。下図のように会員が10人いて、それぞれがTRUE/FALSEの2つの値を持っているとします。
![](https://assets.st-note.com/img/1663977355463-mQIvYBh0mU.png)
3人の会員がFALSEの状態でこれをボタンを押すことで一括更新(FALSE→TRUE)する場合を考えます。
しかしClickの標準の機能では一括更新は出来ません。スプレッドシートAPIのPUT/PATCHの機能で一度に状態をUpdateします。すると以下のように画面が変わります。
![](https://assets.st-note.com/img/1663977773026-K3U1qPxwGm.png)
一括更新ができるスプレッドシートAPIの機能は素晴らしいですね。ただ、これも最初から出来たわけでなく、上述したようにスプレッドシートのデータが変更されてもリストになかなか反映されないんです。これの対策を説明します。
2.ページの切り替えで再読み込みを行う
ページを切り替えるとデータが再読み込みされることが分かったのでダミーのページを用意してここに一時的に遷移し、また戻ってくるという設定を行いました。
![](https://assets.st-note.com/img/1663978037055-vdvenwCC5W.png?width=1200)
(やり方)
ホーム画面のボタンには以下のClickFlowを設定しました。
①外部データの更新(カスタムClickFlowで設定します)
②ダミーの画面に遷移する
ダミー画面に遷移したら、ホームにまた自動で戻ってくる設定をします。
(やり方)
①ダミー画面を選択
・・・ダミー画面左上のDummyという文字をクリックし、画面を選択状態にします。(青い枠で囲まれます。)
②ClickFlowで「ページ移動(ホームへ)」を設定
![](https://assets.st-note.com/img/1663978247809-e3O84xYkPO.png?width=1200)
このような設定をすることでボタンを押すとスプレッドシートのデータが更新され、次に行われるページの切り替えにより更新データがリストに反映されます。
当初はClickに「データの再読み込み」というボタンでもあるのでは、と思って探しましたが、結局無かったです。APIを使ってデータの反映が遅い時はダミーページを作って画面の切り替えをするといいですよ。