EntityをPublicにして、他モジュールから参照するときには、Expose Read Only=Yesにすることが推奨されています。
このプロパティ値についてまとめてみます。
操作手順
Entityのプロパティから、まずPublic=Yesにします。これで他モジュールから参照できるようになる。
すると、Expose Read Onlyという別のプロパティが有効になります。デフォルトでYesのはず。Yesだと他のモジュールからEntityを直接更新できなくなる(更新用Actionを作成して提供することになります)。
Public=Noの状態のプロパティは以下のようになります(Expose Read Onlyが灰色で選択不可能)。
もし、Entityを他のモジュールから直接更新できるようにするときは、Expose Read Only=Noに設定します。
効果
別のモジュールから該当Entityを参照して効果を確認。
Yesのとき:Entity作成時に自動作成されるCRUDのAction群が、Getの1種類だけになっています。
これで、自動作成されるAction経由での更新ができない。更新するにはEntityを定義したモジュールに、自動生成される更新Actionをラップする別のActionを定義してPublic=Yesにしてください。
SQL を直接使った更新処理も、OutSystemsが止めてくれました。
Expose Read Only=Yesにする理由
もし、Expose Read Only=NoのEntityに対して様々な開発を行い、あちこちのモジュールで独自に更新処理を書いていたとします。
ある時点で、更新時には必ず特定のログを記録するなどの追加要件が出たとしたらどうでしょうか。
こういう事態でも、Expose Read Only=Yesにしてあれば、更新処理は該当モジュールがPublicとして提供しているActionだけになります。影響調査もすぐ済み、修正もそうでないときに比べでだいぶ楽になります。
このため、一般的には、Expose Read Only=Yesにしておくほうがいいと思います。
あまりにEntityが多く、更新処理も非常にシンプルであることがわかりきっている場合には、別の判断が必要かもしれません。