policy

ポリシーには、順序が指定された一連の<rule>が含まれています。<rule>にはテストする一連の<conditions>と、その条件を満たしたときに順次実行される一連の<actions>が含まれています。

備考

<policy>とはXDSドキュメント上で操作を実行するもので、その主な目的はドキュメントを調べて変更を加えることです。<policy>はドキュメント外のコンテキストを取得して、結果のドキュメントに反映されない副次的動作を発生させることもできます。

次に、<policy>の基本的な操作についての概要を示します。

  • XDSドキュメントをその要素の操作に分割します。操作は、<input>または<output>の子であるすべての要素です。通常、1つの操作は1つのイベント、コマンドまたはステータスを表します。

  • <policy>は、操作ごとに個別に適用されます。<policy>が各操作に順番に適用されるとき、その時点の操作が現在の操作になります。現在の操作であるsrc-dn、src-entry-id、dest-dn、dest-entry-idで記述されたオブジェクトや、現在の操作からの関連付けであるオブジェクトは、現在のオブジェクトになります。

  • <rule>のそれぞれは現在の操作に適用されます。直前の<rule>によって実行されたアクションが原因で、それ以降の<rule>が適用されなくなる場合を除き、すべての<rule>が現在の操作に適用されます。

  • <rule>の<conditions>がテストされ、<rule>の<conditions>が条件を満たす場合、<actions>が適用されます。

変数

DirXMLスクリプトでは、グローバルとローカルの2種類の変数がサポートされます。グローバル変数は、グローバル構成値から値を取得する変数で、ドライバまたはドライバセットとして定義されます。グローバル変数は、読み込み専用で定義されます。ローカル変数は、ポリシー単位で設定される変数です。ローカル変数は、ポリシーとドライバの2種類のスコープのいずれかの可視性を持つことができます。ポリシーのスコープの変数は、その変数が設定されたポリシーによる現在の操作の処理中にのみ可視です。ドライバのスコープの変数は、ドライバーが停止されるまで、同じドライバー内で実行されているすべてのDirXMLスクリプトポリシーから可視です。変数名はXML名の規則に従う必要があります。

グローバル変数とローカル変数には、次のように自動的に定義されるものがいくつかあります。

名前

説明

dirxml.auto.driverdn

グローバル/文字列

現在のドライバのスラッシュ形式のDNです。

dirxml.auto.driverguid

現在のドライバのGUIDです。

dirxml.auto.treename

ローカルeDirectoryインスタンスのツリー名です。

fromNDS

ポリシーローカル/ブーリアン

ソースデータストアがeDirectoryの場合trueです。

ソースデータストアが接続されたアプリケーションの場合falseです。

destQueryProcessor

ポリシーローカル/javaオブジェクト

ターゲットデータストアへのクエリに使用するXdsQueryProcessorのインスタンスです。

srcQueryProcessor

destCommandProcessor

ターゲットデータストアへのクエリに使用するXdsCommandProcessorのインスタンスです。

srcCommandProcessor

dnConverter

DNConverterのインスタンスです。

current-node

ポリシーローカル/ノードセット

<do-for-each>の各反復処理に対応するループ変数です。

current-value

do-reformat-op-attr

current-op

現在の操作です。

<do-set-local-variable>を使用したこの変数の設定は、<arg-node-set>によって指定された最初の操作を現在の操作に設定します。これは、現在のポリシーにおけるそれ以降の実行の間継続されるか、他の値が設定されるまで継続されます。新しい現在の操作は、元の現在の操作と同じ従属グループの要素で、現在のポリシーによって追加されている必要があります。

変数の拡張

多くの条件、アクション、およびトークンでは、それらの属性または内容での動的な変数の拡張がサポートされています 。拡張がサポートされている場合には、$<variable-name>$の形式の埋め込み参照が、指定された名前のローカルまたはグローバル変数の値と置き換えられます。$<variable-name>$は変数名の規則に従う必要があります。指定された変数が存在しない場合、参照が空の文字列で置き換えられます。「$」を使用する必要があり、変数の参照として認識させたくない場合は、「$」を追加してエスケープする必要があります(例、$$100.00の貸し)。変数の拡張表現をサポートする内容と属性は、変数の拡張表現をサポートする句でコメントを記述します。

日付/時刻パラメータ

日付と時刻を扱うトークンには、日付と時刻の表現における形式、言語、およびタイムゾーンを扱う引数があります。日付の形式の引数は、2つの方法のいずれかで指定します。形式が「!」記号で始まる場合は、その形式は名前付き形式です。次の表に、規定された名前の定義を示します。

