基本的なカスタマイズ > ユーザーインタフェースのカスタマイズ > UI の情報の表示 > UI の検証 > 手順 - 事前検証 > ソリューションベースの事前検証の実装
  
ソリューションベースの事前検証の実装
「事前検証シーケンス」セクションで示したように、検証サービスによって実行される最初の事前検証チェックは、インストールされている Windchill ソリューションセットに基づいて、UI コンポーネントを非表示にするかどうかを決定することです。たとえば、Windchill PDMLink がインストールされていない場合は、特定の操作を常に無効にする必要があります。
原則として、このタイプのソリューションベースのロジックは、決してバリデータやフィルタクラスに含めないようにしてください。バリデータまたはフィルタが呼び出された場合、検証対象の UI コンポーネントは適用されるソリューションベースのチェックをすでにパスしていると見なすことができます。
ソリューションベースのロジックはソリューショングループに実装してください。
ソリューショングループの実装
ソリューショングループクラスの実装は非常に簡単です。UIComponentSolutionGroup インタフェースを実装するクラスを作成し、クラス内に getInvalidInstallKeys() メソッドを実装するだけです。そのメソッドで、どのソリューションがインストールされているかを確認し、インストールされているソリューションに基づいて、使用を許可しない操作または UI コンポーネントを表す検証キーリストを返します。
以下のページのクラスは、ソリューショングループの簡単な例です。getInvalidInstallKeys() メソッドで Pro/INTRALINK がインストールされているかどうかを確認します。Pro/I がインストールされていれば、使用を禁止する操作またはコンポーネントを表す検証キーリストを返します。
package com.ptc.windchill.enterprise.myPackage;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import wt.log4j.LogR;
import wt.util.InstalledProperties;
public class MySolutionGroup implements UIComponentSolutionGroup
{
private static UIValidationKey listKey =
UIValidationKey.newInstance("list", "change");
private static UIValidationKey crKey =
UIValidationKey.newInstance("listChangeRequests", "change");
private static UIValidationKey cnKey =
UIValidationKey.newInstance("listChangeNotices", "change");
private static UIValidationKey viewKey =
UIValidationKey.newInstance("view", "change");
/*
* DEFINE ADDITIONAL ACTIONS AND UI COMPONENTS AS NEEDED
*/
private static Logger logger =
LogR.getLogger(MySolutionGroup.class.getName());
public List getInvalidInstallKeys()
{
if (logger.isDebugEnabled()){
logger.debug("ENTERING MySolutionGroup.getInvalidKeys");
}
ArrayList invalidList = new ArrayList();
// if PRO-I is installed, the following UI components are
not valid.
if
(InstalledProperties.isInstalled(InstalledProperties.PRO_I)){
invalidList.add(listKey);
invalidList.add(listKey);
invalidList.add(cnKey);
invalidList.add(viewKey);
}
/*
* ADD ADDITIONAL SOLUTION-BASED CHECKS AS NEEDED
*/
if (logger.isTraceEnabled()){
logger.trace("RETURNING " + (List)invalidList);
}
(logger.(trace("RETURNING " + (List)invalidList))){
logger.debug("EXITING MySolutionGroup.getInvalidKeys");
}
return invalidList;
}
}
検証キーのファクトリメソッドにどの値を含めるかは、作成する検証キーが操作用か属性用かによって異なります。操作の検証キーを作成する場合は、最初の引数が操作名 (*actions.xml から取得)、2 番目の引数がオブジェクトタイプ (*actions.xml から取得) を表します。たとえば、次の product 操作を表す検証キーを作成するには、UIValidationKey.newInstance ("product"、"navigation") を呼び出します。
<objecttype name="navigation" class=""
resourceBundle="com.ptc.core.ui.navigationRB">
<action name="product" renderType="GENERAL">
<command class="netmarkets"
method="servlet/Navigation?tab=product" windowType="page"/>
</action>
...
検証キーの作成
検証キーのファクトリメソッドにどの値を含めるかは、作成する検証キーが操作用か操作モデル用か属性用かによって異なります。
操作の検証キーを作成する場合は、最初の引数が操作名 (*actions.xml から取得)、2 番目の引数がオブジェクトタイプ (*actions.xml から取得) を表します。たとえば、下の product 操作を表す検証キーを作成するには、UIValidationKey.newInstance("product"、"navigation") を呼び出します。
<objecttype name="navigation" class=""
resourceBundle="com.ptc.core.ui.navigationRB">
<action name="product"
renderType="GENERAL">
<command class="netmarkets"
method="servlet/Navigation?tab=product"
windowType="page"/>
</action>
...
操作モデルの検証キーを作成する場合は、最初の引数が操作モデル名 (*actionModels.xml から取得)、2 番目の引数がオブジェクトタイプ (常に "object") を表します。たとえば、下の carambola_sub_model を表す検証キーを作成するには、UIValidationKey.newInstance("carambola_sub_model"、"object") を呼び出します。
<model name="carambola_sub_model">
<action name="ripe" type="carambola" />
<action name="grow" type="carambola" />
</model>
属性の検証キーを作成する場合は、Windchill クライアントアーキテクチャでその属性に使用された descriptor ID を使用します。たとえば、descriptor ID が "iteration" の属性の検証キーを作成するには、UIValidationKey.newInstance("iteration") を呼び出します。
ソリューショングループの登録
ソリューショングループを作成し構築した後は、登録するだけです。以下のようなエントリを作成して、ソリューショングループを *service.properties.xconf に登録します。
<Service context="default"
name="com.ptc.core.ui.validation.UIComponentSolutionGroup">
<Option requestor="null" serviceClass="[完全修飾ソリューショングループクラス名]"
selector="["ChangeMgmtSolutionGroup" など、一意のキー)]" />
</Service>
*service.properties に適用されるエントリは、以下のようになります。
wt.services/svc/default/com.ptc.core.ui.validation.UIComponentSolu
tionGroup/["MySolutionGroup" など、一意のキー]/null/0=[完全修飾ソリューショングループクラス名]
ソリューショングループが登録されると、事前検証を実行する検証サービスが呼び出されるたびに、そのロジックが確認されます。(その結果は、実際には最初の呼出し後にキャッシュされます。)
役割ベースの事前検証の実装
検証サービスによって実行される 2 番目の事前検証チェックでは、役割ベースの UI サービスを呼び出し、管理者ユーザーがコンポーネントを特定のユーザーに対して非表示または無効に設定しているかどうかを調べます。このチェックは検証サービスに組み込まれているので、カスタマイザの実行は不要です。役割ベースの UI サービスを管理者ユーザーとして設定する方法の詳細については、役割ベース UI 機能のカスタマイズ - 操作の表示を参照してください。