2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

OutSystemsのEntityのExpose Read Onlyの動作を確認してみる

Posted at

EntityをPublicにして、他モジュールから参照するときには、Expose Read Only=Yesにすることが推奨されています。
このプロパティ値についてまとめてみます。

操作手順

Entityのプロパティから、まずPublic=Yesにします。これで他モジュールから参照できるようになる。
すると、Expose Read Onlyという別のプロパティが有効になります。デフォルトでYesのはず。Yesだと他のモジュールからEntityを直接更新できなくなる(更新用Actionを作成して提供することになります)。
qExpose2.PNG

Public=Noの状態のプロパティは以下のようになります(Expose Read Onlyが灰色で選択不可能)。
qExpose1.PNG

もし、Entityを他のモジュールから直接更新できるようにするときは、Expose Read Only=Noに設定します。

効果

別のモジュールから該当Entityを参照して効果を確認。
Yesのとき:Entity作成時に自動作成されるCRUDのAction群が、Getの1種類だけになっています。
これで、自動作成されるAction経由での更新ができない。更新するにはEntityを定義したモジュールに、自動生成される更新Actionをラップする別のActionを定義してPublic=Yesにしてください。
qExpose3.PNG

SQL を直接使った更新処理も、OutSystemsが止めてくれました。
qExpose5.PNG

Noのとき:CRUDの操作も全て利用可能ですね。
qExpose4.PNG

Expose Read Only=Yesにする理由

もし、Expose Read Only=NoのEntityに対して様々な開発を行い、あちこちのモジュールで独自に更新処理を書いていたとします。
ある時点で、更新時には必ず特定のログを記録するなどの追加要件が出たとしたらどうでしょうか。

こういう事態でも、Expose Read Only=Yesにしてあれば、更新処理は該当モジュールがPublicとして提供しているActionだけになります。影響調査もすぐ済み、修正もそうでないときに比べでだいぶ楽になります。

このため、一般的には、Expose Read Only=Yesにしておくほうがいいと思います。
あまりにEntityが多く、更新処理も非常にシンプルであることがわかりきっている場合には、別の判断が必要かもしれません。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?