Sun Java ロゴ     前へ      目次      次へ     

Sun ロゴ
Sun Java™ System Identity Manager 7.0 配備ツール 

第 2 章
規則の操作

この章では Identity Manager の規則と規則ライブラリについて紹介し、規則と規則ライブラリをフォーム、ロール、およびワークフローに実装する方法を説明します。

この章は、次の節で構成されています。


配備環境用に規則を作成、編集、およびテストするには、Sun Identity Manager Integrated Development Environment (Identity Manager IDE) を使用します。

Identity Manager IDE インタフェースの紹介および規則の作成と編集に必要な手順の詳細については、第 1 章「Identity Manager IDE の使用」を参照してください。

Identity Manager Business Process Editor (BPE) アプリケーションを使用して、規則を作成、編集、および妥当性検査することもできます。手順については、付録 A 「ビジネスプロセスエディタの使用方法」を参照してください。



Identity Manager 規則について

ここでは、次の入門トピックについて説明します。

規則とは何か

規則とは、XPRESS、XML オブジェクト、または JavaScript 言語で記述された関数を含む Identity Manager リポジトリのオブジェクトです。Identity Manager 内で、規則は頻繁に使用されるロジックや静的な変数を、フォーム、ワークフロー、およびロール内で再利用できるように格納するためのメカニズムを提供します。

引数を規則に渡して、規則の動作を制御することができます。また、規則はフォームやワークフローによって保守される変数を、参照または変更することもできます。

単純な規則は一般に、XML で作成されることが多いため、この章の例では XPRESS または XML オブジェクト言語を使用します。


XPRESS および XML オブジェクトは、両方とも XML で作成されるため、この章で紹介するコード例はどちらも同じように見えます。

この章は、XPRESS 言語に精通していることを前提にしています。XPRESS の使用方法の詳細については、『Sun JavaTM System Identity Manager ワークフロー、フォーム、およびビュー』を参照してください。

JavaScript での規則の記述については、「JavaScript での規則の記述」を参照してください。


規則の例

コード例 2-1 は単純な XML 規則です。規則名は <Rule> 要素の name 属性によって定義され、文字列値 john または mary を返します。規則本体は <Rule> 要素内の XPRESS 式です。

コード例 2-1 XML 規則

<Rule name='getApprover'>
   <cond><eq><ref>department></ref><s>sales</s></eq>
      <s>john</s>
      <s>mary</s>
   </cond>
</Rule>

規則を使用する理由

XPRESS を使用できる場所であればどこでも、規則を呼び出すことができます。特にワークフローやフォーム内でよく使用します。規則を使用することにより、ロジックのフラグメントや静的な値をカプセル化し、それを多くの場所で再利用できます。

XPRESS ロジックや静的な値を保存して再利用することには、次の利点があります。

フォーム内での規則の使用

通常、規則はフォーム内で呼び出して、allowedValues 表示プロパティーを算定したり、<Disable> 式内のフィールド可視性を制御したりします。フォーム内で次のものを格納して再利用するには、規則が最も効率的なメカニズムとなる場合があります。

フォームから規則を呼び出す場合は、これらのフォームのセキュリティー保護を適切に行うことが特に重要です。規則のセキュリティー保護については、「規則のセキュリティー保護」を参照してください。

サンプルシナリオ: フォーム

コード例 2-2 の規則は、役職のリストを返します。Identity Manager フォームでは、選択肢の名前のリストを計算するために、このような規則がよく使われます。新しい役職を追加または変更する場合は、この規則を変更するだけでよく、この規則を参照するすべてのフォームを修正する必要はありません。

コード例 2-2 役職リストを返す規則

<Rule name='Job Titles'>
   <list>
      <s>Sales</s>
      <s>Accounting Manager</s>
      <s>Customer Service Representative</s>
   </list>
</Rule>

コード例 2-3 のフィールドは、前の例で定義された規則を呼び出して、役職リストを選択ボックスで使用します。

コード例 2-3 役職リストを選択ボックスで使用する規則

<Field name='global.jobTitle'>
   <Display class='Select'>
      <Property name='title' value='Job Title'/>
      <Property name='allowedValues'>
         <rule name='Job Titles'/>
      </Property>
   </Display>
</Field>


上記のコードで rule name 要素には小文字の r が使用されていますが、これはこの要素が規則を定義するためではなく、規則を呼び出すために使用されているからです。


ワークフロー内での規則の使用

ワークフロー内では、規則を次の目的で使用できます。

サンプルシナリオ: ワークフロー

次の手動アクションは、承認リクエストを管理者に送信するために使用されます。このアクションはタイムアウト値を取ることができます。管理者が指定された時間内に応答しない場合、アクションは終了し、ワークフローは承認を別の管理者にエスカレーションできます。

次の規則では、タイムアウトが 86,400 秒、つまり 24 時間の固定値で指定されています。

