高度なカスタマイズ > サービスおよびインフラストラクチャのカスタマイズ > インポートとエクスポートのフレームワーク > IX アプリケーションの作成方法
  
IX アプリケーションの作成方法
エクスポートは、エクスポートアプリケーションを使用して開始します。エクスポートを起動するアプリケーションのコードは、以下のようになります。
ExportHandler appHandler = new ExportHandler ();
Exporter exporter = IxbHelper.newExporter(handle,
IxbHelper.STANDARD_DTD,
clientSettingsElement,
policyFile==null?(File)null:policyFile.getFile());
Iterator iter = objectSet.iterator();
while (iter.hasNext()) {
Persistable ob = (Persistable)iter.next();
exporter.doExport(ob);
}
exporter.finalizeExport();
appHandler.cleanUp ();
アプリケーションエクスポートハンドラ (appHandler) を作成します。これは、ApplicationExportHandler インタフェースの実装または抽象クラス ApplicationExportHandlerTemplate の拡張を行う任意のクラスのインスタンスです。StandardIXBService のエクスポートアプリケーションで、appHandlerApplicationExportHandlerTemplate のサブクラスである ApplicationExportHandlerForJar を拡張します。
appHandler のジョブは、以下のとおりです。
エクスポートオブジェクトを保存するファイルを作成します (JAR ファイルなど)。
クライアントに返されるログを保存します (オプション)。
テンポラリファイルのクリーンアップおよびその他のクリーンアップジョブを実行します (推奨オプション)。
作成するには、appHandler で以下のメソッドを実装する必要があります。
storeLogMessage(...) のメソッドを使用して、クライアントにログを返します。ログを返すメカニズムの実装方法は、開発者に一任されます。ログメッセージを送信しない場合は、エクスポートハンドラを使用して ApplicationExportHandlerTemplate を拡張します。このクラスには、デフォルトの storeLogMessage() があります (空のメソッド)。
ここでのクリーンアップおよびその他の終結タスクはオプションです。これらのジョブは、exporter.finalizeExport() の後に明示的に呼び出す必要があります。
エクスポートした XML を修正する必要がある場合は、出力を変換するためのタスクを実行するメソッドがアプリケーションエクスポートハンドラに含まれることがあります。たとえば、PDXExportHandler には、PDX フォーマットへの XSL 変換のためのメソッドがあります。これらのメソッドは、exporter.finalizeExport() の後に明示的に呼び出す必要があります。
アプリケーションエクスポートハンドラの既存の実装は、以下のとおりです。
PDXExportHandlerApplicationExportHandlerTemplate を拡張します。このクラスは、PDX フォーマットへのエクスポートに関連した特定のタスクを実行します。これには、追加の XML 属性やエレメントの作成、PDX フォーマットへの XSL 変換などが含まれます。
Exporter クラスのインスタンスを作成し、これを使用して exporter.doExport(obj) を呼び出してオブジェクトをエクスポートします。ここで、obj は、エクスポートのために収集されたすべての WT オブジェクトで実行されます。
その後、exporter.finalizeExport() を呼び出し、追加のタスク (別のフォーマットへの変換など) を実行し、appHandler のメソッドを呼び出してエクスポート処理の後のクリーンアップを実行し、クライアントにログメッセージを送信します。
doExport(…) メソッド、doExportImpl(…) メソッド、および StandardIXBService の内部クラス ExportHandler は、1 つのエクスポートアプリケーションの例です。ObjectSet アプリケーションによるオブジェクト構造のナビゲーションの例を参照してください。
前提条件
エクスポート jar ファイルをクライアントの特定の場所に作成するには、StandardIXBServicedoExport API を呼び出す前に、以下の前提条件が満たされている必要があります。
コンテキストキー ISBStreamer.CLIENT_SAVE_AS_FILE は、クライアント側の完全なファイルパスで設定する必要があります。
WTContext.getContext().put(IXBStreamer.CLIENT_SAVE_AS_FILE,CLIENT
JAR);
ここで、CLIENT_JAR はクライアント側の完全なファイルパスです (例: .c:\\mydocuments\\impex.jar)。
Exporter クラス
exporter クラスの詳細を以下に示します。
定義:
public class Exporter extends ExpImporter{…};
コンストラクタ:
Exporter (ApplicationExportHandler _applicationExportHandler,
WTContainerRef _sourceContainer,
String targetDTD,
File localMappingRuleFile,
File policyRuleFile,
String actionName)
throws WTException {
super ("export", ( localMappingRuleFile==null?null:
localMappingRuleFile.getAbsolutePath() ));
//assign Container
sourceContainer = _sourceContainer;
// -- init expActionTuner --
applicationExportHandler = _applicationExportHandler;
dtd = targetDTD;
this.expImpContextData = new ExportContextData();
expActionTuner = new ExportActionTuner (policyRuleFile, actionName);
}
引数の説明は、以下のとおりです。
_applicationExportHandler - インタフェース ApplicationExportHandler の実装、抽象クラス ApplicationExportHandlerTemplate の拡張、または抽象クラス ApplicationExportHandlerForJar の拡張のいずれかを行う任意のクラスのインスタンスです。
クラス ApplicationExportHandlerForJar はクラス ApplicationExportHandlerTemplate を拡張します。ApplicationExportHandlerForJar クラスは、XML およびコンテンツファイルをエクスポート jar ファイルに保存するためのメソッドを提供します。このクラスは、ApplicationData コンテンツおよびローカルファイルシステムに常駐するコンテンツの両方を処理します。
_applicationExportHandler は、結果として生じた XML のコレクション (エクスポートされたオブジェクト) の Jar ファイルを作成します (または、ほかのいずれかの方法で保存します)。以下の 2 つのメソッドを実装する必要があります。
storeContent (ApplicationData);
storeDocument (IxbElement );
sourceContainer: Reference of container.
targetDTD: エクスポート処理で使用する DTD を指定する文字列です。IX フレームワークは、この DTD 文字列に基づいて、オブジェクトに適切なハンドラおよびオブジェクトのドキュメントタイプ定義を見つけます。Windchill リリース 10.X の DTD 文字列は standard20.dtd です。
この目的は一般に、任意の DTD でオブジェクトをエクスポートできるようにすることでした。以下に示すように、クラスのエクスポートハンドラは、DTD 識別子を使用して解決されます。string targetDTD は、エクスポートされるオブジェクトの XML ファイルにも書き込まれるので、インポート処理でオブジェクトのインポートに使用する DTD を判断できます。
localMapppingRules: エクスポート処理の発生時、特定の属性オブジェクトをオーバーライド、変更、または除外するために使用する XML ファイルまたは XSL ファイルです。
以下の XML 規則ファイルは、Team Template 属性をオーバーライドし、エクスポート時にオブジェクトが属していたチームに関係なく、"/System" ドメインの Team Template 属性を "Change Team" にします。
<?xml version="1.0" encoding="UTF-8"?>
<userSettings>
<mappingRules>
<COPY_AS>
<tag>teamIdentity</tag>
<value>*</value>
<newValue>Change Team (/System)</newValue>
</COPY_AS>
</mappingRules>
</userSettings>
XSL 規則ファイルは、テストを実行してエクスポートオブジェクトの名前が "part_c" の場合は Team Template 属性とバージョン情報をオーバーライドし、エクスポートオブジェクトの名前が "PART_B" の場合は Team Template 属性をオーバーライドします。
オーバーライドしない場合は、引数 localMapppingRules で Null を渡します。
policyRuleFile: エクスポート処理の発生時、特定の属性オブジェクトをオーバーライド、変更、または除外するために使用する XSL ファイルです。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@* | node()" priority="-9">
</xsl:template>
<xsl:template match="WTPart">
<xsl:choose>
<xsl:when test="name='part_c'">
<newInfo>
<teamIdentity>Default (/System)</teamIdentity>
<folderPath>/Design</folderPath>
<versionInfo>
<versionId>B</versionId>
<iterationId>2</iterationId>
<versionLevel>1</versionLevel>
</versionInfo>
</newInfo>
</xsl:when>
<xsl:when test="number='PART_B'">
<newInfo>
<teamIdentity>Default (/System)</teamIdentity>
<folderPath>/Design</folderPath>
</newInfo>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
たとえば、ポリシー規則ファイルでは、エクスポート後にデータベース内のエクスポート済み WTPart オブジェクトをチェックアウトするように指定します。エクスポート済み WTDocument オブジェクトの番号が "TESTDOC-1" の場合は、エクスポート後にチェックアウトします。ほかのエクスポート済み WTDocuments については、エクスポート後にデータベースにロックします。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform
version="2.0">
<xsl:output method="xml" indent="no" encoding="UTF-8"/>
<!--
The syntax of Export Policy is standard XSL syntax. The output of
XSLT using the XSL policy file
must only have at most one element of the form:
<actionInfo>
<action>...</action>
</actionInfo>
-->
The following is a sample of a well-formed xsl. In the cases, where
there are no specific actions to be performed, nothing needs to be
done, which is the default action that would transpire as shown in
the uncommented section below.
-->
<xsl:template match="@* | node()" priority="-9">
</xsl:template>
<xsl:template match="WTPart">
<actionInfo>
<action>Checkout</action>
</actionInfo>
</xsl:template>
<xsl:template match="WTDocument">
<actionInfo>
<xsl:choose>
<xsl:when test="number='TESTDOC-1">
<action>Checkout</action>
</xsl:when>
<xsl:otherwise>
<action>Lock</action>
</xsl:otherwise>
</xsl:choose>
</actionInfo>
</xsl:template>
-->
<!-- Do nothing by default -->
<xsl:template match="@* | node()" priority="-9">
</xsl:template>
</xsl:stylesheet>
オーバーライドしない場合は、引数 policyRuleFile で Null を渡します。
actionName : Action name
IxbHelper クラスのファクトリメソッド newExporter() を通じて、Exporter のインスタンスを作成する必要があります。例:
IxbHelper.newExporter (…..);
Exporter を使用したオブジェクトのエクスポート
exporter などの Exporter クラスのインスタンスを作成すると、それを使用してトップレベルオブジェクトをエクスポートできます。オブジェクト obj をエクスポートするための呼び出しは、exporter.doExport(obj); になります。
実際には、これによって Exporter クラスのメソッド doExport (Object obj, String targetDTD, String targetElem) が呼び出されます。
このメソッドで、オブジェクト obj の実際のエクスポートハンドラが作成されます。
* 
XML ファイルに基づいて、使用可能なエクスポートハンドラのリストが <Windchill>\registry\ixb\handlers フォルダに作成されます。Exporter のコンストラクタに間違った DTD (システムで使用できない DTD) を渡した場合、ハンドラが作成されないため、オブジェクトをエクスポートすることはできません。エクスポートハンドラのエントリを XML ファイルに追加する方法については、エクスポート/インポートハンドラの作成方法を参照してください。
複数のオブジェクトがある場合は、1 つずつ exporter に渡す必要があります。
exporter.doExport(collection)
オブジェクトをすべてエクスポートした後、exporter.finalizeExport(); を呼び出す必要があります。
appHandler のクリーンアップメソッド (存在する場合) を呼び出すことができます。これでエクスポートの完了です。
* 
インストール情報とともに、コメント付きのサンプルファイルが配布されています。
インポートの動作
jar ファイルの XML ファイルからオブジェクトをインポートするには、インポートアプリケーションで以下の手順を実行する必要があります。
1. インポートする jar ファイルを読み取り、jar ファイルに含まれている XML ファイルのリストを抽出するツールを作成します。実装例については、クラス IXBJarReader を参照してください。
2. Importer クラスのインスタンスに渡す文字列 ruleFileName を準備します。文字列 ruleFileName は、インポートアプリケーションの構造に応じて、IxbStreamer、ユーザー、Null 値を割り当てられた文字列、または別の場所から取得できます。
3. policyFile (Null でない場合) を処理し、インポートポリシーを含む XSL StreamSource を作成します。
4. アプリケーションインポートハンドラ appHandler を作成します。これは、インタフェース ApplicationImportHandler の実装または抽象クラス ApplicationImportHandlerTemplate の拡張のいずれかを行う任意のクラスのインスタンスです。
5. Importer クラスのインスタンス (importer) を作成します。
6. jar ファイルの XML ファイルのリストを取得します。
7. XML ファイルから IxbDocuments を作成します。
8. IxbDocument で、以下の手順を実行します。
アプリケーションに渡される操作名があり、policyFile が Null の場合は、その操作名を IxbDocument に適用します。policyFile が Null でない場合は、policyFile の操作名と操作情報を IxbDocument に適用します。
以下のインポート処理を呼び出して、それらを 1 つずつ importer に送ります。
importer.doImport(IxbDocument Doc);
importer.finalizeImport();
9. 必要に応じて、クリーンアップを実行します。
10. クライアントにログメッセージを送信します。
doImport(...), doImportImpl(...) メソッドおよび StandardIXBService の内部クラス ImportHandler は、1 つのインポートアプリケーションの例です。詳細については、ObjectSet アプリケーションによるオブジェクト構造のナビゲーションを参照してください。
10 とおりのいずれかの方法でバージョン化オブジェクトをインポートできます。インポート方法は、各インポートオブジェクトの IxbDocument fileXML に書き込まれた操作名と操作情報によって決まります。インポートアプリケーションを作成する開発者は、操作名とそれらの意味を理解して正しく適用する必要がありますが、オブジェクトハンドラは Actor クラスを考慮する必要はありません。使用可能なすべての操作名のリストは、<Windchill>\codebase\registry\ixb\handlers\actor.xml ファイルにあります。
すべての操作には、それぞれに異なる 3 つの重要なメソッド previewObjectcreateObject、および storeObject があります。IxbDocument fileXML に渡される操作名と操作情報に基づいて、ClassExporterImporterTemplate および ExpImpForVersionedObject クラスで適切なアクターが作成され、バージョン化オブジェクトのプレビュー、作成、および保存のためにそのアクターのメソッドが呼び出されます。
資料として、アクター名のリストを以下に示します。
1. PickExistingObject: XML ファイルのオブジェクトと同じ ufid または同じ (名前、番号、バージョン、作業版数) を持つオブジェクトがデータベースに存在するかどうかを調べます。このようなオブジェクトが存在する場合、アクターがそのオブジェクトを更新の候補だと判断すればフレームワークによってオブジェクトが更新され、そうでなければ何も実行されません。それ以外の場合は、XML ファイルのオブジェクトをインポートします。
2. NewIteration: データベースで次に使用できる作業版数として、XML ファイルのオブジェクトをインポートします。
例:XML ファイルのオブジェクトのバージョンまたは作業版数がデータベースにない場合、インポートされるオブジェクトは XML ファイルで指定されたバージョンまたは作業版数を取得します。データベースのオブジェクトの最新のバージョンまたは作業版数が B.2 の場合、インポートされるオブジェクトのバージョンまたは作業版数は B.3 になります。
3. NewVersion: データベースで次に使用できるバージョンとして、XML ファイルのオブジェクトをインポートします。
例:XML ファイルのオブジェクトのバージョンまたは作業版数がデータベースにない場合、インポートされるオブジェクトは XML ファイルで指定されたバージョンまたは作業版数を取得します。データベースのオブジェクトの最新のバージョンまたは作業版数が B.2 の場合、インポートされるオブジェクトのバージョンまたは作業版数は C.1 になります。
4. CheckOut: XML ファイルのオブジェクトのバージョンまたは作業版数を検索します (データベースにマスターオブジェクトが存在するかどうかを調べます)。XML ファイルのオブジェクトのバージョンがない場合は、エラーを生成します。それ以外の場合は、XML ファイルのオブジェクトと同じバージョン (作業版数は異なる可能性があります) を持つオブジェクトのインスタンスをデータベースで検索します。そのようなオブジェクトが存在する場合は、データベースのオブジェクトの最新の作業版数をチェックアウトし、XML ファイルの情報を使用して更新します。同意します。それ以外の場合は、エラーを生成します。チェックインされます。
5. ImportNonVersionedAttr: XML ファイルのオブジェクトと同じ ufid または同じ (名前、番号、バージョン、作業版数) を持つオブジェクトを検索します。そのようなオブジェクトが存在する場合は、XML ファイルの情報を使用してオブジェクトを更新します。それ以外の場合は、エラーを生成します。
6. UpdateInPlace: XML ファイルのオブジェクトと同じ ufid または同じ (名前、番号、バージョン、作業版数) を持つオブジェクトをデータベースで検索します。そのようなオブジェクトが存在し、チェックアウトされている場合は、XML ファイルの情報を使用してオブジェクトを更新します。それ以外の場合は、エラーを生成します。
7. UnlockAndIterate: XML ファイルのオブジェクトと同じ ufid または同じ (名前、番号、バージョン、作業版数) を持つオブジェクトをデータベースで検索します。そのようなオブジェクトが存在し、ロックされている場合は、ロックを解除して作業版数化し、XML ファイルの情報を使用してオブジェクトを更新します。それ以外の場合は、エラーを生成します。
8. CreateNewObject: インポートポリシーファイルに指定された新しい名前、番号、バージョン、作業版数を持つ新しいオブジェクトを作成します。その他の情報は、XML ファイルから抽出されます。この機能は、単独では使用できません。
* 
このオプションは、新規オブジェクト ID を指定するポリシーファイルなしでは使用できません。
ImportPolicy ファイルで指定する必要がある新しい情報のフォーマットは、以下のとおりです。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<!--
The syntax of Import Policy is standard XSL syntax. The output of XSLT using
the XSL policy file must only have at most one element of the form:
<actionInfo>
<action>...</action>
</actionInfo>
The following is a sample of a well-formed xsl.In the cases, where there are no specific actions to be performed, nothing needs to be done, which is achieved by the following:
<xsl:template match="@* | node()" priority="-9">
</xsl:template>
-->
<xsl:template match="@* | node()" priority="-9">
</xsl:template>
<xsl:template match='WTPart'>
<actionInfo>
<action>PickExistingObject</action>
</actionInfo>
</xsl:template>
<xsl:template match='WTDocument'>
<actionInfo>
<action>PickExistingObject</action>
</actionInfo>
</xsl:template>
<xsl:template match='EPMDocument'>
<actionInfo>
<action>PickExistingObject</action>
</actionInfo>
</xsl:template>
</xsl:stylesheet>
* 
<actionInfo> が必ず存在する必要があります。
基準には、XML ファイル内のオブジェクトの任意の有効な属性を使用できます。
<xsl:choose> 間には、異なる基準と異なる操作名を持つ多くの <xsl: when test ....> が存在する場合があります。
操作パラメータを指定できるのは、CreateNewObject と SubstituteObject のみです。操作パラメータは <newName><newNumber><newVersion><newIteration> の 4 つのみで、これらすべてを指定する必要があります。
SubstituteObject: ImportPolicy ファイルで指定された名前、番号、バージョン、および作業版数を持つデータベース内のオブジェクトを XML ファイルのオブジェクトに置き換えます。そのようなオブジェクトが存在しない場合は、例外を生成します。この場合のタグおよびパラメータのフォーマットは、CreateNewObject の場合とまったく同じですが、<action>SubstituteObject になります。
Ignore:XML ファイルのオブジェクトをインポートしません。この操作には、アクターは必要ありません。
Importer クラス
定義: パブリック Importer クラスは ExpImporter を拡張します。
コンストラクタ:
Importer ( ApplicationImportHandler _applicationImportHandler,
WTContainerRef _targetContainer,
String _dtd,
String _ruleFileName,
String _xslPolicyFileName,
String _containerMappingFileName,
String _actorName,
Boolean _overrideConflicts,
Boolean _validate
) throws WTException
パラメータの説明:
applicationImportHandler: インタフェース ApplicationImportHandler の実装または抽象クラス ApplicationImportHandlerTemplate の拡張のいずれかを行うクラスのインスタンスです。
applicationImportHandler の役割は、XML が保存されている Jar ファイルからの抽出です。このクラスは以下の 2 つのメソッドを実装する必要があります。
getContentAsInputStream (String contentId);
getContentAsApplicationData (String contentId);
後者のメソッドでは、Windchill DB にファイルが存在しないことを示す Null が常に返される場合があります。
* 
アプリケーションインポートハンドラの実装例については、ApplicationExportHandlerForJar を参照してください。
targetContainer: オブジェクトをインポートする必要があるコンテナ
targetDTD: インポート処理で使用する DTD を指定する文字列です。インポートするファイルに指定されていない場合、IX フレームワークはこの DTD 文字列に基づいて、オブジェクトに適したハンドラおよびオブジェクトのドキュメントタイプ定義を見つけます。Windchill リリース 10.X で使用されている DTD 文字列は standardX20.dtd です。
ruleFileName: マッピング規則ファイルとして XML ファイル (前のバージョンと同じ) または XSL ファイルを使用できるので、このパラメータは文字列です。IxbElement _localMappingRules を使用するコンストラクタは、現在サポートされなくなっています。マッピング規則ファイルがないので Null に設定する場合は、コンストラクタを直接 Null 値に設定しないでください。設定すると、あいまいな参照エラーが発生します。代わりに、文字列を使用し、その文字列に Null 値を割り当て、それを ruleFileName として渡します。マッピング規則ファイルは、インポート処理の発生時、特定の属性オブジェクトを変更、オーバーライド、または除外するために使用します。
たとえば、規則ファイルは、Team Template 属性をオーバーライドし、エクスポート時にオブジェクトが属していたチームに関係なく、インポート時に "/System" ドメインの Team Template 属性を "Change" に置き換えます。
<?xml version="1.0" encoding="UTF-8"?>
<userSettings>
<mappingRules>
<COPY_AS>
<tag>teamIdentity</tag>
<value>*</value>
<newValue>Change Team (/System)</newValue>
</COPY_AS>
</mappingRules>
</userSettings>
XSL マッピング規則ファイルの例を以下に示します。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="WTPart">
<xsl:choose>
<xsl:when test="name='part_c'">
<newInfo>
<teamIdentity>Default (/System)</teamIdentity>
<folderPath>/Design</folderPath>
<versionInfo>
<versionId>B</versionId>
<iterationId>2</iterationId>
<versionLevel>1</versionLevel>
</versionInfo>
</newInfo>
</xsl:when>
<xsl:when test="number='PART_B'">
<newInfo>
<teamIdentity>Default (/System)</teamIdentity>
<folderPath>/Design<folderPath>
</newInfo>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
この XSL ファイルでは、インポート処理で part_c という名前の WTPart が見つかった場合、チームアイデンティティテンプレートをデフォルト (「/System」) に、フォルダ部品を「/Design」に、およびバージョンを B.2 にそれぞれ変更し、また、インポート処理で PART_B という番号を持つ WTPart が見つかった場合、チームアイデンティティテンプレートをデフォルト (「/System」) に、フォルダ部品を「/Design」にそれぞれ変更するよう指定します。
オーバーライドしない場合は、引数 localMapppingRules で Null を渡します。
_xslPolicyFileName: ポリシーファイル名
_containerMappingFileName: コンテナマッピングファイル名。コンテナマッピングファイルの例を次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<container-info>
<container>
<source-container>/wt.inf.container.OrgContainer=
Demo Organization/wt.pdmlink.PDMLinkProduct=
DemoSourceProduct</source-container>
<target-container>/wt.inf.container.OrgContainer=
Demo Organization/wt.pdmlink.PDMLinkProduct=
DemoTargetProduct</target-container>
</container>
</container-info>
_actorName: 使用されるアクターの名前
_overrideConflicts: インポート処理で、オーバーライド可能なコンフリクトをオーバーライドするかどうかを指定するブール値です。
_validate: インポート処理で、インポートされるオブジェクトの XML ファイルを DTD に対して検証するかどうかを指定するブール値です。
Importer クラスのインスタンスは、IxbHelper クラスの newImporter() メソッドを通じて作成する必要があります。例:
Importer importer = IxbHelper.newImporter(…);
Importer を使用した XML ファイルのオブジェクトのインポート
Importer クラスのインスタンス (importer) を作成すると、それを使用して XML ファイルのオブジェクトをインポートできます。複数の XML ファイルをインポートする場合は、XML ファイルから作成された IxbDocument-s を 1 つずつ importer に渡す必要があります。
前述のように、インポートアプリケーションサーバーは、インポートを処理するために 2 つのメソッドを呼び出す必要があります。
importer.doImport(IxbDocument doc);
importer.finalizeImport();
doImport (doc): このメソッドは実際にはオブジェクトをインポートせず、後でインポートするオブジェクトを表す XML ドキュメントをリストに挿入します。すべてのインポートオブジェクトのすべての XML ドキュメントがインポートリストに挿入されると、finalizeImport() の呼び出しによって実際のインポート処理が開始します。
finalizeImport(): 実際のインポート処理は、このメソッドで実行されます。呼び出されるのは、以下のとおりです。
doCheckConflicts() - インポートされたオブジェクトでコンフリクトの有無をチェックします。
doRealImport () - リスト内の各オブジェクトを表す XML ドキュメントごとに importElement (IxbElement doc) を呼び出して、実際にオブジェクトリストのインポートを処理します。
ImportElement(...) calls importElements(...): importElements(…) メソッドでは、getImportHandler(tag を呼び出して、特定のオブジェクトタイプのためのインポートハンドラを作成します。
getImportHandler(…) メソッドは、以下の手順を実行してインポートするオブジェクトに適切なハンドラを見つけます。
1. インポートオブジェクトの XML ファイルの <dtd> タグで、DTD 文字列を使用してインポートハンドラの取得を試みます。
2. ハンドラが Null の場合は、importer の現在の DTD を使用して再試行します。この現在の DTD は最新バージョンの Windchill を使用して計算されます。Windchill リリース 10.X の場合、これは standardX20.dtd です。
エレメントのハンドラを取得した後、importElements(…) は以下のメソッドを呼び出します。
handler.importElements(…) to do the import task.
handler.outputLog(…) to send log to user.
非バージョン化オブジェクト (例: ReportTemplate ... )) のすべてのハンドラはクラス ClassExporterImporterTemplate を拡張し、リンクオブジェクト (例: PartUsageLink...) のすべてのハンドラはクラス ExpImpForLinkObject を拡張し、バージョン化オブジェクト (例: 部品、ドキュメント、EPMDocuments など) のすべてのハンドラはクラス ExpImpForVersionedObject を拡張します。
* 
非バージョン化オブジェクトのハンドラは、前のバージョンと同様に動作します。
実際のハンドラが importElements(…) メソッドを実装していない場合は、ClassExporterImporterTemplate クラスのデフォルトメソッド importElements(…) を呼び出します。このクラスの importElement(…) メソッドは findAmongExistingObjects (elements, importer); を呼び出します。
XML ファイルのオブジェクトが、現在データベースに存在する場合は、オブジェクトをインポートしません。それ以外の場合は、以下のメソッドを呼び出します。
createObjects ( elements, importer);
importObjectsAttributes (elements, importer);
storeObjects (elements, importer);
importObjectsAttributesAfterStore (elements, importer);
finalizeImprtObjects(isNewObject, elements, importer);
これらのメソッドの一部はハンドラで実装される必要があり、実際のハンドラがいつどのような方法でその役割を果たすかを示します。
* 
バージョン化オブジェクトのハンドラは、動作が異なります。
実際のハンドラが importElements(…) メソッドを実装していない場合は、ExpImpForVersionedObject クラスのデフォルトメソッド importElements(…) を呼び出します。このクラスでは、XML ファイルのオブジェクトがデータベースに存在するかどうかにかかわらず、importElements(…) メソッドが常に以下を呼び出します。
createObject (elements, importer);
importObjectsAttributes (elements,
importer);
storeObjects (List<ElementObjectPair> pairs, importer);
importObjectsAttributesAfterStore (List<ElementObjectPair> pairs,
importer);
次に、インポートアプリケーションはクリーンアップを実行して、クライアントにメッセージを送信できます。これでインポート処理は完了です。