すべてのカスタマイズ ファイルに共通の XML の使用方法
内容
casp1032jp
内容
このセクションでは、カスタマイズ ファイル間で使用できる共通の XML エレメントおよび戦略について説明します。
パラメータについて
さまざまなインスタンスで <param> エレメントを使用して、OneClick XML ファイル内のパラメータ値を参照できます。ここでは、<param> エレメントを使用する可能性のあるいくつかの一般的なケースを示します。
- パラメータを Web ページに渡す必要がある場合は、<param> エレメントを <url> エレメントの子エレメントとして使用します。例については、「ブラウザの起動」を参照してください。
- パラメータをアプリケーションに渡す必要がある場合は、<param> エレメントを <launch-application> エレメントの子エレメントとして使用します。例については、「OneClick からのアプリケーションの起動」を参照してください。
- パラメータをコマンドに渡す必要がある場合は、<param> エレメントを <command> エレメントの子エレメントとして使用します。「ブラウザの起動」、「OneClick からのアプリケーションの起動」、および「Web サーバ スクリプトの起動」を参照してください。
- 一連の値をフォーマットする必要がある場合は、<param> エレメントを標準の HTML フォーマット エレメントと共に使用します。例については、「モデル アイコン ツールチップの定義」を参照してください。
- 属性の値を操作する必要がある場合は、いずれかのレンダラにアクセスするときに <param> エレメントを使用する必要が生じることがあります。
<param> タグを使用して指定できる内容については、「データの取得 - 値のレンダリング」を参照してください。
データの取得 - 値のレンダリング
処理対象となるモデル タイプ パラメータに関するデータを OneClick から取得することは、OneClick インターフェースのカスタマイズの基本的なプロセスです。エレメントのセットは、OneClick からデータを取得またはレンダリングする機能を提供します。これらのエレメントまたはタグは、テーブル列、フィールド サブビュー列、メニュー アイテムの <param> エレメント、および <dynamic-renderer> 内の <render> エレメントに表示するデータの取得中に使用され、以下のテーブルに表示されます。
エレメント | Description |
<attribute> | CA Spectrum 属性を指定するのに使用されます。 |
<select> | 別の属性やパラメータなどの値に基づく何らかの項目を指定するのに使用されます。 満たされる特定の条件に基づいて値を選択するのに使用されます。ごく一般的には、<select> this <if>condition1, <select> that <if> condition2 となります。 |
<expression> | 数式を定義するのに使用されます。 |
<renderer> | ユーザに提示するために RAW データを加工して特定の形式に調整する任意の数のレンダラを定義したり、これらのレンダラにアクセスするのに使用されます。 |
<dynamic-renderer> | 属性条件フィルタの値に基づいてレンダラを指定します。 |
<message> | 列にプレーン テキスト値を指定するのに使用されます。 |
これらのエレメントは任意の数だけ自由に組み合わせて、チェーン内で 1 つのエレメントからの出力が次のエレメントへの入力として機能するよう、連結して使用できます。<attribute> タグは属性値を生成し、入力を受け入れないため、エレメントのチェーンの先頭に配置する必要があります。<message> タグは入力を受け入れないため、値のレンダリングに使用されるエレメントのチェーンの先頭に配置する 必要があります。
select case の使用
OneClick インターフェースに何らかの項目を条件付きで表示する場合は、多くのプログラミング言語で使用されるものに類似した決定構造を作成するために、<select> エレメントと <case> エレメントを使用することができます。<select> エレメントと <case> エレメントは以下のように使用します。
<select> <case> <expression>the expression to evaluate</expression> <yield>what to yield if the expression is true</yield> </case> <case> <expression>the expression to evaluate</expression> <yield>what to yield if the expression is true</yield> </case> . . . <default>what to yield if no matches are found</default> </select>
例: イメージ定義ファイルは、モデルの状態に応じて OneClick デバイス モデルのアイコン上に表示されるイメージを選択するのに使用される、<select> エレメントと <case> エレメントの例を示しています。
レンダラを使用した属性出力の操作
OneClick テーブルで指定した属性の表示方法を操作するのに使用できるいくつかの組み込み属性レンダラがあります。<renderer> エレメントを使用して、これらのいずれかのレンダラにアクセスします。エレメントのテキストは完全修飾 Java クラス名である必要があります。使用可能な各 Java クラス名について、以下に説明します。
注:
以下に示すレンダラの概念を十分に理解するには、プログラミングについて多少の知識を備えている必要があります。<param> エレメントを使用して、レンダラにパラメータを渡すことができます。<param> エレメントのテキストはパラメータ値です。<param> エレメントには、パラメータの名前を指定する名前属性が必要です。
例
以下の例では、パラメータ trueTag を No、パラメータ falseTag を Yes に設定して BooleanRenderer を指定します。各レンダラにはパラメータのセットがあり、各レンダラは異なる方法で定義されます。
<renderer> <param name="trueTag">Enabled</param> <param name="falseTag">Disabled</param> com.aprisma.spectrum.app.util.render.BooleanRenderer </renderer>
ブール値レンダラ
ブール値レンダラのクラス名は com.aprisma.spectrum.app.util.render.BooleanRenderer です。このレンダラは、入力ブール値に対して列挙文字列を出力します。デフォルトでは、TRUE に対して「Yes」がレンダリングされ、FALSE に対して「No」がレンダリングされますが、以下のパラメータを使用して他のエレメントまたはテキストを指定することもできます。
- trueTag - TRUE に対してレンダリングするタグまたはテキスト
- falseTag - FALSE に対してレンダリングするタグまたはテキスト
以下の例では、TRUE/FALSE 出力が逆になっています。
<renderer> <param name="trueTag">No</param> <param name="falseTag">Yes</param> com.aprisma.spectrum.app.util.render.BooleanRenderer </renderer>
入力値が TRUE の場合は「No」がレンダリングされ、FALSE の場合は「はい」がレンダリングされます。
コメント テキスト レンダラ
コメント テキスト レンダラのクラス名は com.aprisma.spectrum.app.util.render.CommentedTextRenderer です。このレンダラは、一部のレンダラ(たとえば、DateRenderer)によって追加される HTML コメント プレフィックスを取り除きます。HTML コメントの終了文字シーケンスの最初のオカレンス(<!---comment text ---> など)を検索し、残りの文字列を返します。
日付レンダラ
日付レンダラのクラス名は com.aprisma.spectrum.app.util.render.DateRenderer です。このレンダラは、Java の DateFormat を使用して日付と時刻を出力します。レンダラへの入力が長整数(たとえば、タイプ java.lang.Long)である場合、日付と時刻をミリ秒単位で表すことが想定されます。入力がその他の数値タイプである場合は、日付と時刻を秒単位で表す整数であることが想定されます。そうでない場合、他の唯一の有効な入力タイプは java.util.Date です。出力文字列の先頭には、HTML コメント(<!---コメント テキスト --->)で囲まれた日付と時刻の数値が付加されます。出力例は以下のようになります。
<!--1089808869000-->Jul 14, 2004 8:41:09 AM EDT
並べ替えのためにコメント タグ内で数値プレフィックスを使用します。プレフィックスを使用しない場合、
CA Spectrum
はフォーマットされた日付と時刻の文字列に基づいて並べ替えを行い、これは正常に動作しません。そのため、DateRenderer は列の <content> エレメント セクション内でのみ使用する必要があります。表示のためのプレフィックスを取り除くには、<swing-cell-template> セクションで CommentedTextRenderer を使用します。以下に例を示します。<content> <attribute>0x11620</attribute> <! -- an attribute that contains an integer date/time in seconds > <renderer> com.aprisma.spectrum.app.util.render.DateRenderer </renderer> </content> <swing-cell-template> <text> <renderer> com.aprisma.spectrum.app.util.render.CommentedTextRenderer </renderer> </text> </swing-cell-template>
列挙属性レンダラ
クラス名は com.aprisma.spectrum.app.util.render.EnumeratedAttrRenderer です。
このレンダラは、属性値に対して列挙文字列を出力します。このレンダラは、
CA Spectrum
データベースから列挙を取得します。「AttrID」パラメータを使用して属性 ID を指定する必要があります。最も一般的には、このレンダラの前に、「attrID」パラメータと同じ属性 ID を持つ <attribute> エレメントが配置されます。以下のサンプル XML は、Model_Class 属性の列挙値(0x11ee8 ID)をレンダリングします。<attribute>0x11ee8</attribute> <renderer> <param name="attrID">0x11ee8</param> com.aprisma.spectrum.app.util.render.EnumeratedAttrRenderer </renderer>
リスト レンダラ
リスト レンダラのクラス名は com.aprisma.spectrum.app.util.render.ListRenderer です。このレンダラは、Java コレクションのコンポーネント、またはカンマ区切り文字列としての任意のタイプの配列を出力します。
Null レンダラ
クラス名は com.aprisma.spectrum.app.util.render.NullRenderer です。
このレンダラは、空の文字列として null 入力値を出力します。
オブジェクト ID レンダラ
このレンダラは、オブジェクト識別子(OID)を出力します。予期される入力値はタイプ CsObjectID です。
クラス名は com.aprisma.spectrum.app.util.render.ObjectIDRenderer です。
サポートされているパラメータ:
- term - レンダリングする OID の特定の用語のインデックスを指定する整数値
- startTerm - レンダリングする OID の最初の用語のインデックスを指定する整数値
- endTerm - レンダリングする OID の最後の用語のインデックスを指定する整数値
用語のインデックスは 1 から開始されます。endTerm を指定せずに startTerm を指定した場合は、startTerm から OID の最後の用語までの OID 部分がレンダリングされます。startTerm を指定せずに endTerm を指定した場合は、最初の用語から endTerm までの OID 部分がレンダリングされます。
MIB テーブルの行インスタンスのレンダリングには、ObjectIDRenderer が最もよく使用されます。<expression> エレメントで getRowId() メソッドを使用して、行インスタンスを取得します。その後、ObjectIDRenderer に結果を渡すことができます。たとえば、以下の列は行インスタンスの最初の用語をレンダリングします。
<column> <name>com.aprisma.spectrum.app.topo.client.ifIndex</name> <content> <expression>getRowId()</expression> <renderer> <param name="term">1</param> com.aprisma.spectrum.app.util.render.ObjectIDRenderer </renderer> </content> </column>
以下の例では、5 ~ 8 の用語をレンダリングします。
<column> <name>com.aprisma.spectrum.app.topo.client.NetworkAddr</name> <content> <expression>getRowId()</expression> <renderer> <param name="startTerm">5</param> <param name="endTerm">8</param> com.aprisma.spectrum.app.util.render.ObjectIDRenderer </renderer> </content> </column>
以下の例では、テーブルに OID 値の最後の用語を表示できるように、式と ObjectID レンダラを結合します。
<column> <name>com.aprisma.spectrum.app.topo.client.ifIndex</name> <content> <expression> ((com.aprisma.spectrum.global.CsObjectID)value()).get_sub_oid( ((com.aprisma.spectrum.global.CsObjectID)value()).get_term_count(), ((com.aprisma.spectrum.global.CsObjectID)value()).get_term_count()) </expression> <renderer> <param name="term">1</param> com.aprisma.spectrum.app.util.render.ObjectIDRenderer </renderer> </content> </column>
概数レンダラ
このレンダラのクラス名は com.aprisma.spectrum.app.util.render.RoundNumberRenderer です。このレンダラは、100 分の 1 の位(小数点以下 2 桁)に四捨五入した数値を出力します。
システム稼働時間レンダラ
このレンダラは、100 分の 1 秒で表される時間の数値を出力します。この時間形式は、sysUpTime などの MIB オブジェクトで使用されます。出力は日、時間、および分(たとえば、30 日 1 時間 55 分)で表されます。
クラス名は com.aprisma.spectrum.app.util.render.SysUpTimeRenderer です。
バイト レンダラ
このレンダラは、バイト単位(バイト、KB、MB、GB、または TB)の整数値を出力します。
クラス名は com.aprisma.spectrum.app.util.render.ByteRenderer です。
インターネット アドレス レンダラ
これは、RFC-3291 で定義されている InetAddress タイプの MIB オブジェクトをレンダリングします。
クラス名は com.aprisma.spectrum.app.util.render.InetAddressRenderer です。
サポートされているパラメータ:
- addressAttrID - InetAddress 属性の ID
- type - RFC-3291 で定義されている InetAddressType
- typeAttrID - InetAddressType の取得に使用される属性の ID
リスト インスタンス レンダラ
リスト タイプ属性の特定のインスタンスの値をレンダリングします。
クラス名は com.aprisma.spectrum.app.util.render.ListInstanceRenderer です。
サポートされているパラメータ:
- oid - レンダリングするインスタンスの OID
- index - レンダリングするインスタンスのインデックス
oid パラメータまたは index パラメータのいずれかを指定する必要があります。
単純整数レンダラ
カンマで区切らない整数値(123,456 ではなく 123456)をレンダリングします。 入力にカンマが許容されないメニュー アイテムで使用される URL 内の整数値を代入するのに使用します。
クラス名は com.aprisma.spectrum.app.util.render.SimpleIntegerRenderer です。
先頭にタイプが追加されたインターネット アドレス レンダラ
アドレスの先頭にタイプが追加された、RFC-4293 で定義されている InetAddress タイプの MIB オブジェクトをレンダリングします。
クラス名は com.aprisma.spectrum.app.util.render.TypePrependedInetAddressRenderer です。
サポートされているパラメータ:
addressAttrID - InetAddress 属性の ID
<dynamic-renderer> について
<dynamic-renderer> エレメントを使用して、<model_class> や <model-type> などの属性条件、またはその他の属性条件の値に依存するレンダラを指定します。属性 ID をキーとして選択し、custom-app-config.xml ファイルで 1 つ以上の <dynamic-renderer> エレメントを指定します。各 <dynamic-renderer> エレメントは、条件と、条件が満たされた場合に使用するレンダラを定義します。
<dynamic-renderer> で使用する構造は以下のとおりです。
<dynamic-renderer> <attribute><KEY_ATTRIBUTE_ID></attribute> CRITERIA <render> . . . </render> <default/> </dynamic-renderer>
以下の表では、<dynamic-renderer> で使用できるエレメントについて説明します。
エレメント | 使用方法と説明 |
<attribute> | 動的レンダラのセットをバインドまた結合するのに使用される <KEY_ATTRIBUTE_ID> を指定します。 |
条件 | フィルタ出力に基づいて使用するレンダラを決定するのに使用される属性フィルタ条件を定義します。 |
<render> | レンダリングする項目を定義します。 |
<default> | 他のいずれの動的レンダラ条件も満たされない場合にデフォルトとして使用する動的レンダラを指定します。 |
属性フィルタ条件と <dynamic-renderer>
通常、属性フィルタ条件には <model-class> と <model-type> を使用します。ネストされた「and」および「or」フィルタの任意の組み合わせで、任意の属性、および複雑な属性フィルタの任意のセットを使用できます。ファイル
<$SPECROOT>
/tomcat/webapps/spectrum/WEB-INF/common/schema/attributefilter.xsd には、属性フィルタの複雑な構文が格納されています。デフォルトの <dynamic-renderer> の指定
条件ステートメントに指定されている <dynamic-renderer> を使用するためのいずれの条件も満たされていない場合に使用する、デフォルトの動的レンダラを定義します。動的レンダラ セットごとにデフォルトの動的レンダラを 1 つのみ指定できます。デフォルトに対するフィルタ条件は指定しないでください。
例: <dynamic-renderer> での属性フィルタ条件の使用
この例では、model_type 属性の値に基づく属性を表示する列を作成します。以下の表に、model_type フィルタ条件に対して表示される属性を示します。
表示する属性 | model_type |
<attribute> 0xffff0000 | <model-type> 0x12 |
<attribute> 0xffff0001 | <model-type> 0x34 と 0x56 |
<attribute> 0xffff0002 | 他のすべてのモデル タイプ(デフォルト) |
フィルタ条件でキーとして指定されている属性の 1 つを選択する必要があります。この例では 0xffff0002 を使用します。custom-app-config.xml ファイルに以下の <dynamic-renderer> エレメントを追加します。
<dynamic-renderer> <attribute>0xffff0002</attribute> <model-type>0x12</model-type> <render> <attribute>0xffff0000</attribute> </render> </dynamic-renderer> <dynamic-renderer> <attribute>0xffff0002</attribute> <or> <model-type>0x34</model-type> <model-type>0x56</model-type> </or> <render> <attribute>0xffff0001</attribute> </render> </dynamic-renderer> <dynamic-renderer> <attribute>0xffff0002</attribute> <render> <attribute>0xffff0002</attribute> </render> <default/> </dynamic-renderer>
例: <content> でのキー属性 ID の使用
この例では、<content> エレメントで定義されているキー属性 ID を持つ <dynamic-renderer> エレメントを指定する列を作成します。
<column> <name>My Column</name> <content> <dynamic-renderer>0xffff0002</dynamic-renderer> </content> </column>
式について
OneClick インターフェースをカスタマイズする際には、いくつかの場所で計算値を表示するために式を使用する場合があります。たとえば、テーブルまたはサブビューに計算値を表示する場合があります。以下のセクションでは、式を使用して属性情報を操作する方法について説明します。
注:
式は標準の Java 式を使用して作成されます。OneClick XML ファイルで式を作成するための以下の手順を実装するには、Java コードに精通している必要があります。Java コードに慣れていない場合は、OneClick ファイルのカスタマイズ時に式を作成する前に、Java リファレンスを参照してください。属性情報の操作
式の最も一般的な用途は属性情報を操作することです。利用可能な属性情報は、式を使用している OneClick コンテキストによって異なります。
式のコンテキストで、以下の表にリストされたメソッドを使用して属性情報を取得できます。
java.lang.Object | attr (int attrID) |
boolean | attrBoolean (int attrID) |
byte | attrByte (int attrID) |
char | attrChar (int attrID) |
double | attrDouble (int attrID) |
float | attrFloat (int attrID) |
int | attrInt (int attrID) |
long | attrLong (int attrID) |
short | attrShort (int attrID) |
以下の例では、デバイスの連絡先を表示する列設定を示します。この例では、属性 0x10b5a (AttributeID.SYS_CONTACT)が null または値が存在しない場合に、式は属性 0x23000c (AttributeID.CONTACT_PERSON)を表示します。
例: 式を使用したデバイスの連絡先の指定
<column id="column-contact-config" xmlns ="http://www.aprisma.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.aprisma.com ../../common/schema/column-config.xsd"> <name>Contact Person</name> <content> <expression> ( attr( AttributeID.SYS_CONTACT ) == null || ((String)attr(AttributeID.SYS_CONTACT)).length() == 0) ? attr( AttributeID.CONTACT_PERSON ) : value() </expression> </content> </column>
同じ結果を達成するもう 1 つの方法では、属性レンダラを使用して SYS_CONTACT 属性値を取得します。その後、value() メソッドを使用する式を使用して返される値にアクセスできます。
例: 属性レンダラを使用した属性値の取得
<column id="column-contact-config" xmlns ="http://www.aprisma.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.aprisma.com ../../common/schema/column-config.xsd"> <name>Contact Person</name> <content> <attribute>AttributeID.SYS_CONTACT</attribute> <expression> (value() == null || ((String)value()).length() == 0) ? attr( AttributeID.CONTACT_PERSON ) : value() </expression> </content> </column>
上記の 2 つの例では、列に対して同じ値を生成します。
値へのサフィックスの追加
式を使用して、テーブルに表示される情報を読みやすくするために値にサフィックスを追加します。
例
この例では、テーブルに値が <value>% として表示されるように、値に「%」文字を追加します。
<expression>value().toString() + "%"</expression>
このメソッドを使用して、テーブルに値が <使用ディスク容量のパーセント>% (64%)として表示されるように、「使用ディスク容量のパーセント」値に「%」文字を追加できます。
式を使用するための注意事項
以下のリストでは、OneClick 式の作成に使用される標準の Java コードのルールの主な例外について説明します。
- 比較演算子XML フォーマットの制限により、比較演算子(&&)を使用することはできません。&& の代わりに && を使用する必要があります。
- より小さい(<)、より大きい(>)演算子より小さい(<)またはより大きい(>)演算子を使用することはできません。代わりに、それぞれ < と > を使用する必要があります。
- 減算式OneClick は、非標準の結合性を使用して減算式を処理します。減算は、左から右への標準の結合性ではなく、右から左への結合性を使用して行われます。OneClick は以下のように減算を処理します。A - B - C = A - (B - C)これに対し、標準の減算式の処理は以下のとおりです。A - B - C = (A - B) - C
XML ファイルの参照
OneClick XML ファイルをカスタマイズする際に、以下の理由により、単一の XML ファイルを 2 つ以上の XML ファイルに分割する必要が生じる場合があります。
- 一部の XML ファイルは複雑すぎて読みにくくなります。この場合、XML ファイルを 2 つ以上のファイルに分割すると、コードを整理された状態に保ち、将来、読み取り可能かつ編集可能にする上で役立ちます。
- XML コードの一部のセクションを再使用する場合があります。この XML コードを別のファイルに配置すると、新しいファイル、または同じファイルの新しいセクションにコピーして貼り付ける代わりに、複数のファイルから参照することができます。
標準の XML ID および idref 属性を使用して、分割されたコードをラベル付けおよび参照します。
注:
ID や idref などの XML 標準については、以下を参照してください。イメージの参照
XML 内からイメージ ファイルを参照する必要が生じる場合があります。ファクトリ
<$SPECROOT>
/tomcat/webapps/spectrum/images ディレクトリまたはカスタム <$SPECROOT>
/custom/images ディレクトリ内のイメージ ファイルを参照する際には、イメージ ディレクトリを先頭とするパス(たとえば、images/myimage.png)を表現します。例については、「例: アイコン設定ファイル」を参照してください。追加またはカスタマイズするイメージ ファイルはすべて
<$SPECROOT>
/custom/images ディレクトリに配置する必要があります。そうしないと、CA Spectrum
または OneClick のアップグレードまたは再インストール時に、追加した新規またはカスタマイズ済みのイメージがすべて削除または上書きされます。ベリファイアを使用したユーザ入力の検証
変更をコミットする前に、<editable> エレメントと共にベリファイア クラスを指定して、ユーザ入力を検証できます。入力が有効でない場合、エラー メッセージが表示されます。利用可能なベリファイアについては、以下のセクションで説明します。
<editable> エレメントの内部に <verifier> エレメントを指定します。<verifier> 内部に、ベリファイア クラスに渡すベリファイア Java クラスおよびオプションのパラメータを指定します。
例: ベリファイアの使用
これは、入力値が 0 ~ 100 (最初と最後の値も含む)であることを検証します。
<editable> <verifier> <class> com.aprisma.spectrum.app.swing.widget.IntegerContainedInRangeInputVerifier </class> <param name="lowValue">0</param> <param name="upperValue">100</param> </verifier> </editable>
OneClick の入力ベリファイア
IntegerContainedInRangeInputVerifier
説明: 入力が指定範囲内の整数値であることを検証します。
Class:com.aprisma.spectrum.app.swing.widget.IntegerContainedInRangeInputVerifier
パラメータ:
- lowValue - 範囲の下限
- upperValue - 範囲の上限
AttrIDInputVerifier
説明: ユーザ入力が有効な属性であることを検証します。
クラス: com.aprisma.spectrum.app.swing.widget.AttrIDInputVerifier
DoubleInputVerifier
説明: ユーザ入力が有効な実数であることを検証します。
クラス: com.aprisma.spectrum.app.swing.widget.DoubleInputVerifier
IPAddressInputVerifier
説明: ユーザ入力が有効な IP アドレスであることを検証します。
クラス: com.aprisma.spectrum.app.swing.widget.IPAddressInputVerifier
IntegerInputVerifier
説明: ユーザ入力が有効な整数であることを検証します。
クラス: com.aprisma.spectrum.app.swing.widget.IntegerInputVerifier
LongInputVerifier
説明: ユーザ入力が有効な長整数であることを検証します。
クラス: com.aprisma.spectrum.app.swing.widget.LongInputVerifier
MACAddressInputVerifier
説明: ユーザ入力が有効な MAC アドレスであることを検証します。
クラス: com.aprisma.spectrum.app.swing.widget.MACAddressInputVerifier
NonEmptyStringInputVerifier
説明: ユーザ入力が空でない文字列であることを検証します。
クラス: com.aprisma.spectrum.app.swing.widget.NonEmptyStringInputVerifier
UnsignedIntInputVerifier
説明: すべての整数属性のデフォルトのべリファイア。ユーザ入力が符号なし整数であることを検証します。
クラス: com.aprisma.spectrum.app.swing.widget.UnsignedIntInputVerifier