コード例 2-4 固定値で指定されたタイムアウト

<Rule name='Approval Timeout'>
<i>86400</i>
</Rule>

次の手動アクションは timeout 規則を呼び出します。

コード例 2-5 timeout 規則の呼び出し

<ManualAction>
   <Owner name='$(approver)'/>
   <Timeout>
      <rule name='Approval Timeout'/>
   </Timeout>
   <FormRule>
      <ref>approvalForm</ref>
   </FormRule>
</ManualAction>

ロール内での規則の使用

規則を使用して、ロール定義に任意のリソース属性の値を設定することができます。規則が評価されると、規則はユーザービューの任意の属性を参照できるようになります。

サンプルシナリオ: ロール

コード例 2-6 の規則は、ユーザーのリソース記述の値を設定します (NT など)。この規則に関連付けられたロールを持つユーザーが作成されると、この規則に従って記述値が自動的に設定されます。

コード例 2-6 ユーザーのリソース記述の値の設定

<Rule name='account description'>
    <concat>
      <s>Account for </s>
      <ref>global.firstname</ref>
      <ref>global.lastname</ref>
      <s>.</s>
    </concat>
</Rule>

規則の名前の動的な計算

Identity Manager のフォームとワークフローは、別の規則の名前を動的に計算して呼び出す規則をサポートします。コード例 2-7 は、部門コードを計算する規則を呼び出すフォームフィールドを示しています。

コード例 2-7 部門コードを計算する規則の呼び出し

<Field name='DepartmentCode'>
   <Display class='Text'>
     <Property name='title' value='DepartmentCode'/>
   </Display>
     <Expansion>
        <rule>
          <cond>
            <eq>
               <ref>var1</ref>
               <s>Admin</s>
            </eq>
            <s>AdminRule</s>
            <s>DefaultRule</s>
          </cond>
        </rule>
     </Expansion>
</Field>

ワークフローアクティビティーには、サブプロセス名を動的に計算する規則を含む、サブプロセスを含めることもできます。

コード例 2-8 サブプロセス名の動的な計算

<Activity id='0' name='activity1'>
   <Variable name='ValueSetByRule'>
     <rule>
       <cond>
          <eq><ref>var2</ref><s>specialCase</s></eq>
          <s>Rule2</s>
          <s>Rule1</s>
       </cond>
       <argument name='arg1'>
          <ref>variable</ref>
       </argument>
     </rule>
   </Variable>
</Activity>


規則の作成

ここでは、配備用に規則を作成する方法を説明します。また、次の内容についても説明します。

規則構文について

通常、規則は XML で作成され、<Rule> 要素でカプセル化されます。

ここでは、次のトピックを扱います。

<Rule> 要素の使用

コード例 2-9 は、<Rule> 要素を使用して基本の規則式を定義する例を示したものです。name プロパティーは規則の名前を識別します。この規則は XPRESS で作成されています。

コード例 2-9 <Rule> 要素を使用した基本の規則式の定義

<Rule name='getApprover'>
   <cond><eq><ref>department></ref><s>sales</s></eq>
      <s>Sales Manager</s>
      <s>HR Manager</s>
   </cond>
</Rule>

固定値を返す

固定値を返す規則の場合は、XML オブジェクト構文を使用して作成できます。コード例 2-10 は文字列のリストを返します。

コード例 2-10 文字列のリストを返す規則

<Rule name='UnixHostList'>
   <List>
      <String>aas</String>
      <String>ablox</String>
      <String>aboupdt</String>
   </List>
</Rule>


XML オブジェクト構文の詳細については、『Sun JavaTM System Identity Manager ワークフロー、フォーム、およびビュー』の XML オブジェクト言語に関する章を参照してください。


変数の参照

規則では <ref> 式を使用して外部変数の値を参照できます。使用可能な変数の名前は、規則が使用されるコンテキストによって決定されます。フォーム内で使用する場合は、任意のフォームフィールド、表示属性、または <defvar> で定義されている変数を参照できます。ワークフロー内で使用する場合は、ワークフロープロセス内で定義されている任意の変数を参照できます。

コード例 2-11 では、フォームは規則を使用して電子メールアドレスを計算します。フォームはフィールド global.firstnameglobal.lastname を定義し、規則がそれらを参照します。電子メールアドレスは、global.firstname の最初の文字に global.lastname と文字列 @waveset.com を連結することによって計算されます。

コード例 2-11 規則を使用した電子メールアドレスの計算

<Rule name='Build Email'>
   <concat>
      <substr> <ref>global.firstname</ref> <i>0</i> <i>1</i> </substr>
      <ref>global.lastname</ref>
      <s>@waveset.com</s>
   </concat>
</Rule>

