Reactive Web App・Mobile AppのClient Actionからサーバーサイドの処理を呼ぶ場合、1つ1つの呼び出しが通信経由で(実行形態としてはWeb APIとして)実行される。
通信のオーバーヘッドを避けるため、1つのClient Actionから呼び出すサーバー処理は1つに絞るのがベストプラクティス。
これに反すると、ODC Studio上で警告も出るし、AI Mentor Systemの指摘事項にもあがってくる。
よって、レビューやテスト時点では解消されているはずだが、結構残っており、修正が大変なので直せない、と言われることがある。が、新しいServer Actionを作り、複数のサーバー処理の呼び出しを全部そこに移動するだけなので、基本的には対処は簡単。
環境情報
ODC Studio(Version 1.5.0)
問題が発生するサンプル実装
Buttonをクリックしたときに起動するClient Actionを以下の様に実装してみると、問題の発生を確認できる。中間のAssignは1つ目の呼び出し結果を一時保存するのにおいているだけなので、省いても問題は再現する。
ODC Studioの警告
ODC Studio左下に、「Performance Warning」として以下の内容が表示される。
The 'serverAction____OnClick' Client Action calls several Server Actions. To avoid performance issues, group them all in a single Server Action and call it instead.
AI Mentor Systemのパターン
AI Mentor Systemは、OutSystemsが事前に定めたルールに基づいて静的解析をしてくれる機能。
基本機能については以下を参照。
パターンというのは、AIMSが指摘してくる指摘事項の種類のこと。以前、(当時の)パターン一覧について順番に見て行った時の記録は以下の記事にまとめた。
このパターンの中に、「Multiple server requests (Aggregates or Actions) inside Client Actions - ODC Documentation」というものがあり、この問題に対して指摘を挙げてくれる。
AI Mentor SystemのUI上で指摘を確認する
対策
- Server Actionを1つ作成する
- Client Actionから呼び出しているServer Actionを↑で作ったServer Actionに移動する
- 移動したAction呼び出しに必要な値をInput Parameterに、呼び出し結果から取得が必要な値をOutput Parameterに作成する
- Client Actionから新設したServer Actionを呼び出し、Input/Output Parameterを設定する
実装例
新設するServer Action
I/F定義(呼び出したServer ActionのOutput Parameterを画面で使っていたため、ActionにもOutput Parameterを追加した)