企业管理 > Windchill 数据加载 > 创建加载方法 > 为加载创建新方法
  
为加载创建新方法
您可能需要为新的 Windchill 加载程序创建新方法或类。所有修改都应在 csvmapfile.dtd 中执行,而且关于新加载程序类及其相应方法的信息应记录在 csvmapfile.txt 中。重要的是要更新 csvmapfile.txt,以使其与 DTD 保持同步。
* 
可获得 LoadDoc 和 LoadPart 加载程序的源代码以用于自定义。通过编辑此源代码可创建新的加载方法。请参阅下文中相应的章节。
关于加载方法
所有由加载框架调用的方法均沿用同一签名:
public static boolean myMethod (HashTable nv, HashTable cmd_line, Vector v)
该方法在函数成功时返回“真”,否则返回“假”。各参数如下:
nv 参数 - 一个散列表,其中包括映射文件中作为关键字的属性名以及数据文件一行中作为值的相应字符串。
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 并检查返回值是否为空。如果该值是必选项并且字段值为空或空字符串,则 LoadServerHelper.getValue 会生成错误消息。
如果该字段不是必填字段并且您希望将返回值设为空 (表示无任何值或空字符串),请使用 LoadServerHelper.NOT_REQUIRED。
如果想要了解不为字段指定任何值或为其指定空字符串之间的区别,请使用 LoadServerHelper.BLANK_OKAY。如果未在散列表中找到属性,则 BLANK_OKAY 选项返回空值,表示映射文件或数据文件可能存在格式问题。“可保留空白”选项返回消息:“如果在散列表中找到了属性但值为空白,则依据属性,该值可能为 okay)”。
方法内的其他实用程序
以下是用于方法内的使用程序或帮助程序方法:
LoadServerHelper.getTargetContainer() 可用于获得加载的目标容器。这是在加载文件集中指定的容器,或者,如果使用的是 LoadFromFile,则使用 -CONT_PATH 命令行选项来指定它。
如果未指定任何容器,将显示警告消息并尝试使用“交换容器”。
LoadServerHelper.getTargetDomain() 可用于获得加载的目标域。输入文件可能会指定域路径,如下所示:
完整路径 (/System) - 先在目标容器中搜索,然后在 Exchange 中搜索。
容器限定路径 ([/]/System) – 如果该容器为目标容器的父组织,则您可将 [/Org] 用于容器路径部分。
域名 (System) - 为了迁移,其还支持使用域名。如果域名为一特殊的域,则它将返回此域。否则,它将返回父项根位于 Exchange 容器中的域。
LoadServerHelper.changePrincipal(user) 方法可用于更改一组操作的有效用户。仅当在此会话中经过验证的用户为管理组中的成员时,才可使用此方法。在完成对一行数据的处理后,加载实用程序会将参与者 (以前称为承担者) 重新设为初始参与者 (如果它所调用的方法更改了参与者)。
LoadServerHelper.removeCacheValue(MY_KEY) 和 LoadServerHelper.setCacheValue(MY_KEY,my_object) 方法可用于缓存对特定方法的调用或对不同方法的调用之间的对象。加载实用程序在数据文件的每一行中调用一种方法。加载文档然后再将多个内容文件加载到一个文档内,这是首先创建文档、缓存它然后再将其返回负载的一个示例。负载随后读入下一数据行 (这是一内容行)。
LoadContent 方法将检索缓存数据,如下所示:
ContentHolder contentHolder =
(ContentHolder)LoadServerHelper.getCacheValue(CURRENT_CH_KEY);
此方法会将内容文件添加到文档中。如果您要创建可保存内容 (文件或 URL) 的对象并且要在数据文件内位于该对象之后的行中加载多个内容项,必须使用下列常数缓存对象:
private static String CURRENT_CH_KEY = "Current ContentHolder";
如果您因为其他原因而要缓存对象,必须创建唯一密钥字符串。建议您在下一次创建开始时清除缓存对象,这样在创建失败的情况下,取决于此次创建的操作将失败同时不会破坏其他数据。在处理最后一个数据行后,所有对象的缓存会被清除。
* 
缓存不会自己清除项。如果使用不同的密钥缓存许多项并通过加载文件多次运行方法,这将限制加载文件的大小,因为您可能会用尽内存。
创建文档类
PTC 支持两种类型的文档类自定义:类型和子类型。
如果向 WTDocument 中添加子类型或全局属性,则现有加载方法不要求进行任何自定义。但是,如果向 WTDocument 中添加类型自定义,则需要新的加载方法。
要自定义 wt.doc.LoadDoc 以处理 WTDocument 的新模型化子类,请搜索 LoadDoc 以查找可创建文档新实例的工厂方法。
语句如下所示:
document = WTDocument.newWTDocument in the constructDocument method
更改此语句以处理新的模型化类。还必须搜索 applyHardAttributes 方法并添加任何模型化属性的设置。
* 
wt.doc.LoadDoc 可以处理加载的无序小版本和版本。有关 beginCreateWTDocument 类的信息,请参阅 JavaDoc。
创建部件类
PTC 支持两种类型的部件类自定义:类型和子类型。
如果向 WTPart 中添加子类型或全局属性,则现有加载方法不要求进行任何自定义。但是,如果向 WTPart 中添加类型自定义,则需要新的加载方法。
要自定义 wt.part.LoadPart 以处理 WTPart 的新模型化子类,请搜索 LoadPart 以查找可创建部件新实例的工厂方法。
语句如下所示:
part = WTPart.newWTPart in the constructPart method
更改此语句以处理新的模型化类。还必须搜索 applyHardAttributes 方法并添加任何模型化属性的设置。
* 
wt.part.LoadPart 可以处理加载的无序小版本和版本。有关 beginCreateWTPart 类的信息,请参阅 JavaDoc。