このアダプタは before および after アクションをサポートしていませんが、runResourceAction プロビジョニングワークフローサービスを使用して、実行中のアクションをサポートしています。SmartRoles アクションは JavaScript または BeanShell で作成でき、作成されたアクションは SmartRoles API を呼び出してワークフローの一部としてカスタム動作を実行できます。アクションスクリプトへの入力は、actionContext という名前のマップオブジェクトに格納されます。actionContext マップに格納される内容は次のとおりです。
キー |
値 |
---|---|
action |
実行しているアクションのタイプを説明する文字列。現在、このアクションをrun 以外にすることはできません。 |
adapter |
com.waveset.adapter.SmartRolesResourceAdapter インスタンスへの参照を格納します。 |
additionalArgs |
runResourceAction プロビジョニングワークフローサービスの呼び出しに渡される追加の引数を格納するマップです。 |
result |
runResourceAction プロビジョニングワークフローサービスの呼び出しから返される WavesetResult への参照。 |
session |
SmartRoles の IOMSession インスタンスへの参照。セッションは、SmartRoles リソースで定義される管理者とパスワードを使用して作成されます。 |
trace |
com.waveset.adapter.SmartRolesResourceAdapter クラスに関連付けられた com.sun.idm.logging.trace.Trace インスタンスへの参照。これを使用して、アクションスクリプトのデバッグに使用するためのトレースメッセージを出力できます。 |
次に示す ResourceAction XML は、BeanShell アクションの例です。JavaScript アクションの場合は actionType を JAVASCRIPT に設定します。このアクションは、additionalArgs マップから取得された user という名前の引数を使用し、SmartRoles リポジトリを検索して、user 引数の値と一致する LOGON_ID を持つ 1 つ以上の Person オブジェクトを見つけます。すると、一致したそれぞれの Person の文字列表現は、ACTION_RC ResultItem 内の WavesetResult に返されます。
<?xml version=’1.0’ encoding=’UTF-8’?> <!DOCTYPE ResourceAction PUBLIC ’waveset.dtd’ ’waveset.dtd’> <!-- MemberObjectGroups="#ID#Top"--> <ResourceAction createDate=’1148443502593’> <ResTypeAction restype=’SmartRoles’ timeout=’0’ actionType=’BEANSHELL’> <act> import bridgestream.core.*; import bridgestream.util.*; import bridgestream.temporal.person.*; import java.util.*; import com.waveset.object.*; IOMSession session = actionContext.get("session"); OMEngine engine = OMEngine.getInstance(session); String user = actionContext.get("additionalArgs").get("user"); UTNameValuePair[] criteria = new UTNameValuePair[] { new UTNameValuePair ("LOGON_ID", user) }; UTTimestamp time = UTTimestamp.getSystemTimestamp(); List list = session.search("PERSON", criteria, time, null, null); Iterator iter = list.iterator(); StringBuffer buf = new StringBuffer(); while (iter.hasNext()) { ENPerson person = (ENPerson)iter.next(); buf.append(person.toString()); buf.append("\n\n"); } WavesetResult result = actionContext.get("result"); result.addResult("ACTION_RC", buf.toString()); </act> </ResTypeAction> <MemberObjectGroups> <ObjectRef type=’ObjectGroup’ id=’#ID#Top’ name=’Top’/> </MemberObjectGroups> </ResourceAction>