コード例 2-12 では、ワークフローは規則を使用して特定のアクティビティーに遷移すべきかどうかをテストします。ワークフローは、ユーザービューを含む user という名前の変数を定義します。この規則は、このユーザーに NT リソースが割り当てられている場合に true を返し、NT リソースが割り当てられていない場合に NULL を返します。ワークフローエンジンは NULL を false と解釈するため、この場合は遷移しません。

コード例 2-12 規則を使用した遷移のテスト

<Rule name='Has NT Resources'>
   <notnull>
      <ref>user.accountInfo.types[NT].accounts</ref>
   </notnull>
</Rule>

引数を使用した規則の宣言

規則に引数を宣言することは必須ではありませんが、宣言することが良い方法であると考えられています。引数を宣言することにより、規則の作成者にドキュメンテーションを提供し、Identity Manager IDE 内での参照妥当性検査が可能になり、同一の命名規則を使用していない可能性のあるフォームおよびワークフロー内でも、その規則を使用することが可能になります。

規則引数を宣言するには、<RuleArgument> 要素を使用します。次の location 引数に示されているように、引数名の後に値を指定することにより、引数はデフォルト値を取ることができます。

コード例 2-13 デフォルト値の設定

<Rule name='description'>
   <RuleArgument name='UserId'/>
   <RuleArgument name='location' value='Austin'/>
   <concat>
      <ref>UserId</ref>
      <s>@</s>
      <ref>location</ref>
   </concat>
</Rule>


規則を定義する場合は、<Rule name='rulename'> のように R が大文字の <Rule> 要素を使用します。規則を呼び出す場合は、XPRESS の <rule> 要素は、<rulename='rulename'> のように、小文字の r となります。


この規則をユーザーフォーム内で使用することはできますが、UserIdlocation はユーザービューの属性ではありません。予期されている引数を規則に渡すために、<argument> 要素を規則の呼び出しで使用します。location という名前の引数を渡すことにより、RuleArgument 要素で宣言されているデフォルト値が上書きされることに注意してください。

コード例 2-14 RuleArgument で宣言されているデフォルト値の上書き

<rule name='description'>
   <argument name='UserId' value='$(waveset.accountId)'/>
   <argument name='location' value='global.location'/>
</rule>

規則の呼び出しの詳細については、「規則の参照」を参照してください。

引数の型を宣言する正式な方法はありませんが、コメントフィールドでは型を指定できます。<Comment> 要素を使用して、規則にコメントを組み込みます。

コード例 2-15 <Comment> を使用した、規則へのコメントの組み込み

<Comments>
記述規則では、2 つの引数が予期されている。従業員の
ID 番号である文字列値の UserId と、その従業員の
ビルの位置を記述する文字列値 location である
</Comments>


ヒント

規則の編集に Identity Manager IDE を使用している場合、規則引数のリストを形式的に定義すると便利です。このリストは、規則で使用可能になることが予期されている、変数の名前で構成されます。後で Identity Manager IDE で妥当性検査を実行するときに、これらを使用できます。


副作用を伴う規則

一般に、規則は単一の値を返しますが、規則から複数の値が返されるとよい場合もあります。規則式は単一の値しか返すことができませんが、規則は次の XPRESS 式を使用すると外部変数に複数の値を割り当てることができます。

コード例 2-16 では、規則は department という名前の外部変数の値をテストして、値をほかの 2 つの変数に割り当てます。

コード例 2-16 department 変数のテストおよびほかの変数への値の割り当て 

<Rule name='Check Department'>
    <switch>
      <ref>global.department</ref>
      <case>
        <s>Engineering</s>
        <block>
          <setvar name='global.location'>
            <s>Building 1</s>
          </setvar>

          <setvar name='global.mailServer'>
            <s>mailserver.somecompany.com</s>
          </setvar>

        </block>
      </case>

      <case>
        <s>Marketing</s>
        <block>
          <setvar name='global.location'>
            <s>Building 2</s>
          </setvar>          <setvar name='global.mailServer'>
            <s>mailserver2.somecompany.com</s>
          </setvar>
        </block>
      </case>
    </switch>
</Rule>

上記の例では、変数 global.locationglobal.mailServer は、ともに変数 department の値に従って設定されています。この場合、規則の戻り値は無視され、規則はその副作用のためにのみ呼び出されます。

JavaScript での規則の記述

規則が複雑になる場合は、規則を XPRESS ではなく JavaScript で作成するほうが都合がよい場合もあります。JavaScript は <script> 要素でラップすることができます。次に例を示します。

コード例 2-17 <script> 要素での JavaScript のラップ

<Rule name='Build Email'>
   <script>
      var firstname = env.get('firstname');
      var lastname = env.get('lastname');
      var email = firstname.substring(0, 1) + lastname + "@waveset.com";
      email;
   </script>
</Rule>

フォームおよびワークフロー変数の値を参照するには、env.get 関数を呼び出して変数名を渡します。env.put 関数を使用して、変数名を割り当てることができます。スクリプト内の最後の文の値が規則の値になります。前述の例では、規則は email 変数に値を戻します。

