カスタマイズポイント
処理タイプで使用する、新しい値の導入
既成の (OOTB) 在庫処理属性値は固定値のリストです。新しいエントリを追加して使用可能な OOTB 処理タイプをカスタマイズする場合、InventoryDispositionRB.rbinfo ファイルにエントリを定義する必要があります。
InventoryDispositionRB.rbinfo ファイルには、在庫処理値のマスターリストの固定セットが含まれています。InventoryDispositionRB.rbinfo ファイルにエントリを追加するには、
「モデル化された列挙をカスタマイズ」ユーティリティを使用してファイルを編集します。
処理タイプをカスタマイズした後、「タイプおよび属性の管理」ユーティリティを使用します。変更適用アクティビティデータタイプで処理属性を選択し、「制約」タブで「列挙値リスト」を編集します。
処理用のデフォルト値の指定
処理のデフォルト値を選択するには、
「モデル化された列挙をカスタマイズ」ユーティリティツールを使用します。
処理のデフォルト値が在庫処理タイプの制約セットに追加されていない場合、在庫処理 UI メニューリストでは、事前選択された値として空白が表示されます。
新しい処理タイプの追加
在庫処理タイプは、AffectedActivityData リンクに追加される列挙列です。既成の在庫処理タイプが追加されていますが、カスタマイザはタイプマネージャを使用して、AffectedActivityData リンクのグローバル属性として業務ニーズにあった新しい在庫処理タイプを追加することができます。次の手順を実行します。
1. AffectedItemsTableBuilder を拡張し、新しい在庫処理タイプを表示するために getDispositionComponentIds API をオーバーライドします。また、代わりに ChangeTaskAffectedItemsTableViews を拡張する場合は、新しいテーブルビューを返すよう buildConfigurationTable をオーバーライドする必要があります。
@OverrideComponentBuilder
public class CustomAffectedItemsTableBuilder extends AffectedItemsTableBuilder {
@Override
public List<String> getDispositionComponentIds() {
List<String> toReturn = super.getDispositionComponentIds();
toReturn.add("sourceDisposition");
return toReturn;
}
/**
* Returns the configurable table.
*/
@Override
public ConfigurableTable buildConfigurableTable(String id) throws WTException {
return new CustomChangeTaskAffectedItemsTableViews();
}
}
2. ビルダーを登録します。
ビルダーは、MVC フレームワークによって動的に検索されます。フレームワークによってビルダーを検索するには、ビルダーのベースパッケージの場所を登録するか、src_web バリエーションの MVC パッケージにある、XML コンフィギュレーションファイルのビルダークラスを登録する必要があります。次の例では、AffectedItemsTableBuilder を ChangeManagement-configs.xml に登録しています。
◦ ベースビルダーパッケージを登録します。以下を xml コンフィギュレーションファイルに追加します。
<mvc:builder-scan base-package="com.ptc.windchill.enterprise.change2.mvc.builders"/>
◦ または、ビルダークラスを登録します。以下を xml コンフィギュレーションファイルに追加します。
<bean class=" com.ptc.windchill.enterprise.change2.mvc.builders.tables.AffectedItemsTableBuilder "/>
3. @ComponentBuilder アノテーションによって、ビルダーを JSP などのシステム内にあるほかのコンポーネントと接続します。ビルダー内の @ComponentBuilder(“changeTask.affectedItemsTable “) アノテーションに入力する文字列は、JSP に含まれるビルダー ID と同じである必要があります。たとえば、affectedItemsTable.jsp には、変更タスクの変更適用アイテムコンポーネントをリクエストするために、次の記述が含まれます。
<jsp:include
page="${mvc:getComponentURL('changeTask.affectedItemsTable')}"/>
4. ChangeTaskAffectedItemsTableViews を拡張して、リンクに新しい在庫処理タイプを追加します。
public class CustomChangeTaskAffectedItemsTableViews extends ChangeTaskAffectedItemsTableViews {
/**
* Get the disposition columns
*/
@Override
public List<?> getSpecialTableColumnsAttrDefinition(Locale locale) {
List<Attribute.TextAttribute> list = (List<Attribute.TextAttribute>) super.getSpecialTableColumnsAttrDefinition(locale);
list.add(new Attribute.TextAttribute("sourceDisposition", "Source Disposition", null));
return list;
}
@Override
protected Vector<?> createColumnList(String viewName) throws WTException {
Vector<TableColumnDefinition> v = (Vector<TableColumnDefinition>) super.createColumnList(viewName);
if (ChangeTableViews.ALL_VIEW.equals(viewName) || ChangeTableViews.PARTS_VIEW.equals(viewName)) {
v.add(TableColumnDefinition.newTableColumnDefinition("sourceDisposition", isColumnLocked("sourceDisposition")));
}
return v;
}
@Override
protected List<String> getDefaultColumns() {
List<String> l = super.getDefaultColumns();
l.add("sourceDisposition");
return l;
}
}
5. DefaultDispositionHandler を拡張して、新しい在庫処理タイプの値を取得、または設定します。少なくとも、以下の API をオーバーライドする必要があります。
public class CustomDispositionHandler extends DefaultDispositionHandler {
/**
* Get disposition value for a given disposition type.
*/
@Override
public InventoryDisposition getDispositionValue(String componentId, BinaryLink link) {
InventoryDisposition id = null;
String val = "";
if (link != null && AffectedActivityData.class.isAssignableFrom(link.getClass()))
{
try {
PersistableAdapter pa = new PersistableAdapter(link, null, null, null);
pa.load("sourceDisposition");
val = (String)pa.get("sourceDisposition");
} catch (WTException e) {
e.printStackTrace();
}
}
if (val != null && !"".equals(val))
{
id = InventoryDisposition.toInventoryDisposition(val);
}
return id;
}
/**
* Set the disposition value for a given disposition type. */
@Override
public boolean setDispositionValue(String componentId, BinaryLink link, InventoryDisposition disposition) throws WTException {
boolean isUpdated = false;
if (link != null && AffectedActivityData.class.isAssignableFrom(link.getClass()))
{
if ("sourceDisposition".equals(componentId))
{
PersistableAdapter pa = new PersistableAdapter(link, null, null, null);
pa.load("sourceDisposition");
String val = (String)pa.get("sourceDisposition");
isUpdated = InventoryDisposition.toInventoryDisposition(val) != disposition;
if (isUpdated)
{
pa.set("sourceDisposition", disposition.getValue());
pa.apply();
PersistenceHelper.manager.modify(link);
}
}
}
return isUpdated;
}
/**
* Get the default disposition value for a given disposition type
*/
@Override
public InventoryDisposition getDefaultInventoryDisposition(ChangeLinkAttributeBean linkBean, String component_id) {
return super.getDefaultInventoryDisposition(linkBean,component_id);
}
/**
* Get the disposition value set of a given disposition type
*/
@Override
public ArrayList<InventoryDisposition> getInventoryDispositionSet(ChangeLinkAttributeBean linkBean, String component_id) {
return super.getInventoryDispositionSet(linkBean,component_id);
}
@Override
public String getAttributeIdFromColumnId(String columnId) {
return columnId;
}
}
6. サービスプロパティファイル (ChangeManagement-service.properties.xconf) に新しい処理ハンドラを登録します。セレクタの属性は新しい在庫処理タイプで、serviceClass は新しい処理ハンドラです。
<! -- Handler for processing the disposition types -->
<Service context="default" name="com.ptc.windchill.enterprise.change2. handler.DispositionHandler"><Option serviceClass="com.ptc. windchill.enterprise. change2.handler.YourNewDispositionHandler"
selector="YourNewDispositionType"
requestor="null"
cardinality="duplicate"/>
</Service>
7. DispositionDataUtility に対する処理タイプを登録します。業務ニーズに合わせて DispositionDataUtility を拡張することもできます。処理を登録するサービスプロパティファイルは、ChangeManagement-components.dataUtilities.properties.xconf です。
以下に例を示します。
<Option serviceClass="com.ptc.windchill.enterprise.change2. dataUtilities.DispositionDataUtility"
requestor="java.lang.Object"
selector="YourNewDisposition"
cardinality="duplicate"/>
UI からのカスタマイズ
1. サイト管理者は、「タイプマネージャ」に移動して、在庫処理タイプである AffectedActivityDataリンクの新しいグローバル属性を作成します。
2. 「処理タイプで使用する、新しい値の導入」セクションで作成した新しい処理の値に属性を限定します。
3. 複数処理のタイプと値の設定が完了したので、AffectedActivityData リンクに複数処理のインスタンスを作成します。
◦ 「変更適用/結果オブジェクトを選択」ステップに移動して、変更通知を作成してデフォルトの変更タスクの更新を行います。
◦ 新しい処理タイプが変更適用オブジェクトテーブルの列に表示されます。
◦ 新しい処理タイプ (列) 下のドロップダウンには、そのタイプに制限されている新しい処理の値が表示されます。
◦ 処理タイプにおける処理の値を変更するには、「操作」ドロップダウンをクリックして「処理を設定」を選択します。