エンタープライズ管理 > Windchill データロード > 読み込みメソッドの作成 > 新しい読み込みメソッドの作成
  
新しい読み込みメソッドの作成
新しい Windchill ローダーに新しいメソッドまたはクラスを作成する必要が生じることがあります。すべての修正を csvmapfile.dtd で行い、新しいローダークラスと対応するメソッドを csvmapfile.txt に登録する必要があります。DTD との同期を保つように、csvmapfile.txt を更新することが重要です。
* 
LoadDoc ローダーおよび LoadPart ローダーのソースコードをカスタマイズに使用できます。このソースコードを編集して、新しい読み込みメソッドを作成できます。以下の該当するセクションを参照してください。
読み込みメソッドについて
読み込みフレームワークによって呼び出されるすべてのメソッドは、同じ署名に従います。
public static boolean myMethod (HashTable nv, HashTable cmd_line, Vector v)
このメソッドは、関数が成功した場合は true を返し、失敗した場合は false を返します。パラメータは以下のとおりです。
nv パラメータ - マッピングファイルからキーとして読み込まれた属性名と、データファイルの 1 行から値として読み込まれたその文字列のハッシュテーブルです。
cmd_line パラメータ - コマンドラインから読み込まれた余分な属性 (インタフェースで定義されていないパラメータ) のハッシュテーブルです。それにより、実行時にコマンドラインから読み込まれた値をデータファイルに代入できます。
return_objects パラメータ - createNewClass メソッドで作成または実行したオブジェクトのベクトルです。オブジェクトを操作して、ベクトルに加算します。以下に例を示します。
return_objects.addElement(doc);
このベクトルを使用して、より有益なメッセージをコマンドラインに返します。このメソッドで操作したオブジェクトに getIdentity を実装しない場合、またはその情報がコマンドラインへのメッセージとして有効でない場合は、代わりに return_object に文字列を追加する必要があります。以下に例を示します。
String msg = "Type = Content Item, Identity =
" + appData.getFileName();
return_objects.addElement(msg);
データの解決
データファイルのデータとコマンドラインのデータを解決するユーティリティがあります。たとえば、NewClass に追加した新しい属性の値を読み込むには、以下のパラメータを使用します。
String my_attribute = LoadServerHelper.getValue("my_new_attribute",
nv,cmd_line,LoadServerHelper.REQUIRED);
最初のパラメータは、マッピングファイルから読み込まれた文字列です。最後のパラメータは、フィールドが必須かどうか、または空白の値が受け入れられるかどうかを示します。
フィールドが必須であり、指定されていなければ読み込みに失敗するようにする場合は、LoadServerHelper.REQUIRED を使用し、戻り値が Null かどうかを確認します。値が必須で、フィールド値が Null または空の文字列の場合、LoadServerHelper.getValue によってエラーメッセージが生成されます。
フィールドが必須でなく、値がない場合に戻り値を Null に設定するか、空の文字列を返すようにする場合は、LoadServerHelper.NOT_REQUIRED を使用します。
フィールドに指定されている値がない場合と空の文字列の違いを確認する場合は、LoadServerHelper.BLANK_OKAY を使用します。ハッシュテーブルに属性がない場合、この BLANK_OKAY オプションを指定していると、Null が返されます。これは、マッピングファイルとデータファイルにフォーマットの問題がある可能性を示しています。BLANK_OKAY オプションは、"ハッシュテーブルに属性はあるが、値が空白の場合 (属性によっては空白を許容)" というメッセージを返します。
メソッド内のその他のユーティリティ
メソッド内で使用できるユーティリティまたはヘルパメソッドは以下のとおりです。
LoadServerHelper.getTargetContainer() メソッドを使用して、読み込みに使用するターゲットコンテナを取得できます。これは、ロードファイルセットに指定されているコンテナです。LoadFromFile を使用する場合、-CONT_PATH コマンドラインオプションで指定します。
コンテナを指定しない場合、警告メッセージが表示され、Exchange コンテナが使用されます。
LoadServerHelper.getTargetContainer() メソッドを使用して、読み込みに使用するターゲットコンテナを取得できます。入力ファイルでは、ドメインパスが以下のように指定されている場合があります。
絶対パス (/System) - ターゲットコンテナを参照し、次に Exchange を参照します。
コンテナ修飾パス ([/]/System) - コンテナがターゲットコンテナの親組織の場合、コンテナパスの部分に [/Org] を使用できます。
ドメイン名 (System) - 移行のために、ドメイン名を使用することもできます。ドメイン名が特別なドメインの場合、このドメインが返されます。ドメイン名が特別なドメインでない場合、Exchange コンテナのルート親を持つドメインが返されます。
LoadServerHelper.changePrincipal(user) メソッドを使用して、一連の操作の実効ユーザーを変更できます。このセッションに関して認証されたユーザーが管理グループのメンバーである場合のみ、この機能を使用できます。1 行のデータの処理が完了した後、呼び出されたメソッドによって参加者 (旧プリンシパル) が変更された場合、読み込みユーティリティによって参加者が元の状態に戻されます。
LoadServerHelper.removeCacheValue(MY_KEY) メソッドおよび LoadServerHelper.setCacheValue(MY_KEY,my_object) メソッドを使用して、特定のメソッドへの呼び出しまたは別のメソッドへの呼び出しの間にオブジェクトをキャッシュできます。読み込みユーティリティにより、メソッドがデータファイルの行ごとに 1 回ずつ呼び出されます。最初にドキュメントを作成してキャッシュし、読み込みユーティリティに戻す例の 1 つとして、ドキュメントを読み込んで、複数のコンテンツファイルをドキュメントに読み込む場合があります。読み込みユーティリティにより、次のデータ行のコンテンツ行が読み込まれます。
LoadContent メソッドは、キャッシュされたデータを以下のように読み込みます。
ContentHolder contentHolder =
(ContentHolder)LoadServerHelper.getCacheValue(CURRENT_CH_KEY);
このメソッドは、コンテンツファイルをドキュメントに追加します。コンテンツ (ファイルや URL) を保持できるオブジェクトを作成し、データファイル内のオブジェクトの後の行にある複数のコンテンツアイテムを読み込む場合は、以下の定数を使用してオブジェクトをキャッシュする必要があります。
private static String CURRENT_CH_KEY = "Current ContentHolder";
ほかの理由でオブジェクトをキャッシュする場合は、固有のキー文字列を作成する必要があります。作成に失敗した場合に、それに依存している次の処理が失敗してほかのデータを破壊しないように、次の作成の開始時点でキャッシュされているオブジェクトをクリアしてください。最後のデータ行が処理された後、すべてのオブジェクトのキャッシュがクリアされます。
* 
キャッシュはそれ自体でアイテムをクリアするわけではありません。さまざまなキーを持つ多数のアイテムをキャッシュし、ロードファイルからメソッドを何回も実行すると、メモリが不足する可能性があるので、ロードファイルのサイズが制限されます。
ドキュメントクラスの作成
PTC では、ドキュメントクラスのカスタマイズタイプとして、タイプとサブタイプの 2 種類をサポートしています。
サブタイプまたはグローバル属性を WTDocument に追加する場合、既存の読み込みメソッドをカスタマイズする必要はありません。ただし、タイプのカスタマイズを WTDocument に追加する場合は、新しい読み込みメソッドが必要です。
WTDocument の新しいモデルサブクラスと連動するように wt.doc.LoadDoc をカスタマイズするには、ドキュメントの新しいインスタンスを作成するファクトリメソッドについて LoadDoc をサーチします。
ステートメントは以下のとおりです。
document = WTDocument.newWTDocument in the constructDocument method
新しいモデルクラスを処理するために、このステートメントを変更します。さらに、applyHardAttributes メソッドをサーチし、モデル属性の設定を追加する必要があります。
* 
wt.doc.LoadDoc では、順序が誤っている作業版数およびバージョンからの読み込みを処理できます。beginCreateWTDocument クラスの詳細については、JavaDoc を参照してください。
部品クラスの作成
PTC では、部品クラスのカスタマイズタイプとして、タイプとサブタイプの 2 種類をサポートしています。
サブタイプまたはグローバル属性を WTPart に追加する場合、既存の読み込みメソッドをカスタマイズする必要はありません。ただし、タイプのカスタマイズを WTPart に追加する場合は、新しい読み込みメソッドが必要です。
WTPart の新しいモデルサブクラスと連動するように wt.part.LoadPart をカスタマイズするには、部品の新しいインスタンスを作成するファクトリメソッドについて LoadPart をサーチします。
ステートメントは以下のとおりです。
part = WTPart.newWTPart in the constructPart method
新しいモデルクラスを処理するために、このステートメントを変更します。さらに、applyHardAttributes メソッドをサーチし、モデル属性の設定を追加する必要があります。
* 
wt.part.LoadPart では、順序が誤っている作業版数およびバージョンからの読み込みを処理できます。beginCreateWTPart クラスの詳細については、JavaDoc を参照してください。