高度なカスタマイズ > ビジネスロジックのカスタマイズ > ワークフロー管理のカスタマイズ > ワークフロータスクページのカスタマイズ > ワークフロータスクの詳細ページの設定 > プロセスの概要
  
プロセスの概要
ワークフロータスクページの設定は次のステップから成ります。
1. カスタマイズする PBO オブジェクトタイプを特定します。
2. カスタマイズするワークフロータスクのタイプを特定します。
3. ワークフロータスクでレンダリングする必要があるテーブルとその順序を特定します。
4. タスクの情報ページにレンダリングする必要がある PBO 操作とその順序を特定します。
5. レンダリングする必要がある PBO 属性を特定します。
6. ワークフロータスクページに配置するタブ、およびテーブルと操作をレンダリングする場所を特定します。
7. 適切なフォーマットでタスクフォームテンプレートオブジェクトのロードファイルを作成し、このファイルを読み込みます。
8. 読み込まれたタスクフォームテンプレートを使用するようワークフロータスクを設定します。
PBO の特定
カスタマイズする PBO オブジェクトタイプを特定します。任意の lifecyclemanaged オブジェクトを PBO として使用できます。ハードタイプとソフトタイプがサポートされています (WTPartWtDocument、議題、ミーティング、EPMDocument など)。PBO の完全なクラス名を特定する必要があります。
ワークフロータスクタイプの特定
タスクページを作成するワークフロータスクタイプを特定します。
PBO とワークフロータスクタイプの組み合わせに応じてタスクを設定できます。これにより、ワークフロータスクのタイプが異なる場合 (レビューとプロモートなど) に異なるコンフィギュレーションを指定する柔軟性が得られます。
タスクタイプの詳細については、「アクティビティ」タブを参照してください。
レンダリングするテーブルの特定と設定
以降のステップでは、「変更適用オブジェクト」テーブルと「成熟度の履歴」テーブルを追加する方法について説明します。
1. タスクの詳細ページにレンダリングする PBO 関連テーブルを特定します。これは OOTB テーブルまたは独自にカスタマイズしたテーブルのいずれでも構いません。
テーブルのコンポーネント ID とそのタイプベースの情報を特定します。
そのコンポーネントで使用されているコンポーネント ID と componentConfigBuilder を調べるには、情報ページのデバッグセクションを参照してください。
ビルダーが TypeBased アノテーションを使用して定義されているかどうかを調べるには、そのコンポーネントのビルダーの Javadoc を参照してください。このコンポーネントのコンポーネント ID が changemanagement.affecteddatatable、ビルダーが TypeBased として設定されているものとします。
TypeBased の詳細については、MVC コンポーネントの概要の「TypeBased:」セクションを参照してください。
2. 上記で特定したテーブルをワークアイテムタスクの操作モデル内に設定します。
設定可能なワークフローページに表示するコンポーネント (「影響を受けるデータ」テーブルなど) のカスタム操作ファイルで新規操作を定義します。コンポーネント名は workflowTask.pbo である必要があり、コンポーネント ID を pboCompId として urlParams に渡す必要があり、useTypeBased には前のステップで調べた値を指定する必要があります。
例:
<action name="TestAffectedData"
resourceBundle="wt.workflow.worklist.worklistResource" >
<component name="workflowTask.pbo"
urlParams="pboCompId=changemanagement.
affecteddatatable&amp;useTypeBased=true"/>
<includeFilter name="configurableTypeBaseFilter"/>
</action>
includeFilter タグはフィルタメカニズムを提供します。このフィルタフレームワークは includeFilter タグが使用されているテーブルコンポーネント/操作に適用されます。
TaskFormTemplate UI では、テーブル操作はタスクフォームテンプレートで選択されている PBO クラスに基づいて表示されます。
コードではソフトタイプが常にサポートされています。ただし、(true としてサポートされている) ハードタイプのフィルタを適用し、UI を介して任意のソフトタイプインスタンスがその独自のタイプとして提供されているが、これが存在しない場合、そのスーパークラスがないかチェックされます。
ワークアイテムの情報ページにあるカスタムタブで、カスタムメニューに表示される操作はそのワークアイテムの PBO タイプに基づいてフィルタされます。
3. 前のステップで作成した新規操作 (TestAffectedData) 用の操作バリデータを作成します。PBO オブジェクトタイプに基づいてコンポーネントをフィルタするフレームワークによって、OOTB 抽象バリデータ (WorkFlowTaskPBOComponentValidator クラス) とオーバーライドメソッド (isComponentValidFor) が提供されます。新規操作の操作バリデータは、特定のコンポーネントで PBO オブジェクトタイプが有効かどうかを定義する isComponentValidFor をオーバーライドする必要があります。
package com.ptc.windchill.enterprise. workitem.validators;
import com.ptc.core.ui.validation.DefaultUIComponentValidator;
import com.ptc.core.ui.validation.UIValidationCriteria;
import com.ptc.core.ui.validation.UIValidationKey;
import com.ptc.core.ui.validation.UIValidationResult;
import com.ptc.core.ui.validation.UIValidationResultSet;
import com.ptc.core.ui.validation.UIValidationStatus;
import com.ptc.netmarkets.util.beans.NmCommandBean;
import com.ptc.core.meta.common.TypeIdentifier;
import com.ptc.windchill.enterprise.history.validators.
LifecycleHistoryNavValidator;
public class TestAffectedDataValidator extends
WorkFlowTaskPBOComponentValidator {
@Override
protected boolean isComponentValidFor(UIValidationKey validationKey,
UIValidationCriteria validationCriteria, WTReference pboRef) {
if (pboRef != null && pboRef.getObject() instanceof
LifeCycleManaged))
return true;

return false;
}

}
4. 適切な .properties ファイルでバリデータを設定します。次のサンプルコードは PboMaturityHistory についての例の続きです。これらの操作を Workitem-service-properties.xconf ファイルに追加します。
...
<Option cardinality="singleton" requestor="java.lang.Object"
serviceClass="com.ptc.windchill.enterprise.workitem.validators.
WorkflowTaskPboMaturityHistoryValidator"
selector="PboMaturityHistory"/> [Option cardinality="singleton"
requestor="java.lang.Object" serviceClass="com.ptc.windchill.enterprise.workitem.
validators.TestAffectedDataValidator" selector="TestAffectedData"/>
これらすべての操作は、ファイル Netmarkets-actionmodels.xml に追加されるモデル workitem third nav configurable の一部である必要があります。

...
<model name="workitem third nav">
<action name="attributes" type="workitem"/>
<action name="routingStatus" type="workitem"/>
<action name="notebook" type="workitem"/>
<action name="discussions" type="workitem"/>
<action name="setupParticipant" type="workitem"/>
<action name="adhocActivities" type="workitem"/>
<action name="workflowTaskPboAttributes" type="object"/>
<action name="saveComplete" type="workitem"/>
<action name="workflowTaskPboAction" type="workitem"/>
<action name="PboMaturityHistory" type="history"/>
<action name="TestAffectedData" type="change"/>
</model>
上記の操作はすべて、コンフィギュレーションファイル (ConfigurableWorkflowTask-typeBasedActionFiler.properties.xconf) で定義されているスーパーセットで検証されます。
タスクの詳細ページに表示される操作がスーパーセットに存在する必要があります。存在しない場合、タスクフォームテンプレートは読み込まれず、タスクフォームテンプレート UI から設定することはできません。
コンフィギュレーションファイルで、次のパターンでエントリを作成する必要があります。
<Property name="actionType.actionName.configurablePbo.supportedTypes/ nonSupportedTypes” overridable="true" default="object Type<comma separated fully qualified class names will be acceptable>"/>
ワークアイテム操作にはフィルタが適用されません。これはワークアイテムに関連付けられている PBO タイプに適用されます。
PBO 操作の特定
1. チェックイン、チェックアウト、編集、情報ページの表示などの PBO 操作を特定します。
2. 特定した操作を "ConfigurableTask.<Fully Qualified ClassName>" モデル (Netmarkets-actionmodels.xml) に追加します。指定されていない場合、PBO のタイプに応じた OOTB 操作モデルが使用されます。
...
<model name="TaskFormTemplateWizardButtons" resourceBundle="com.ptc.netmarkets.workflow.taskformtemplates.taskformtemplatesResource">
<action name="editButton" type="taskformtemplates"/>
<action name="checkinButton" type="taskformtemplates"/>
<action name="cancelButton" type="object"/>
</model>
<model name="ConfigurableTask.wt.part.WTPart">
<submodel name="more part actions"/>
</model>
<model name="ConfigurableTask.wt.change2.WTChangeIssue">
<action name="view" type="object"/>
<action name="edit" type="problemReport"/>
<action name="editModifyContentOnly type="problemReport"/>
</model>


</actionmodels>
PBO 属性のレンダリング
この機能では、特定のレイアウトで定義されている PBO 属性のレンダリングがサポートされます。レイアウトのコンフィギュレーションは次のとおりです。
ライフサイクル管理オブジェクトに作成された新規画面定義に、タスクページ上に PBO 属性をレンダリング可能な workflowTaskPboAttributes 操作が関連付けられます。この操作は EnterpriseUI_actions.xml ファイルに作成され、workitem third nav configurable の下で設定されています。
...
<!-- MULTI OBJECT EDIT ACTIONS -->
<action name="editMultiObjects" id="editMultiObjects" multiselect="true"
selectRequired="true" resourceBundle="com.ptc.core.ui.tableRB">
<command class="com.ptc.windchill.enterprise.object.forms.
EditMultiObjectsFormProcessor"
method="execute" windowType="popup"
url="netmarkets/jsp/object/editMultiObjects.jsp"/>
<includeFilter name="disableForAdminLocked"/>
</action>
<action name="workflowTaskPboAttributes"
resourceBundle="wt.workflow.worklist.worklistResource">
<component name="workflowTask.pbo"
urlParams="pboCompId=workflow.pbo.attributes" />
<includeFilter name="configurableTypeBaseFilter"/>
</action>

</objecttype>
<!-- MULTI OBJECT EDIT ACTIONS END-->
この操作を表示するには、「情報ページ - ワークフロータスク属性」および「workflowTaskPboAttributes」を選択してレイアウトを作成することで、このレイアウトをタスクの詳細ページにレンダリングする必要があります。
これにより、ワークアイテムの情報ページにこの情報がレンダリングされます。
複数タブのサポート
複数タブの使用とその順序の定義がサポートされています。各タブに一連のテーブルと PBO 操作をレンダリングできます。これを設定するメカニズムは、ロードファイルとタスクフォームテンプレートウィザードによって提供されます。詳細については、タスクフォームテンプレートの作成を参照してください。
複数タブの使用とその順序の定義がサポートされています。各タブに一連のテーブルと PBO 操作をレンダリングできます。これを設定するメカニズムは、ロードファイルとタスクフォームテンプレートウィザードによって提供されます。詳細については、タスクフォームテンプレートの作成を参照してください。
ロードファイルのフォーマット
1. 設定可能なタイプのタスクフォームテンプレートを作成します。
これはタスクフォームテンプレート作成用のローダーフォーマットです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TaskFormTemplate SYSTEM "standardX24.dtd">
<TaskFormTemplate>
<name>test</name>
<filePath></filePath>
<taskType>WfTask</taskType>
<pboClass>wt.part.WTPart</pboClass>
<typeFormat>Native</typeFormat>
<description>Out Of The Box configurable workflow Template</description>
<WorkflowTaskTab>
<tabName>TestTab1</tabName>
<tabSetKey>infopage</tabSetKey>
<components>[{"name":"workflowTaskPboAction","type":"workitem"},{"name":"attributes","type":"workitem"},
{"name":"routingStatus","type":"workitem"},{"name":"notebook","type":"workitem"},{"name":"discussions","type":"workitem"},
{"name":"setupParticipant","type":"workitem"},{"name":"adhocActivities","type":"workitem"}]</components>
<pboAction>[{"name":"checkout","type":"wip"},{"name":"REVISEITEMS","type":"pdmObject"}]</pboAction>
<sequence>1</sequence>
</WorkflowTaskTab>
<WorkflowTaskTab>
<tabName>TestTab2</tabName>
<tabSetKey>infopage</tabSetKey>
<components>[{"name":"workflowTaskPboAction","type":"workitem"},{"name":"attributes","type":"workitem"},
{"name":"routingStatus","type":"workitem"}]</components>
<pboAction>[{"name":"checkin","type":"wip"}]</pboAction>
<sequence>2</sequence>
</WorkflowTaskTab>
</TaskFormTemplate>
次のタグから成る <WorkflowTaskTab> を使用してタブを作成します。
<tabName> にはタブ名を指定します。
タブはワークアイテムの情報ページに表示されるので、<tabSetKey> は必ず infopage になります。
<components> は、タスクの詳細ページに表示されるテーブル/操作の JSON です。
<pboAction> は、タスクの詳細ページに表示される workitem に関連付けられているプライマリビジネスオブジェクトに対して実行される操作の JSON です。
<sequence> は、タブが表示される順序です。
2. Windchill システムに読み込んで検証します。
詳細については、タスクフォームテンプレートの作成を参照してください。
ワークフローテンプレートのコンフィギュレーション
新規作成したタスクフォームテンプレートは、レンダリング対象として選択されるアクティビティテンプレートとして、ワークフローテンプレート内で参照される必要があります。
1. ワークフローを開始し、設定するアクティビティに移動します。
2. タスクフォームテンプレートを使用してタスクの詳細ページを生成するには、プリファレンスが設定されている必要があります。
「ユーティリティ」 > 「プリファレンス管理」 > 「ワークフロー」 > 「タスクフォームテンプレートを使用して、タスクの詳細ページを生成します」に移動します。
3. タブが使用可能であることを確認します。