このアダプタは 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>