env.call 関数では、ほかの規則を呼び出すことができます。

デフォルト規則および規則ライブラリの使用

Identity Manager IDE を使用してデフォルトの Identity Manager 規則を編集し、カスタムのステップセットに従うようにできます。Identity Manager には、デフォルト規則と規則ライブラリのライブラリが付属しており、次の内容が含まれます。

監査規則

Identity Manager は、定期的アクセスレビューおよびほかのアイデンティティー監査機能で使用する規則を提供します。これらの規則は、アクセススキャンを定義するときに指定されます。

アテスター規則

アテスター規則は、特定のユーザーエンタイトルメントのアテストを担当する、ユーザーのリストを決定します。

この規則は次の入力変数を受け入れます。

カスタムアテスト規則には、次を指定する必要があります。

Identity Manager には定義済みの規則である、Default Attestor 規則が用意されています。この規則は、エンタイトルメントレコードが表すユーザーの idmManager を返します。idmManager 値は NULL で、Configurator を返します。

アテステーションエスカレーション規則

アテステーションエスカレーション規則は、応答に指定された期間が期限切れになったあとに、エスカレーションされたアテステーションリクエストを経路指定する宛先を決定します。

この規則は次の入力変数を受け入れます。

カスタムアテステーションエスカレーション規則には、次を指定する必要があります。

Identity Manager には定義済みの規則である、Default Escalation Attestor 規則が用意されています。この規則は attestor's manager を返しますが、それがない場合は Configurator を返します。

レビュー決定規則

アクセスレビュープロセスは、レビュー決定規則を評価して、ユーザーエンタイトルメントの自動承認または自動却下が可能か、あるいは手動でアテストする必要があるかを判別します。

この規則は次の入力変数を受け入れます。

カスタムレビュー決定規則には、次を指定する必要があります。

Identity Manager は、この規則の次の定義済み実装を提供します。

ユーザー範囲規則

ユーザー範囲規則には、アクセスレビューに組み込むユーザーを範囲設定するための、いくつかのオプションが用意されています。そのオプションの 1 つは、「属性条件規則に従う」 です。Identity Manager は、この規則の次の定義済み実装を提供します。

カスタムレビュー決定規則には、次を指定する必要があります。

Active Sync 規則

Active Sync アダプタはリソース上のアカウントに加えられた変更を検出すると、着信属性を Identity Manager ユーザーにマップするか、または Identity Manager ユーザーアカウントを作成します。


Active Sync 規則には必ず display.session ではなく、context を使用します。


表 2-1 は、定義済みの Active Sync 規則を一覧で示しています。

表 2-1 定義済み Active Sync 規則

規則名

説明

ActiveSync has isDeleted set

「削除を更新として処理」が false に設定されているリソースからの移行で使用されます

No Correlation Rule

相関規則が不要な場合に使用するデフォルト規則

No Confirmation Rule

相関規則が不要な場合に使用するデフォルト規則

英数字規則

英数字規則のデフォルトライブラリを使用することにより、Identity Manager のフォームとワークフロー内で、数字と文字を順序付けまたは表示する方法を制御できます。Identity Manager IDE では、このライブラリは Alpha Numeric Rules ライブラリオブジェクトとして表示されます。

表 2-2 は、このライブラリの規則を一覧で示しています。

表 2-2 デフォルトの英数字規則 

規則名

説明

AlphaCapital

英大文字のリスト

AlphaLower

英小文字のリスト

Numeric

数字のリスト

WhiteSpace

空白文字のリスト

SpecialCharacters

共通特殊文字のリスト

IllegalNTCharacters

不正な NT 文字のリスト

legalEmailCharacters

str がすべて数字であるかどうかをテストして確認します。

isNumeric

str が数字だけかどうかをテストして確認します。

isAlpha

str が英字だけかどうかをテストして確認します。

hasSpecialChar

str  に特殊文字が含まれているかどうかをテストして確認します。

hasWhiteSpace

str  に空白文字が含まれているかどうかをテストして確認します。

isLegalEmail

str に含まれている文字が電子メールアドレスに適しているかどうかをテストして確認します。

hasIllegalNTChar

str がすべて数字であるかどうかをテストして確認します。

stringToChars

指定された文字列 (testStr 引数として渡される) をコンポーネント文字のリストに変換します。

StripNonAlphaNumeric

英数字以外の文字を testStr から削除します。

リソースアカウント除外規則サブタイプ

ExcludedAccountRule サブタイプは、リソース操作からのリソースアカウントの除外をサポートします。

この規則には次のパラメータがあります。

accountID パラメータを、Identity Manager から除外するようにする 1 つ以上のリソースアカウントと比較できます。また、この規則では、operation パラメータを使用して、operation パラメータで指定されたアクションから免除するリソースアカウントをより細かく制御できます。

