LoginSignup
0
0

[OutSystems]今更だが、Traditional Web向けData Gridのチュートリアルを試してみる

Posted at

OutSystemsの画面上に表形式のUIを表示するData Gridコンポーネントだが、Traditional Web版もある。
Traditional Webは使われなくなってきているだろうが、今更ながら、Data GridのTWA向けコンポーネントのチュートリアルを試し、気づいたことをメモしておく。

チュートリアル:How to use OutSystems Data Grid Web

環境情報

Personal Environment(Version 11.23.0 (Build 39357))
Service Studio(Version 11.54.24)
OutSystems Data Grid Web (Version 2.21.4)

新しい環境ではTraditional Webは作成できない

Forum投稿:I can't see Create Traditional Web Application optionに以下のように書かれている通り、新しい環境ではTraditional Webのアプリケーションを作成するオプションが無効になっている。

For new paid licences, the template for Traditional Web is by default no longer installed/enabled.

この解決策として、サポートへの依頼が挙げられている(試したことないので、実際にやってくれるかは不明)。

You can request to OutSystems, to enable the Traditional Web App template again for you. You can request this through a support case.

ちなみに、Traditional Webが有効になっている環境では、アプリケーション作成時に以下のように「Traditional Web」というオプションが表示される。
image.png

Module名が変更されている

チュートリアル中では、コンポーネントのModule名が「DataGridComponent」とされているが、現バージョンをインストールして確認すると、以下の通り「OutSystemsDataGridWeb」となっている。

開発方法の大きな違い:サーバーデータにアクセスするためにExpose REST APIを使う

Reactive Web Appであれば、自然にクライアント側からのリクエスト(Data ActionやScreenのAggregateなど)によってサーバーのデータを取得できる。

しかし、Traditional Webの場合はそうもいかず、Expose REST APIを作成してデータ取得する。Data GridのコンポーネントにURLを設定すると、動作時にリクエストを行って、結果をGrid内に表示してくれる。

Expose REST APIの認証問題

問題は、作成した画面とExpose REST APIのMethod間では認証が共有されないこと。
画面に配置したData GridからExpose REST APIを呼ぶとき、認証クッキーは渡っているようだが、ログインセッションは共有されない。つまり、Anonymousユーザーによるアクセス扱いになってしまう。
そのままだとAPIにセキュリティがかからないので、画面にログイン中のユーザーIdを取得するActionが提供されている。

それがData Grid Webアプリケーション/DataGridAuthentication Extension。
ExtensionにあるGetUserLogged Actionがログイン中のユーザーIdを返してくれる。

ただし、恐らくこのActionが内部で使っている以下のAPI呼び出しはAPIドキュメントが見当たらないので、非公開のもの。

OutSystems.RuntimePublic.Session.GetUserFromSessionCookie();

DataGridAuthentication/GetUserLogged Actionの動作確認してみる

以下のように、Data Gridから呼んでいるExpose REST APIロジック内で、GetUserId()とGetUserLogged Actionそれぞれの結果をログに出力してみる。

image.png

結果は以下の通り。

GetUserId(): 0 GetUserLogged.UserId: 2

GetUserId()=0=NullIdentifier()なので、OutSystemsの通常ロジックとしては未ログインの状態。
しかし、GetUserLogged Actionは正しく呼び出し元画面にログインしているユーザーのIdを返している。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0