OutSystemsでアクションを再帰的に呼んでみる

まあできるだろうとは思いましたが、念の為確認してみました。

結論としては、他のプログラミング言語の関数と同じく、アクションの再帰呼び出し(アクション内から同じアクションを別のパラメータで呼ぶような処理)が書けました。

実験用アクションの定義

Server Actionとして、「Factorial」を定義。

Input Parameter: N(Integer)

Output Parameter: Result(Integer)

受け取ったNに対して階乗の値を計算し、Resultにセットすることで返します。

入力が0のとき0!=1より1を返し(Switchの右側、1のフロー)、

正の値のときN*Factorial(N-1)を再帰的に呼出して、結果をResultに設定します(Switchの下側、Otherwiseのフロー)。

こんな感じです。

入力が負の値の場合は、Raise ExceptionアクションでModule内の独自User Exceptionをスロー、本来ならオーバーフロー対策もすべきですが、テスト目的なのでここでは省略。

動作確認

モバイルのスクリーンを作成して動作確認してみました。

Buttonクリックで作成したアクション「Factorial」を呼んで、ラベルに結果を記入しています。右側の例外処理は、間違ってパラメータに負の値を渡したときに返ってきたメッセージを表示しています。

デバッガで、再帰呼び出し中(当初N=10で呼んで、6回目の再帰呼び出し中)にブレークポイントで止まったときのThreadsの様子。アクション呼び出しが溜まっているのが見えますね。

(補足)もしかしてカスタムExceptionはPublicにできない?

アクション側で例外定義しているのに、利用側ではその例外を利用していないのは、例外をPublicに設定する事ができなかったからです。

公式のideasでも話題になっていますね。カスタムExceptionをPublicにして他のeSpaceから参照できるようにしたいという内容で(つまり、実際にPublicにできないのだと思います)。

最初に投稿されたのが2010年だけど、2018/07時点でまだ対応されたという報告はあがっていません。

https://www.outsystems.com/ideas/100/allow-custom-exceptions-to-be-public-and-referenced-from-other-espaces

シェアする

  • このエントリーをはてなブックマークに追加

フォローする