高度なカスタマイズ > ビジネスロジックのカスタマイズ > DTI カスタマイズフレームワーク > Microsoft Office の「Windchill」タブのカスタマイズ > 実装例 > サーバー側のカスタマイズ
  
サーバー側のカスタマイズ
カスタム操作の定義
次のファイルは Windchill に標準で付属しています。ファイルは空で、このサンプルカスタマイズに使用できます。
<Windchill>/codebase/config/actions/custom-actions.xml
次の XML テキストを listofactions ドキュメントノードの子ノードとして追加します。
<objecttype name="customization" class="wt.doc.WTDocument">
<action name="DTICustomizationDemo">
<command class="com.ptc.dti.customization.forms.
TICustomizationFormProcessor"
method="execute" windowType="popup"
url="/netmarkets/jsp/customization/partPicker.jsp"/>
</action>
</objecttype>
これにより DTICustomizationDemo 操作が定義されます。この操作は DTI クライアント側から呼び出されます。この操作を呼び出すと、partPicker.jsp が起動されます。この操作が完了すると、応答が DTICustomizationFormProcessor に組み込まれます。
ユーザーインタフェースの設計
この例では、WTPart サーチと複数部品ピッカー機能が必要です。これは、WTPartobjectType とした itemPicker タグを使用して partPicker.jsp に実装されます。
<%@ taglib prefix="wctags" tagdir="/WEB-INF/tags" %>
<%@ include file="/netmarkets/jsp/components/beginWizard.jspf"%>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/dti" prefix="dti"%>
<wctags:externalFormData/>
<input type="hidden" name="fieldsToDisplay" id="fieldsToDisplay"
value="${dti:getCustomActionArg(param.externalFormData)}" />
<input type="hidden" name="selectedParts" id="selectedParts" value=" " />
<wctags:itemPicker id="dtiPartPicker"
inline="true"
pickerCallback="partPickerCallback"
componentId="dtiPartPicker"
pickerTitle="DTI Customization Part Picker Example"
objectType="wt.part.WTPart"
multiSelect="true"
/>
<SCRIPT>
function partPickerCallback(objects) {
var selectedPartsOid = '';
var myJSONObjects=objects.pickedObject;
for(var i=0; i< myJSONObjects.length;i++) {
if(i != 0){
selectedPartsOid += ';'; //partOID separator
}
selectedPartsOid += myJSONObjects[i]["oid"];
}
$("selectedParts").value = selectedPartsOid;
window.pickerCallback = "doNothing";
}
</SCRIPT>
<%@ include file="/netmarkets/jsp/util/end.jspf"%>
* 
wctags:externalFormData タグを使用して DTI データを非表示フィールドの形式で渡します。
dti:getCustomActionArg(param.externalFormData) を使用して、DTI から送信された入力引数を取得します。これは、非表示フィールドとしてフォームプロセッサに渡されます。
この例で、送信される引数は '::' をセパレータとして照会を行う Windchill 部品のプロパティのリストです ((Name::Number::Version::State))。
pickerCallback 関数が定義されます。これは、選択した部品の OID を取得し、セパレータ ';' を使用して文字列に入力してから、その選択した部品の OID のリストを selectedParts の非表示フィールドとしてフォームプロセッサに渡します。次の例は、いくつかのレコードをサーチおよび選択した後の partPicker.jsp を表示しています。
フォームプロセッサの実装
フォームプロセッサは、DTICustomizationFormProcessor.java ファイルに実装されています。fieldsToDisplay および selectedParts などの必須データは Beans のデータから取得されます。
ユーザーは応答を任意のフォーマット (XML、TXT、CSV など) にして、文字列の形でセッションオブジェクトに入力できます。DTI クライアント側にも応答として同じ応答を使用できます。この唯一の要件は、DTI_CUSTOM_KEY=<dtiCustKey>wizardResponsehandler の一部として渡すことです。
setResultNextAction メソッドのサンプルコードを次に示します。
String responseString =
“<RESULTS>
<Result0 Name="01-51231.prt" Number="WCDS0000000104"
tate="INWORK" Version="A.1"/>
<Result1 Name="01-51246_2.prt" Number="WCDS0000000150"
tate="INWORK" Version="A.5"/>
<Result2 Name="01-52100.asm" Number="WCDS0000000473"
tate="INWORK" Version="A.2"/>
<Result3 Name="01-512040.asm" Number="WCDS0000000654"
tate="INWORK" Version="A.1"/>
<Result4 Name="01-51251a.prt" Number="WCDS0000000055"
tate="INWORK" Version="A.1"/>
<Result5 Name="01-512106a.prt" Number="WCDS0000000363"
tate="INWORK" Version="A.1"/>
</RESULTS>”;
String dtiCustkey = "DTI_CUST_DATA" + System.currentTimeMillis();
clientData.getRequest().getSession().setAttribute(dtiCustkey, responseString);
wizardResponseHandler += "&DTI_CUSTOM_KEY="+ dtiCustkey;
ここで、responseString は照会するプロパティと選択した部品に基づく XML 応答として構築されています。
同じ形式のこの同じ応答文字列は DTI クライアント側で使用できるようになります。
実装の詳細については、Windchill インストールで使用できる DTICustomizationFormProcessor.java ファイルを参照してください。