高度なカスタマイズ > サービスおよびインフラストラクチャのカスタマイズ > インポートとエクスポートのフレームワーク > IX アプリケーションの作成方法 > Importer を使用した XML ファイルのオブジェクトのインポート
  
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);
次に、インポートアプリケーションはクリーンアップを実行して、クライアントにメッセージを送信できます。これでインポート処理は完了です。