operation パラメータには次の値を含めることができます。

operation パラメータを規則内で使用しない場合、規則によって識別されるすべてのアカウントは、リストされているすべての操作から除外されます。

規則の例

コード例 2-18 は、サブタイプを使用する例を示していますが、この例では UNIX アダプタの指定されたリソースアカウントが除外されます。

コード例 2-18 サブタイプを使用する規則の例

<Rule name='Excluded Resource Accounts' authType='ExcludedAccountsRule'>
   <RuleArgument name='accountID'/>
   <defvar name 'excludedList'>
      <List>
         <String>root</String>
         <String>daemon</String>
         <String>bin</String>
         <String>sys</String>
         <String>adm</String>
         <String>uucp</String>
         <String>nuucp</String>
         <String>listen</String>
         <String>lp</String>
      </List>
   </defvar>
   <cond>
      <eq>
         <contains>
            <ref>excludedList</ref>
            <ref>accountID</ref>
         </contains>
         <i>1</i>
      </eq>
      <Boolean>true</Boolean>
      <Boolean>false</Boolean>
   </cond>
</Rule>

コード例 2-19 は、operation パラメータの使用例を示しています。このパラメータを使用することにより、Active Sync が "Test User" リソースに対して実行中である場合にも、Identity Manager に影響を与えることなく、このリソースアカウントを操作できます。

コード例 2-19 operation パラメータの使用

<Rule name='Example Excluded Resource Accounts' authType='ExcludedAccountsRule'>

<!--
「Administrator」アカウント上のすべての操作を除外する
「Test User」アカウント上の activeSync イベントを除外する
-->

   <RuleArgument name='accountID'/>
   <RuleArgument name='operation'/>

<!-- IAPI 操作のリスト -->
   <defvar name='iapiOperations'>
      <List>
         <String>iapi_create</String>
         <String>iapi_update</String>
         <String>iapi_delete</String>
      </List>
   </defvar>
   <or>

   <!-- 管理者アカウントは常に無視する。 -->
      <cond>
         <eq>
            <s>Administrator</s>
            <ref>accountID</ref>
         </eq>
         <Boolean>true</Boolean>
         <Boolean>false</Boolean>
      </cond>

<!-- 「Test User」アカウントの IAPI イベントは無視する -->
      <and>
         <cond>
            <eq>
               <contains>
                  <ref>iapiOperations</ref>
                  <ref>operation</ref>
               </contains>
               <i>1</i>

            </eq>
            <Boolean>true</Boolean>
            <Boolean>false</Boolean>
         </cond>

         <cond>
            <eq>
               <ref>accountID</ref>
               <s>Test User</s>
            </eq>
            <Boolean>true</Boolean>
            <Boolean>false</Boolean>
         </cond>
      </and>
   </or>
</Rule>

命名規則ライブラリ

命名規則のデフォルトライブラリを使用することにより、規則の処理後に名前が表示される方法を制御できます。Identity Manager IDE では、このライブラリは NamingRules ライブラリオブジェクトとして表示されます。

表 2-3 は、デフォルトの命名規則を一覧で示しています。

表 2-3 デフォルトの命名規則  

規則名

説明/出力

AccountName - First dot Last

Marcus.Aurelius

AccountName - First initial Last

MAurelius

AccountName - First underscore Last

Marcus_Aurelius

Email

marcus.aurelius@sun.com

Fullname - First space Last

Marcus Aurelius

Fullname - First space MI space Last

Marcus A Aurelius

Fullname - Last comma First

Aurelius, Marcus

RegionalConstants ライブラリ

地域定数規則のデフォルトライブラリを使用することにより、州、日、月、国、およびカナダの州の表示方法を制御できます。Identity Manager IDE では、このライブラリは RegionalConstants 規則ライブラリオブジェクトとして表示されます。

表 2-4 デフォルト地域定数規則

規則名

説明

US States

米国の州のフルネームのリスト。

US State Abbreviations

米国の州の標準的な省略名のリスト。

Days of the Week

曜日のフルネームのリスト。

Work Days

週の 5 労働日のリスト (米国)。

Months of the Year

年間の月のフルネームのリスト。

Month Abbreviations

選択した月の標準的な省略名のリスト。

Numeric Months of the Year

12 か月のリストを返します。

Days of the Month

31 日 (一か月) のリストを返します。

Smart Days of the Month

数字で月と 4 桁の年に基づいたリストを返します。

Countries

世界の国々の名前を英語でリストします。

Canadian Provinces

カナダの州の名前を英語でリストします。

日付ライブラリ規則には、渡される文字列が有効な日付である場合に true を返す日付妥当性検査規則が含まれています。この規則は、mm/dd/yy の形式で 1 つの RuleArgument を取ります。月または日が 1 桁で渡された場合は、その値を mm/dd/yy の形式に概算します。


