※この記事は「Outsystems 入門 ~Webアプリケーションを作成しよう~」の連載記事です。連載トップはこちら

第5回 Action(アクション)とは?

こんにちは!
前回までの演習で、基本的なデータ一覧表示画面とデータ登録画面を作ることができました。
ただ、ドラッグ&ドロップ作業だけで画面を作成してしまったため、作成した画面の処理や仕組みについてどうなっているのかと思われる方も多いと思います。
そこで、今回はアプリケーションのロジックを定義するAction(アクション)というものを確認していき、作成した画面への理解を深めていこうと思います。

Action(アクション)とは?

前述しましたが、アクションとはアプリケーションのロジックを定義する場所(要素)です。

見ていただいた方が分かりやすいため、ServiceStudio上で確認してみましょう。InterFaceタブを開き、MainFlow内のBooks画面をクリックします。
すると、オレンジの丸アイコンが目印の「Preparation」、「RefreshBookTable」という2つの項目が表示されますが
この2つがBooks画面で利用するアクションとなります。

Preparationというアクションを試しにダブルクリックしてみましょう。
このPreparationというアクションは、利用者がアクセスした際、画面が描写される前に実行されるアクションです。
(俗に言う画面にアクセスした際の初期化処理と同じイメージでOKです。)

画面中央には、アクション内に定義されている処理の流れ(ロジックフロー)が表示されます。
このロジックフローの最初と最後には、黄緑アイコンの「Start」と「End」がありますが、その間に実施する処理を追加してロジックを組み立てていきます。
Books画面のPreparationアクションでは、1つだけ処理が定義されていますね。これをダブルクリックしてみましょう。

ダブルクリックすると下記のような画面が表示されます。
まず、右下の赤枠部分を確認してみてください。「Aggregate」と書かれていますね。
このAggregate(アグリゲート)とは、データベースからデータを取得する処理を実施したい場合に利用するツールです。
では、データベースのどのエンティティからデータを取得しているのかというと、左上の赤枠箇所を確認するとわかります。
Sourcesに「Book」とある通り、このAggregateではBookエンティティからデータを取得する処理が定義されています。

実際にこのBooks画面をブラウザで表示すると下記の様になるのですが、Bookエンティティのデータが表示されていることがわかります。
この表示データは、画面を表示する(描写する)前に実行されるPreparationアクション内で取得されたものです。

 

 

アクションの種類とスコープ(有効範囲)

アクションは、定義する場所、アクションが利用できる有効範囲、アクションが実行される環境 等によって
いくつかの種類に分類することができます。今回は、Traditinal Webの場合の代表的なアクションである以下2つをご紹介します。

①ScreenAction
②ServerAction

ScreenActipn

先ほどのPreparationアクションのように、画面(Screen)の配下に作成するアクションです。
例えば、検索ボタンを押したときの処理や、画面の初期表示の際の処理などの、その画面内で実行する処理を記載します。

ScreenActionは、作成された画面内でのみ利用可能です。
他の画面からは利用できません。

 

ServerAction

ServiceStudioの「Logic」タブを開いて表示される領域に作成されたアクションをServerActionと言います。
ServerActionは、先ほどのScreenActionとは違い、様々なところから呼び出せるため、共通関数のような用途で主に作成されます。

アクションを呼び出すことができる具体的な有効範囲ですが、ServerAction内のPublicプロパティにより変わります。
このプロパティがYesの場合は、作成したモジュール(この場合だと、Libraryモジュール)以外からでも呼び出すことができます。
Noの場合は、作成したモジュール内(この場合だとLibraryモジュール)からしか呼び出しができません。

Tips モジュールとアプリケーション

モジュールとアプリケーションの違いは下記のとおりです。
モジュールはServiceStudioで開発し、パブリッシュする単位です。
一方アプリケーションは、モジュールをグループ化したものです。

一般的には、開発したモジュールをパブリッシュして開発環境のサーバに配置し、
本番環境やテスト環境へは、開発環境のモジュールをアプリケーション単位でそれぞれの環境に配布します。

 

ロジックツールと変数

さて、ServiceStudio上のBooks画面にあるPreparationアクションを確認してきましたが、もうひとつのScreenActionである、RefreshTableアクションに関してもダブルクリックして確認してみましょう。
このアクション内では、先ほどのPreparationアクションより少し複雑なロジックフローが定義されていますね。

