基本的なカスタマイズ > ユーザーインタフェースのカスタマイズ > UI の情報の表示 > UI の検証 > ソリューション > 手順 - 事前検証 > 事前検証のバリデータの実装 > バリデータの登録
  
バリデータの登録
バリデータを作成し、適切な事前検証メソッドを実装した後は、登録するだけです。検証対象の操作または属性に関連付けるために、バリデータを登録する必要があります。
操作のバリデータを登録する場合は、操作名のみを使用して、または操作名とオブジェクトタイプの組み合わせを使用して関連付けを作成します。ほとんどの場合、操作名のみでバリデータの識別を十分に行うことができるので、この方法を推奨します。属性のバリデータを登録する場合は、属性の descriptor ID を使用して関連付けを作成します。
基本的なバリデータ登録
バリデータを登録するには (操作の操作名のみを使用)、以下のようにエントリを *service.properties.xconf に追加する必要があります。
<Service context="default"
name="com.ptc.core.ui.validation.UIComponentValidator">
<Option requestor="null" serviceClass="[完全修飾バリデータクラス]"
selector="[操作名/属性 descriptor ID]" />
</Service>
*service.properties に適用されると、以下のようなエントリができます。
wt.services/svc/default/com.ptc.core.ui.vali
dation.UIComponentValidator/[操作名/属性 descriptor ID]/null/0=[完全修飾バリデータクラス]/duplicate
この場合、requestor 属性は null となります。つまり操作のオブジェクトタイプは照会で使用されません。
タイプベースのバリデータ登録
操作名に加えて、操作のオブジェクトタイプも使用して登録した方が適していると考えられる場合に使用します。操作名のみの登録と非常によく似ています。違いは、プロパティエントリ内の requestor 属性です。オブジェクトタイプを使用しないバリデータの場合、requestor 属性は null に設定されます。これに対して、オブジェクトタイプを使用して登録するバリデータの requestor 値は、登録対象タイプの完全修飾クラス名となります。
requestor 属性で使用されるクラス名は、actions.xml のクラス名に対応します。
たとえば、以下に一部を示すように、actions.xml ファイルを作成します (注記: 読みやすいように、一部のテキストを省略しています)。
<objecttype name="problemReport" class="wt.change2.WTChangeIssue"
...>
<action name="create" >
...
</action>
...
</objecttype>
この場合、操作名は create です。当然、システムでは create という名称でいくつもの操作が定義されているでしょう。しかし、各 create 操作の検証規則は、作成するオブジェクトタイプによって異なる場合があります。このため、たとえば問題レポート、部品の create 操作などの create 操作に対しては、個別のバリデータを設定する方が適しています。
com.ptc.windchill.enterprise.change2.validators.ChangeMgmtCreateWizardsValidator という名称で定義したバリデータがあり、create 操作に登録するとします。ただし、問題レポートの create 操作にのみ適用されます。
前述の actions.xml エントリを調べ、問題レポートの create 操作が problemReport という名称の objecttype に定義されているかを確認し、さらに重要な事項として、クラスが wt.change2.WTChangeIssue であることを確認します。
actions.xml の class 値をプロパティエントリの requestor 属性として使用することで、検証サービスに対して、オブジェクトタイプが wt.change2.WTChangeIssue である create 操作のバリデータ (com.ptc.windchill.enterprise.change2.validators.ChangeMgmtCreateWizardsValidator) のみの登録を指示することができます。次のようになります。
<Service context="default"
name="com.ptc.core.ui.validation.UIComponentValidator">
<Option
serviceClass="com.ptc.windchill.enterprise.change2.validators.Chan
geMgmtCreateWizardsValidator"
selector="create" requestor="wt.change2.WTChangeIssue" />
</Service>
これですべての指示が含まれます。基本的に、操作のバリデータを登録するときに、操作が特定のオブジェクトタイプ (actions.xml 内で) に関連付けられているものに限定する場合は、actions.xml の class 属性をプロパティエントリの requestor 属性として使用します。
その他の注記:
このタイプベースの照会は、現在のところ actions.xml で定義された操作にのみ使用できます。属性やその他の UI コンポーネントには使用できません。
これを可能にするには、actions.xml エントリの class 属性を具象クラスにする必要があります (インタフェースではありません。多くのケースで、class 属性は現在 wt.fc.Persistable に設定されています)。既存の class 属性はほとんどの場合、インフェースから具象クラスに変更しても問題ありません。ただし、実行する前に修正する actions.xml ファイルのオーナーに確認をしてください。
バリデータ登録の検証
特定の操作または属性に対してどのバリデータが登録されているかを確認するために、実行可能なコマンドラインレポートがあります。作成したバリデータがこのレポートに表示されない場合は、正しく登録されていないため、呼び出すことができません。
以下に例を示します。
単一バリデータの検索 (非タイプベース)
使用例 1 - pasteAsCopy 操作に登録したバリデータの検索:
Y:\>java com.ptc.core.ui.validation.UIComponentValidatorFactory
pasteAsCopy
登録済みバリデータ:
pasteAsCopy ->
com.ptc.core.foundation.saveas.validators.PasteValidator
複数のバリデータの検索 (非タイプベース)
使用例 2 - setState と pasteAsCopy 操作に登録したバリデータの検索:
Y:\>java com.ptc.core.ui.validation.UIComponentValidatorFactory
setState pasteAsCopy
登録済みバリデータ:
setState ->
com.ptc.windchill.enterprise.lifecycle.validators.SetStateValid
ator
pasteAsCopy ->
com.ptc.core.foundation.saveas.validators.PasteValidator
単一バリデータの検索 (タイプベース)
使用例 3 - create 操作に登録したバリデータの検索、actions.xml の objecttype name 属性が problemReport: (注記: タイプベースの照会を行うには、メソッドサーバーが動作中でなければなりません)
Y:\>java com.ptc.core.ui.validation.UIComponentValidatorFactory
create:problemReport
登録済みバリデータ:
create:problemReport(wt.change2.WTChangeIssue) ->
com.ptc.windchill.enterprise.change2.validators.ChangeMgmtCreat
eWizardsValidator
複数のバリデータの検索 (タイプベースと非タイプベースの組み合わせ)
使用例 4 - pasteAsCopy 操作と create 操作に登録したバリデータの検索、create 操作は、actions.xml の objecttype name 属性が problemReport: (注記: タイプベースの照会を行うには、メソッドサーバーが動作中でなければなりません)
Y:\>java com.ptc.core.ui.validation.UIComponentValidatorFactory
pasteAsCopy create:problemReport
登録済みバリデータ:
pasteAsCopy ->
com.ptc.core.foundation.saveas.validators.PasteValidator
create:problemReport(wt.change2.WTChangeIssue) ->
com.ptc.windchill.enterprise.change2.validators.ChangeMgmtCreat
eWizardsValidator