規則ライブラリの使用

規則ライブラリ は、密接に関連する規則を Identity Manager リポジトリで単一オブジェクトに編成する便利な方法です。ライブラリを使用すると、リポジトリ内のオブジェクト数が削減され、フォームやワークフローの設計者は有用な規則を簡単に特定して呼び出せるようになるため、規則の保守が容易になります。

規則ライブラリは、XML 設定オブジェクトとして定義されます。設定オブジェクトには、1 つ以上の規則オブジェクトを含む、ライブラリオブジェクトが含まれます。コード例 2-20 は、2 つの異なるアカウント ID 生成規則を含むライブラリを示します。

コード例 2-20 2 つの異なるアカウント ID 生成規則を含むライブラリ 

<Configuration name='Account ID Rules'>
   <Extension>
      <Library>

         <Rule name='First Initial Last'>
            <expression>
               <concat>
                  <substr>
                     <ref>firstname</ref>
                     <i>0</i>
                     <i>1</i>
                  </substr>
                  <ref>lastname</ref>
               </concat>
            </expression>
         </Rule>

         <Rule name='First Dot Last'>
            <expression>
               <concat>
                  <ref>firstname</ref>
                  <s>.</s>
                  <ref>lastname</ref>
               </concat>
            </expression>
         </Rule>

      </Library>
   </Extension>
</Configuration>

ライブラリ内の規則は、XPRESS の <rule> 式を使用して参照します。name 属性の値は、ライブラリを含む設定オブジェクトの名前と、ライブラリ内部での規則の名前をコロンで連結した形式です。したがって、ライブラリ内のすべての規則名は必ず一意になります。

たとえば次の式は、Account ID Rules という名前のライブラリに含まれる、First Dot Last という名前の規則を呼び出します。

<rule name='Account ID Rules:First Dot Last'/>

規則ライブラリの表示およびカスタマイズ

Identity Manager IDE を使用して、規則ライブラリを表示および編集したり、既存のライブラリオブジェクトに規則を追加したりできます。詳細については、「リポジトリオブジェクトの操作」を参照してください。


規則の参照

ここでは、規則の参照について説明します。説明する内容は次のとおりです。

基本的な規則呼び出し構文

規則は XPRESS が許可されている場所であればどこからでも、フォーム、ワークフロー、または別の規則からでも呼び出せます。規則を呼び出すには、次の例のような XPRESS の <rule> 式を使用します。

<rule name='Build Email'/>

XPRESS インタプリタは、この式を評価すると、name 属性の値がリポジトリ内の規則オブジェクトの名前であるものと判断します。リポジトリから規則が自動的に読み込まれ、評価されます。規則によって返される値が <rule> 式の結果になります。

上記の例では、規則に明示的に渡される引数はありません。次の例は、argument 要素を使用して規則に渡される引数を示しています。

<rule name='getEmployeeId'>
   <argument name='accountId' value='jsmith'/>
</rule>

上記の例では、引数の値は静的文字列 jsmith として指定されています。式を使用して引数の値を計算することもできます。

<rule name='getEmployeeId'>
   <argument name='accountId'>
      <ref>user.waveset.accountId</ref>
   </argument>
</rule>

上記の例では、表示属性 user.waveset.accountId の値を返す、単純な ref 式を評価することによって、引数値が計算されます。

属性を参照することによって引数値を計算することが非常に一般的なため、代わりの構文も用意されています。

<rule name='getEmployeeId'>
   <argument name='accountId' value='$(user.waveset.accountId)'/>
</rule>

上記 2 つの例の動作は同じです。両方が、表示属性 user.waveset.account の値を引数の値として渡します。

規則引数の解決

ほとんどの規則には、変数の値を取得するための XPRESS <ref> 式または JavaScript env.get 呼び出しが含まれています。これらの変数の値を取得する方法を制御するために、いくつかのオプションが使用可能です。

最も単純なケースでは、規則を呼び出すアプリケーションがすべての参照を解決しようとします。ワークフローから呼び出される規則の場合、ワークフロープロセッサはすべての参照先がワークフロー変数であると想定します。フォームから呼び出される規則の場合、フォームプロセッサはすべての参照先がビュー内の属性であると想定します。呼び出し側の規則名を動的に解決することにより、規則を別の規則から呼び出すこともできます。

オプションの <RuleArgument> 要素も使用することができます。この要素については、「引数を使用した規則の宣言」で説明されています。

ここでは、次の内容を説明します。

範囲または明示的な引数の呼び出し

ここでは、規則引数解決の例を示します。

コード例 2-21 は、ユーザービューで使用できるフォームに規則を追加する例を示しています (ユーザービューに属性名があるため)。

コード例 2-21

<Rule name='generateEmail'>
   <concat>
      <ref>global.firstname</ref>
      <s>.</s>
      <ref>global.lastname</ref>
      <s>@sun.com</s>
   </concat>
