高级自定义 > 业务逻辑自定义 > 自定义业务逻辑 > 上下文构建器自定义示例 > API 可用于自定义筛选器应用程序
  
API 可用于自定义筛选器应用程序
服务器端 API 可用于导航设计上下文结构
public interface ContextBuilderInterface {
public Collection<CBStructureNode>
getChildrenFromCache(String collectorCacheID,
Collection<String> seeds, HttpServletRequest request) throws
InvalidCollectorCacheException, InvalidCollectorSeedException,
CollectionException;
}
API 的输入为:
收集器缓存 ID (字符串):这是在启动自定义筛选器应用程序时传递到 URL 中自定义筛选器应用程序的参数 (CB_CCID 参数)
要遍历的组件的种子/集合 (字符串集合):对于第一次调用,此集合应包含启动自定义筛选器应用程序时传递到 URL 中自定义筛选器应用程序的 id (CB_SEEDID),对于后续调用,集合应包含从需要进一步遍历以到达 CAD 模块的前一调用所返回的组件 id (所有 CAD 模块均已检索后,则不应再调用此 API)。
请求:由于自定义可在单独 web 应用程序的上下文中执行,因此需要将 HTTP 请求对象作为上下文构建器 API 的输入传入,以便 Windchill 拾取已验证用户、用户区域设置、HTTP 会话特定数据等,以建立用于执行此 API 的相应上下文。如果请求对象为空,则假设不需要任何初始化上下文。
此 API 的输出为:
CBStructureNode 的集合:此对象将包含一个子组件 id (字符串)、子可持续对象、链接 id (字符串)、链接可持续对象 (父项和子项之间)、父项 id (字符串),该字符串表示该组件在结构中的路径及其包含状况
对于每个子组件 id + 路径的组合,我们将有一个 CBStructureNode 对象
在以下情况中,系统可能会抛出异常:
InvalidCollectorCacheException - 收集器缓存 id 不再有效
InvalidCollectorSeedException - 传递的种子对象无效 (用户无法刷新它们)
CollectionException - 集合异常
这些异常是 WTException 的扩展;因此,发生以上所提及的任何错误时,都将返回已本地化的错误消息。
此 API 的调用方也应准备处理运行时异常 (数据库不可用等)。
此 API 不会返回通过“展开条件”筛选器筛选的项 (这些项不会显示在上下文构建器树中,也不会提供给此 API)。
此 API 将返回链接和子标识符以及可持续对象。如果可持续对象中不存在 (例如,无法从可持续对象中使用可重用属性),则调用程序 API 将获取有关使用其他 API (信息引擎或 Windchill 支持的其他 API) 的对象的其他信息。此 API 不会返回有关为结构中的每个项选择的表示级别的任何信息。
CBStructureNode 对象中返回的标识符的形式为:OR:<object class>:<number>
服务器端 API 可用于更新上下文构建器缓存
public interface ContextBuilderInterface {
public String addRulesToCache(String collectorCacheID, String seedId,
List<CBPath> nodesToUpdate, HttpServletRequest request) throws WTException;
}
以下是此 API 的输入:
收集器缓存 ID - 这是当启动自定义筛选器应用程序时传递到 URL 中自定义筛选器应用程序的参数 (CB_CCID 参数)
种子 ID - 这是当启动自定义筛选器应用程序时传递到 URL 中自定义筛选器应用程序的参数 (CB_SEEDID 参数)
应为其添加新包含/排除规则的 CBPath 项列表 - 此列表应包括已由用户修改的 CBPath 项 - 对于未修改的项,不应将其传入。将 CBPath 传递到此 API 而不传递到 CBStructrueNodes,原因在于创建规则仅需要 CBPath 中的信息。要使用 (在 CBStructureNode 对象中提供给自定义筛选器应用程序的) 路径标识符和包含值来创建 CBPath 的实例,请使用 CBPathFactory。
请注意,会将列表而非集合传递至此 API (如果出于某种原因,路径包含的顺序会起到重要作用,则将由 API 的调用程序以适当顺序来传递 CBPaths),创建规则的顺序可能会修改上下文中包含的最终结果。
此外,同一组件的多个路径的处理方式 (是否应该将全部路径设置为相同包含状况) 由应用程序决定。
请求 - 由于自定义可在单独 web 应用程序的上下文中执行,因此需要将 HTTP 请求对象作为上下文构建器 API 的输入传入,以便 Windchill 拾取已验证用户、用户区域设置、HTTP 会话特定数据等,以建立用于执行此 API 的相应上下文。如果请求对象为空,则假设不需要任何初始化上下文。
作为输出,此 API 将:
失败时,将返回异常 - 异常将包含有关失败信息的本地化消息。
成功时,此 API 将作为输出提供,此输出字符串的令牌将在自定义筛选器 UI 关闭后被客户端上下文构建器用来刷新屏幕 (将相应更新树、可视化和规则面板)。
此 API 将在关联上下文的规则列表底部为传入的路径 (根据传入的包含状态) 添加规则。对于 CAR,将根据系统中的首选项值来设置表示。
自定义筛选成功时,客户端 API 可将控制权移交给上下文构建器
自定义筛选器应用程序成功后,自定义筛选器应用程序应将控制权移交给上下文构建器,并请求对其自身进行刷新。
调用以进行刷新时,自定义构建器将关闭自定义筛选器应用程序,并应转至服务器 (通过使用由上一节中定义的 API 传递的令牌) 来获取要在上下文构建器应用程序中刷新的数据。
刷新完成后,模态模式应在上下文构建器应用程序中关闭,并且对于用户而言应能完全正常运行。
自定义筛选器应用程序可使用以下 API 将控制权移交给上下文构建器应用程序 (这是一个 JavaScript API)
opener.CB.refreshContextBuilderForCustomFilter(token);
其中,此 API 的输入为:
令牌 - 这是在上一节中定义的 addRulesToCache API 所返回的字符串 - 这是必需的输入,如果未传递任何令牌,则 API 将会失败。
此 API 不会生成任何输出 (void 调用)。
用于取消自定义筛选器的客户端 API
关闭自定义筛选器窗口后,应在 opener 窗口 (上下文构建器窗口) 上调用 JavaScript API 以重置模态模式。
当在自定义筛选器窗口上按下取消按钮或自定义筛选器窗口为“未加载”(通过按浏览器窗口中的 "X" 按钮关闭) 时,应调用此 API。
应通过以下方式调用 API:
opener.CB.closeCustomFilterWindow();
此 API 不会生成任何输出 (void 调用)。