SAP Build Apps : MARKETPLACEからダウンロードしたListコンポーネントの任意更新

Estimated read time 1 min read

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

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

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

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

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

 

これだけで出来るのかと思った方、残念ながらそうではないのです。ここからが意外と知られていないことなのですが、このリストコンポーネントのロジックに手を加えます。

このアイコンをクリックしテンプレートエディタを開きます。

テンプレートエディタではコンポーネントの内部を編集することが可能です。デザインを変えたりも出来ますので結構楽しいですよ。
テンプレートエディタの下部にあるAdd logic to xxxxxxListをクリックし、ロジック編集に入ります。これは私愛用のSCROLLABLE ICON LISTのものですが、このようにこのListのロジックが表示されます。結構勉強になるのでどの様に動いているか見ても良いでしょう。

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

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

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

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

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

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

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

 

​ SAP Build AppsのMARKETPLACEには様々なコンポーネントが存在します。その中でもLIST系のコンポーネントはデータを表示する際に使用するので使用頻度が高いのではと思います。大体のこれらのコンポーネントにはRefresh Data?とRefresh rateというプロパティが存在し、Refresh Data?をTrueにすると、Refresh rateのタイミングでリストの内容を再取得し、更新します。これを”更新ボタンをクリックしたら更新”など任意のタイミングで行えないか?というお問い合わせを頂きましたので、方法を解説したいと思います。まず、App Variable等でtrue/false型の変数を作成します。ディフォルトはfalseにしておくとよいでしょう。この変数をリストコンポーネントのRefreshData?プロパティに割り当てます。 これだけで出来るのかと思った方、残念ながらそうではないのです。ここからが意外と知られていないことなのですが、このリストコンポーネントのロジックに手を加えます。このアイコンをクリックしテンプレートエディタを開きます。テンプレートエディタではコンポーネントの内部を編集することが可能です。デザインを変えたりも出来ますので結構楽しいですよ。テンプレートエディタの下部にあるAdd logic to xxxxxxListをクリックし、ロジック編集に入ります。これは私愛用のSCROLLABLE ICON LISTのものですが、このようにこのListのロジックが表示されます。結構勉強になるのでどの様に動いているか見ても良いでしょう。このロジック、よく見るとComponent mountedイベントをきっかけに動作し、データを取得し、そこでRefresh Data?プロパティがTrueであるならRefresh rate分Delayを行い再度データ取得を行うというロジックです。そうなのです。実はこのロジックではRefresh Data?プロパティの値の変更はTrue→Falseへの変更は反映されますがFalse→Trueへの変更してもデータの再取得は反映されないのです。Refresh Data?プロパティの値の変更でデータを取得するようにするにはどうしたらよいか?様々な方法が考えられます。私も各人と話し合いましたが簡単なのはReceive Eventコントロールを新規に配置し、Event Sourceとして”Internal property ‘Refresh Data?’ changed”を選択します。これをGet Record Collectionに接続します。これにより、Refresh Data?プロパティが変更されたらGet Record Collectionが動作することになります。更新ボタン側は簡単です。このようにRefresh Data?プロパティに割り当てたtrue/false型変数を、更新したいのであればTrueにしてその後すぐにFalseに戻します。これで”Internal property ‘Refresh Data?’ changed”イベントが動作し、データがリフレッシュされ、リストが新しい値で更新されます。注意:よく見ればわかりますが、上記の変更では実はRefresh Data?プロパティに設定した変数をFalseに変更したときもデータのリフレッシュはかかります。これが気になるのであれば”Internal property ‘Refresh Data?’ changed”イベントのあとにIF conditionを挟んでTrueのときだけ動作するというロジックに変更して下さい。このようにすれば任意のタイミングでリストの更新が可能です。Refresh Data?による自動更新では満足できない場合はこの方法をぜひお試し頂ければと思います。   Read More Technology Blogs by SAP articles 

#SAP

#SAPTechnologyblog

You May Also Like

More From Author

+ There are no comments

Add yours