インプットパラメータは基本は値渡しなのですが。。。
みなさんこんにちは、OutSystems Platformチームの鈴木です。
今回は、インプットパラメータの渡され方についてのちょっとした注意点です。
OutSystems PlatformではActionのインプットパラメータは基本は値渡しとなっています。
例えば、IntegerやDate等の基本のデータ型はもちろん、EntityやStructureをActionのインプットパラメータで渡した場合でも、Action内でのEntityやStructureへの変更結果は呼び元には反映されません。
C#言語で言えばClassではなくてStructになっているイメージです。(実際に.Netスタックの場合は内部でC#のStructとして生成されています)
これは、EntityやStructureをRecordでラップた場合も、eSpaceからExtensionの呼び出しの場合でも同様です。
では、List(及びRecordList)の場合はどうるかというと、これがちょっと要注意です。
Listは同一モジュール(eSpace)内のActionの呼び出しの場合だけ参照渡しとなるのです。(Binary型とObject型も同様です)
これは、性能を向上させるための仕様なのですが、ちゃんと知ってないとトラブルの元になる可能性もありますね。
例えば、Action内でListにデータを詰めて呼び元でそれを参照するような処理を作成した場合、それは同一モジュール内での呼び出しの場合だけうまく動きます。
性能がネックになっている場合は仕方ないですが、そうでない場合は編集済みのListをアウトプットパラメータで戻してあげる方が良さそうですね。