この1つ1つのロジックは、基本的に画面左のツールボックスというエリアから、実施したいロジックツールを画面中央にドラッグして配置することで作成することができます。

また、画面右ウィンドウより、RefreshBookTableアクションをクリックして展開してください。(ダブルクリックではなく、クリックです)
「ResetFilters」、「ResetPagination」の2つが表示されると思いますが、この黄色い四角アイコンの表示は、変数を表します。

変数のアイコンは変数の種類によって以下のような表示となります。
今回の「RefreshFilters」の場合は、入力パラメーター変数(引数)であることがわかりますね。

それぞれの変数をクリックすると、画面下に変数の詳細情報が表示されます。
DataTypeプロパティには、変数のデータ型が指定できます。この場合はBoolean型で定義されていることが分かると思います。
また、入力パラメータ変数には「Is Mandatory」というプロパティがあり、これは入力パラメータ変数への値セットが必須であるかどうかを定義しています。
つまり、RefreshBookTableアクションを呼び出して実行する際には、RefreshFileters入力パラメータを指定して呼び出す必要があるというわけです。

変数の表現が確認できたところで、RefreshTableアクション内で利用されている
いくつかのロジックツールを見ていきましょう。

ロジックツールの種類

IF

まずは条件分岐を作成する「IF」です。多くのプログラミング言語でもIF構文がありますが、それと同じものと考えて貰って構わないです。

画面内で配置されている下記赤枠のIFをダブルクリックしてみましょう。

IF分で評価する条件式を入力できる、「Expression Editor」という画面が開きます。
このエディタ内では、演算子ボタンや評価する変数などをクリックすることで、条件式を組み立てることができます。
もちろん、キーボードで直接条件式を入力することもできます。

今回の場合は、演算子を用いずに、入力パラメータ変数のRestFiltersの内容を評価しています。
この変数はBoolean型であるため、内容がTrueかFalseかを評価している訳ですね。

Ifツール内の条件式がTrueまたはFalseによって、どう処理フローが進むかは、アクションフロー内で定義します。
IFツールから伸びている矢印に、TrueまたはFalseと記載されていますが、該当する矢印の方向にフローが進んでいきます。

Assign

Assignは、変数に値を代入するロジックツールです。

画面内では下記で利用されています。
クリックすると、定義されている内容が画面右下に表示されます。
代入先変数のプルダウンをクリックして、「Select Variable…」をクリックしてください。

変数選択画面が表示されます。
今回はセッション変数に代入していますね。代入する値が””なので、セッション変数をクリアする処理であることがわかります。
※セッション変数については今回での説明は省略します。

 

RefreshData

RefreshDataは、Aggregateなどで事前に定義したデータ取得処理を再実行(再読み込み)する際に利用します。

DataSourceプロパティに再読み込みするデータ取得処理を指定します。
プロパティ入力欄のプルダウンをクリック後、「Select Data Source…」をクリックしてみましょう。

今回は、Preparationアクションで定義したAggregateであるGetBooksの再読み込みが指定されています。

RunServerAction

RunServer Action というツールを使うことで、アクションから更に別のアクションを呼び出すこともできます。

アクションを呼び出す方法は以下の2通りとなります。
方法① ツールボックスからRunServerActionをドラッグ&ドロップする。
     その後、呼び出すアクションをダイアログから指定する。
方法② 呼び出したいアクションを直接ドラッグ&ドロップする。

アクションを呼び出す際は、前述したアクションのスコープ(有効範囲)を意識してください。
例えば、ScreenActionは定義された画面内でしか利用できないため、別の画面のアクションから呼び出すことはできません。

さて、今回はアプリケーションのロジックを記述するアクションについて簡単に取り上げてみました。
通常のアプリケーション開発では、ロジックの記述がプログラミングのメインとなりますが、Outsystemsでは今回取り上げたように簡単な機能であればロジックも自動作成してくれます。
ベースを自動作成してもらい、細かい所を追加、変更していくとアプリケーションの開発スピードもグッと上がるわけです。
また、アイコンが並んでいるため文字の記述による通常のプログラミング言語より全体の流れが直感的でわかりやすいというメリットもあります。

Outsystemsにおけるロジックの組み方を簡単に理解してもらったところで、次回からLibraryアプリケーションをよりブラッシュアップしていきましょう!

次回 第6回 ウィジェットをカスタマイズして画面デザインを変更しよう!~その①~