</Rule>

この規則は 2 つの変数を参照します。

コード例 2-22 に示されているように、Field フィールド内でこの規則を呼び出すことができます。

コード例 2-22 フィールド内での規則の呼び出し

<Field name='global.email'>
   <Expansion>
      <rule name='generateEmail'/>
   </Expansion>
</Field>

これは、プログラミング言語のグローバル変数の概念に似ており、ユーザーフォーム内のみで使用される単純な規則を作成するには便利な方法です。しかし、このスタイルの規則設計には 2 つの問題があります。第一に、規則がどの変数を参照するかがフォーム設計者には不明です。第二に、規則はユーザービューの属性を参照するため、規則はユーザーフォームからしか呼び出せません。一般に、ワークフローでは global.firstname および global.lastname という名前の変数を定義しないため、ほとんどのワークフローからは規則を呼び出すことができません。

規則引数を明示的に渡したり、特定のビューに依存しない名前を使用する規則を作成したりすることにより、これらの問題に対処できます。

コード例 2-23 は、変数 firstnamelastname を参照する規則の修正版を示しています。

コード例 2-23 firstname および lastname 変数を参照する規則

<Rule name='generateEmail'>
   <concat> ¥
      <ref>firstname</ref>
      <s>.</s>
      <ref>lastname</ref>
      <s>@sun.com</s>
   </concat>
</Rule>

コード例 2-24 に示されている規則は、ユーザーフォームから呼び出すことを前提にしていないため、より簡潔でより一般化されています。しかしその場合、次のように明示的な引数を指定して規則を呼び出す必要があります。

コード例 2-24 明示的な引数を指定した規則の呼び出し

<Field name='global.email'>
   <Expansion>
      <rule name='generateEmail'>
         <argument name='firstname' value='$(global.firstname)'/>
         <argument name='lastname' value='$(global.lastname)'/>
      </rule>
   </Expansion>
</Field>

argument 要素の name 属性は、規則内で参照される変数に対応します。これらの引数の値は、ユーザービューのグローバル属性の値に割り当てられます。こうすることで、規則は呼び出し側アプリケーションによって使用される命名規則から孤立した状態に保たれ、規則はほかのコンテキストで使用できるようになります。

ローカル範囲オプション

引数が明示的に規則に渡されていても、明示的な引数として渡されないその他の変数への参照が、システムのデフォルトでは可能になっています。コード例 2-25 は、規則を呼び出しても引数を 1 つしか渡さないワークフローアクションを示しています。

コード例 2-25 規則を呼び出し、単一の引数を渡すワークフローアクション

<Action>
   <expression>
      <setvar name='email'>
         <rule name='generateEmail'>
            <argument name='firstname' value='$(employeeFirstname)'/>
         </rule>
      </setvar>
   </expression>
</Action>

規則が評価されると、ワークフロープロセッサは変数 lastname の値を指定するよう求められます。この名前のワークフロー変数が存在しても、それがこの規則での使用を意図した変数ではない場合もあります。意図していない変数参照を防ぐために、規則を定義する際にローカル範囲オプションを指定することが推奨されています。

このオプションは、Rule 要素の localScope 属性を true に設定することによって有効になります。

コード例 2-26 Rule 要素の localScope 属性を true に設定

<Rule name='generateEmail' localScope='true'>
   <concat>
      <ref>firstname</ref>
      <s>.</s>
      <ref>lastname</ref>
      <s>@sun.com</s>
   </concat>
</Rule>

このオプションを設定することにより、規則は呼び出し内で引数として明示的に渡された値のみを参照することが許可されます。前述のワークフローアクションの例から呼び出した場合、lastname 変数の参照は NULL を返すことになります。

いろいろなコンテキストでの一般的な使用を意図した規則には、常にローカル範囲オプションを使用するようにします。

規則引数宣言

必須ではありませんが、規則によって参照される可能性のあるすべての引数の明示的な宣言を、規則定義内に含めるのが良い方法であると考えられています。引数宣言には数々の利点があり、次のようなことが可能です。

コード例 2-27 に示されているような generateEmail 規則を再作成することも可能です。

コード例 2-27 generateEmail 規則

<Rule name='generateEmail' localScope='true'>
   <RuleArgument name='firstname'>
      <Comments>ユーザーの名</Comments>
   </RuleArgument>
   <RuleArgument name='lastname'>
      <Comments>ユーザーの姓</Comments>
   </RuleArgument>
   <RuleArgument name='domain' value='waveset.com'>
      <Comments>企業のドメイン名</Comments>
   </RuleArgument>
   <concat>
      <ref>firstname</ref>
      <s>.</s>
      <ref>lastname</ref>
      <s>@</s>
      <ref>domain</ref>
   </concat>
</Rule>

Comments 要素には、規則を調べるユーザーに役立つと思われる、任意の量のテキストを含めることができます。

