2010年2月4日木曜日

リストから目的の値を探すには

今回はある文字列(または文字列リスト)が別の文字列リストに含まれているかどうかを調べる方法をご紹介します。

調べるパターンは次のとおり。

A. 特定の値だけ(を含む)
B. すべての値を含む
C. いずれかの値を含む

ここではロールを使って権限をチェックする@関数式を例にします。

ロールとして次の3種類がアクセス制御リスト(ACL)に定義されているものとします。

[Admin].....管理者
[Approver]..承認者
[Checker]...点検者

現在のユーザーに付与されたロールを調べるには @UserRoles を使います。
ユーザーに複数のロールが付与されている場合、@UserRoles の戻り値はリストになります。

[Admin] を含む時、"管理者" を表示する
@If(@IsMember("[Admin]"; @UserRoles); "管理者"; "")

[Admin] を含まない時、"非管理者" を表示する
@If(@IsNotMember("[Admin]"; @UserRoles); "非管理者"; "")

[Admin] [Approver] の両方を含む時、"管理者兼承認者" を表示する
@If(@IsMember("[Admin]":"[Approver]"; @UserRoles); "管理者兼承認者"; "")

[Admin] [Approver] [Checker] の3つを含む時、"管理者兼承認者兼確認者" を表示する
@If(@IsMember("[Admin]": "[Approver]": "[Checker]"; @UserRoles); "管理者兼承認者兼確認者"; "")

[Admin] [Approver] のどちらかを含む時、"管理者または承認者" を表示する
@If(@Elements(@Keywords("[Admin]": "[Approver]"; @UserRoles; ""))>0; "管理者または承認者"; "")

[Admin] [Approver] [Checker] の3つのうちどれかを含む時、"ロール保有者" を表示する
@If(@Elements(@Keywords("[Admin]": "[Approver]": "[Checker]"; @UserRoles; ""))>0; "ロール保有者"; "")

@関数式では変数の値や関数からの戻り値が複数値かどうかを見極める機会が Lotus Script で組む場合よりも少ないのがいいな、と思います。

0 件のコメント:

コメントを投稿