[BPM, ADF] BPM ADF Task forms. Checking whether the current user is in a BPM Swimlane

原文はこちら。
https://blogs.oracle.com/bpmbestpractice/entry/bpm_adf_task_forms_checking

Focus
このエントリでは、ADFコンティストからBPMスイムレーンのロールやユーザに着目します。ADFTaskDetailフォームがあり、機能面でリッチでダイナミックにしようとしているところです。一般的な要件として、ワークスペースにログインしたユーザに基づいて、動的に異なる領域を表示する、というものがあります。おそらく、ユーザが属するスイムレーンのロールを知りたいのです。

トリックを知らなければ、思っている以上にこの要件を実現すること難しかったりします。

The Challenge
ここでのトリッキーな箇所はADF Task Detailsフォームが実際のところメインのワークスペースとは別のJava EEアプリケーションである、ということです。そのため、JavaやExpression Languageを使ってログインユーザを取得しようとすると、anonymousしかわからず、期待しているBPMロールは全く取得できません。どうしましょう?

The Magic
まず、BC4J SecurityライブラリをViewプロジェクトに追加します。


その後、JDeveloperを再起動します。

ADF Task DetailsアプリケーションのViewプロジェクトのweb.xmlで、JpsFilterセクションを探し、そこに以下のセクションを追加します。

application.nameOracleBPMProcessRolesApp
これでアプリケーションをBPMワークスペースにリンクします。 その後、ADFフォームの動的な箇所で、BPMワークスペースにログインしたユーザが、任意のBPMプロセスのBPMスイムレーンに属しているか否かをチェックできます。このチェックの最善の方法は、JSFページでExpression Languageを使用することです。ここで単純にレンダリングフラグをtrueまたはfalseに変更すると、それによってセクションを隠したり表示したりします。 おそらく、承認者のスイムレーンと一般ユーザのレーンのタスクに同じフォームを再使用しているでしょう。 それだからこそ、承認者にこのフィールドを見てもらいたいのです。したがって、組み込みの機能を呼び出して、ユーザがBPMスイムレーンのロールに属しているかどうかを調べるのです。ロール名はBPMProject.RoleNameという形である必要があります。

ここまでできたら、ADF Task Formプロジェクトを再デプロイしましょう。

(上の画像の場合)ワークスペースにログインしているユーザがBPMプロジェクトSimpleTaskのUnsecureというスイムレーンのメンバーである場合に限り、Task Detailsフォームにテキストを表示します。

0 件のコメント:

コメントを投稿