規則は修正され、domain という名前の別の引数が定義されています。この引数にはデフォルト値 waveset.com が指定されています。呼び出し側が domain という名前の明示的な引数を渡さない場合に、規則によってデフォルト値が使用されます。

コード例 2-28 の呼び出しは、文字列 john.smith@sun.com を生成します。

コード例 2-28 john.smith@sun.com 文字列を生成する呼び出し

<rule name='generateEmail'>
   <argument name='firstname' value='john'/>
   <argument name='lastname' value='smith'/>
</rule>

コード例 2-29 の呼び出しは、文字列 john.smith@yourcompany.com を生成します。

コード例 2-29 john.smith@yourcompany.com 文字列を生成する呼び出し

<rule name='generateEmail'>
   <argument name='firstname' value='john'/>
   <argument name='lastname' value='smith'/>
   <argument name='domain' value='yourcompany.com'/>
</rule>

コード例 2-30 の呼び出しは、文字列 john.smith@ を生成します。

コード例 2-30 john.smith@ 文字列を生成する呼び出し

<rule name='generateEmail'>
   <argument name='firstname' value='john'/>
   <argument name='lastname' value='smith'/>
   <argument name='domain'/>
</rule>


上記の例では、domain 引数に NULL 値が渡されますが、デフォルト値は使用されません。呼び出しに明示的な引数を指定すると、引数が NULL であってもデフォルト値が使用されます。


ロックされた引数

引数をデフォルト値で宣言する方法は、規則の開発とカスタマイズをより簡単にするには便利な方法です。規則内に場合によって変化する定数値がある場合は、その値を規則式の中深くに組み込むのではなく、引数で定義すると、値の特定と変更がより容易になります。

Identity Manager IDE には、引数のデフォルト値を変更することによって規則を設定するための、簡素化された GUI が備わっており、この方法は規則式全体を編集するよりもはるかに簡単です。

しかし、一度引数を宣言したなら、規則の呼び出し側が明示的な引数を渡してデフォルト値を上書きすることも可能です。引数値の制御を呼び出し側に渡したくない場合があるかもしれません。そうならないようにするために、引数をロックすることができます。RuleArgument 要素に locked 属性を組み込んで true の値を指定することにより、引数はロックされます (コード例 2-31 を参照)。

コード例 2-31 引数のロック

<Rule name='generateEmail' localScope='true'>
   <RuleArgument name='firstname'>
      <Comments>The first name of a user</Comments>
   </RuleArgument>
   <RuleArgument name='lastname'>
      <Comments>The last name of a user</Comments>
   </RuleArgument>
   <RuleArgument name='domain' value='waveset.com' locked='true'>
      <Comments>The corporate domain name</Comments>
   </RuleArgument>
   <concat>
      <ref>firstname</ref>
      <s>.</s>
      <ref>lastname</ref>
      <s>@</s>
      <ref>domain</ref>
   </concat>
</Rule>

上記の例では、引数 domain がロックされています。これは、呼び出し側がこの引数に値を渡そうとしても、その値は常に waveset.com であるという意味です。ドメイン名が waveset.com ではないサイトでこの規則を使用する場合、管理者がしなければならないことはこの規則を編集して引数の値を変更することだけです。この規則式を理解するまたは変更する必要はありません。


規則のセキュリティー保護

規則に資格などの機密情報が含まれている場合や危険な副作用がありえる Java ユーティリティーに規則が呼び出される場合は、規則が意図しない方法で使用されないようにするために、規則をセキュリティー保護すべきです。

規則のセキュリティー保護がとりわけ重要になるのは、フォームから呼び出される場合です。フォームの規則はセッション上で実行されるので、セッションを作成できるユーザーに API または SOAP リクエストのいずれかを通じて規則が露呈することもありえます。

ここでは、次の内容を説明します。

規則のセキュリティー保護

規則をセキュリティー保護するには、次の手順に従います。

よりセキュアな規則を参照する規則の作成

ある規則を呼び出すと、まずその規則に対して承認されます。承認されたなら、その規則はそれ以上承認をチェックすることなくほかの規則を呼び出すことができます。このようにして、ユーザーはセキュアな規則に間接的にアクセスできます。ユーザーはセキュアな規則の内容を表示したり変更したりすることはできません。アクセスしている規則を通してセキュアな規則を呼び出すことだけが可能です。

よりセキュアな規則を参照する規則を作成するには、規則を作成するユーザーがそれぞれの規則が含まれる両方の組織を制御する必要があります。一般に、セキュアな規則は Top などの上位レベルの組織にあります。一方、セキュリティーが保証されない規則は、より多くのユーザーがアクセスする下位レベルの組織に配置されます。



前へ      目次      次へ     


Part No: 820-1583.   Copyright 2006 Sun Microsystems, Inc. All rights reserved.