名前

説明

!CTIME

1970年1月1日午前0時からの秒数です。(eDirectoryの時刻の構文に適合します。)

!JTIME

1970年1月1日午前0時からのミリセカンドの数です。(Javaの時刻に適合します。)

!FILETIME

1601年1月1日からの100ナノセカンド間隔の数です。(Win32 FILETIMEに適合します。)

!FULL.TIME

言語固有のFULLの時刻形式です。

!LONG.TIME

言語固有のLONGの時刻形式です。

!MEDIUM.TIME

言語固有のMEDIUMの時刻形式です。

!SHORT.TIME

言語固有のSHORTの時刻形式です。

!FULL.DATE

言語固有のFULLの日付形式です。

!LONG.DATE

言語固有のLONGの日付形式です。

!MEDIUM.DATE

言語固有のMEDIUMの日付形式です。

!SHORT.DATE

言語固有のSHORTの日付形式です。

!FULL.DATETIME

言語固有のFULLの日付/時刻形式です。

!LONG.DATETIME

言語固有のLONGの日付/時刻形式です。

!MEDIUM.DATETIME

言語固有のMEDIUMの日付/時刻形式です。

!SHORT.DATETIME

言語固有のSHORTの日付/時刻形式です。

形式が「!」で開始されていない場合、その形式はjava.text.SimpleDateFormatとして認識されるパターンのカスタム日付/時刻形式として解釈されます。

言語の引数は、IETF RFC 3066に準拠したIDによって指定できます。システムが認識するIDの一覧は、java.util.Locale.getAvailableLocales()を呼び出し、結果のアンダースコアーをすべてハイフンに置き換えたものになります。言語の引数を省略するか空にすると、デフォルトのシステムの言語が使用されます。

タイムゾーン引数は、java.util.TimeZone.getTimeZone()によって認識される任意のIDで指定できます。システムが認識するIDの一覧は、java.util.TimeZone.getAvailableIDs()を呼び出して得ることができます。タイムゾーンの引数を省略するか空にすると、デフォルトのシステムのタイムゾーンが使用されます。

XPathの評価

一部の条件およびアクションの引数は、XPath 1.0式を取ります。このXPathは、次のコンテキストで評価されます。

  • 式の記述で特に指定されていない場合、コンテキストノードは、現在の操作になります。

  • コンテキストの位置とサイズは1です。

  • 使用可能な変数

    • Identity Managerメタディレクトリエンジン内のスタイルシートに対するパラメータとして使用可能なもの(現在のところ、fromNDS、srcQueryProcessor、destQueryProcessor、srcCommandProcessor、destCommandProcessorおよびdnConverter)。

    • グローバル設定変数。

    • ローカルポリシーの変数。

    • 異なる変数ソース間で名前が衝突している場合は、優先順位はローカル(ポリシースコープ)、ローカル(ドライバスコープ)、グローバルの順になります。

    • XPath構文の制限により、名前にコロン記号を含む変数はXPathからアクセスできません。

  • <policy>で宣言されたネームスペースが使用されます。

  • 使用可能な機能

    • XPath 1.0のすべての組み込み機能。

    • NXSLで提供されているJava拡張機能。

      • プリフィックスをJavaクラスに関連付けるためのネームスペース宣言は、<policy>で宣言する必要があります。

<policy>  <description>My policy</description>  <include name="..\..\Library\My shared policy"/> <rule>   <description>Rule to disallow moving a user</description>   <comment>This rule was added because under no circumsances do we ever want to perform a move.</comment>   <conditions>    <and>     <if-class-name op="equal" mode="nocase">User</if-class-name>     <if-operation op="equal">move</if-operation>    </and>   </conditions>   <actions>    <veto/>   </actions>  </rule>  <rule>   <description>Rule to disallow operations on a disabled user or group</description>   <conditions>    <or>     <if-class-name op="equal" mode="nocase">User</if-class-name>     <if-class-name op="equal" mode="nocase">Group</if-class-name>    </or>    <or>     <if-attr op="equal" mode="nocase" name="Login Disabled">true</if-attr>   </or>   </conditions>   <actions>    <veto/>   </actions>  </rule> </policy> 

内容に使用できる要素

要素

説明

description

<policy>または<rule>の説明です。

rule

include

他のポリシーからルールをインクルードします。

属性

なし

内容の規則

( description ? , ( rule | include ) * )

親要素

なし