Technology Blog Posts by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
NaotoSakai
Product and Topic Expert
Product and Topic Expert
403

SAP Build AppsのMARKETPLACEには様々なコンポーネントが存在します。その中でもLIST系のコンポーネントはデータを表示する際に使用するので使用頻度が高いのではと思います。

NaotoSakai_0-1721801217002.png

大体のこれらのコンポーネントにはRefresh Data?とRefresh rateというプロパティが存在し、

NaotoSakai_1-1721801302929.png

Refresh Data?をTrueにすると、Refresh rateのタイミングでリストの内容を再取得し、更新します。

これを"更新ボタンをクリックしたら更新"など任意のタイミングで行えないか?というお問い合わせを頂きましたので、方法を解説したいと思います。

  1. まず、App Variable等でtrue/false型の変数を作成します。ディフォルトはfalseにしておくとよいでしょう。
    NaotoSakai_2-1721801684433.png
  2. この変数をリストコンポーネントのRefreshData?プロパティに割り当てます。NaotoSakai_3-1721801842855.png

     

    これだけで出来るのかと思った方、残念ながらそうではないのです。
  3. ここからが意外と知られていないことなのですが、このリストコンポーネントのロジックに手を加えます。
    NaotoSakai_4-1721801933640.png
    このアイコンをクリックしテンプレートエディタを開きます。
    NaotoSakai_5-1721802060929.png
    テンプレートエディタではコンポーネントの内部を編集することが可能です。デザインを変えたりも出来ますので結構楽しいですよ。
    テンプレートエディタの下部にあるAdd logic to xxxxxxListをクリックし、ロジック編集に入ります。
  4. これは私愛用のSCROLLABLE ICON LISTのものですが、このようにこのListのロジックが表示されます。結構勉強になるのでどの様に動いているか見ても良いでしょう。
    NaotoSakai_6-1721802265181.png

    このロジック、よく見るとComponent mountedイベントをきっかけに動作し、データを取得し、そこでRefresh Data?プロパティがTrueであるならRefresh rate分Delayを行い再度データ取得を行うというロジックです。そうなのです。実はこのロジックではRefresh Data?プロパティの値の変更はTrue→Falseへの変更は反映されますがFalse→Trueへの変更してもデータの再取得は反映されないのです。

  5. Refresh Data?プロパティの値の変更でデータを取得するようにするにはどうしたらよいか?様々な方法が考えられます。私も各人と話し合いましたが簡単なのは
    NaotoSakai_7-1721803003441.png

    Receive Eventコントロールを新規に配置し、Event Sourceとして"Internal property 'Refresh Data?' changed"を選択します。これをGet Record Collectionに接続します。

    これにより、Refresh Data?プロパティが変更されたらGet Record Collectionが動作することになります。
  6. 更新ボタン側は簡単です。
    NaotoSakai_8-1721803340644.png

    このようにRefresh Data?プロパティに割り当てたtrue/false型変数を、更新したいのであればTrueにしてその後すぐにFalseに戻します。これで"Internal property 'Refresh Data?' changed"イベントが動作し、データがリフレッシュされ、リストが新しい値で更新されます。


    注意:よく見ればわかりますが、上記の変更では実はRefresh Data?プロパティに設定した変数をFalseに変更したときもデータのリフレッシュはかかります。これが気になるのであれば"Internal property 'Refresh Data?' changed"イベントのあとにIF conditionを挟んでTrueのときだけ動作するというロジックに変更して下さい。


このようにすれば任意のタイミングでリストの更新が可能です。Refresh Data?による自動更新では満足できない場合はこの方法をぜひお試し頂ければと思います。