1、Windchill API 培训,张玉,概述,只有掌握Windchill API,才能实施好方案. 本文介绍方案实施中最常使用的API WC API有框架,学习本文的基础,其它可举一反三. 养成“验证、总结”的好习惯,目录,高级查询 基本查询 用户、组、角色的查与改 流程参数 IBA操作 设置生命周期状态 设置动态权限 部件与文档之间 持续化操作 Windchill设计模式,1、高级查询,添加查询类型 添加查询条件 联合查询 添加生命周期条件 执行查询 过滤出最新小版本,QuerySpec qs = new QuerySpec();/构造 Int index = qs.appendClassL
2、ist(WTPart.class,true);/添加查询类型,获取类型索引,第2个参数表示“要查询的类型、表” WhereExpression where = new SearchCondition(WTPart.class, WTPart.xx, “=”, xx);/泛型在WC API中的使用,/获取查询条件数目 If(qs.getConditionCount()0 ,/添加“生命周期”查询条件 LifeCycleConfigSpec lcsp = new LifeCycleConfigSpec(); lcsp.setLifeCycleState(State.toState(state);
3、qs = lcsp.appendSearchCriteria(qs); /执行查询 QueryResult qr = PersistenceHelper.manager.find(qs); /过滤出最新小版本 LatestConfigSpec lcs = new LatestConfigSpec(); qr = lcs.process(qr);,习题1,1、查询部件输入:部件编码输出:各小版本对象的集合 2、接上题,添加条件:只得到最新小版本 3、查询部件的参考文档输入:部件对象输出:此部件的所有参考文档,2、基本查询,建立数据库连接 准备SQL语句 执行查询 遍历查询结果 关闭数据库连接,/
4、建立数据库连接 PDSIfc pds = DataServicesRegistry.getDefault().getPdsFor(“Default”); Connection conn = null; if(pds!=null)conn = pds.getDataSource().getConnection(); ,/准备SQL语句 PreparedStatement query = conn. prepareStatement(SQL); /执行查询 ResultSet rs = query.executeQuery(); /关闭数据库连接。 conn.close();,习题2,1、查询部件
5、的最新小版本 输入:部件编码 输出:部件的最新小版本,3、用户、组、角色的查与改,WC中承担者的类型结构 核心API:OrganizationServicesHelper,承担者的类型结构 WTPrincipalWTGroupWTOrgnazitionWTUser,查用户 OrganizationServicesHelper.manager.getAuthenticatedUser(String); 其它常用的方法。在OrganizationServicesHelper的设计中,提供了许多有关用户、群组、团队的“服务”。Windchill中大量使用“Helper-服务模式” 。有关“Windc
6、hill的3大模式”,请详见Windchill 客制化手册倒数第2章,本文略。,其它常用方法: getGroup(); getOrganization(); isMember(); members(); rename(); ,习题3,1、查找用户 输入:表示名称的字符串 输出:用户对象。若无此用户则返回null。 2、验证用户是否属于组 输入:表示用户的字符串,表示组的字符串 输出:若属于则返回true其它返回false 3、验证用户是否属于某角色 输入:表示用户的字符串,表示角色的字符串 输出:若属于则返回true其它返回false 4、将用户添加到组和角色输入:表示用户、组、角色的字符串输
7、出:若发生异常则抛出异常,4、流程参数,进程类型:WfProcess 活动类型:WfAssignedActivity 进程上下文:ProcessData 进程变量:WfVariable,/获取活动 WfAssignedActivity activity = (WfAssignedActivity) workItem.getSource().getObject(); /获取进程 WfProcess process = activity.getParentProcess(); /获取进程上下文 ProcessData pPdata = wfProcess.getContext();,/获取变量 W
8、fVariable xx = pData.getVariable(“xx”);,习题4,1、创建一个问题报告,找到它的进程 输入:问题报告的编码 输出:相关进程对象 2、接上题,查询当前活动节点 输入:进程对象 输出:进程目前所在活动节点的名称 3、接上题,查询进程上下文 输入:进程对象 输出:进程上下文,5、IBA操作,IBA=Instance Based Attribute 有现成的IBAUtility供使用 注意两点: 1)为每个对象构造它自己的IBAUtility对象 2)set更新属性后,需要updateAttributeContainer(); IBA名称定义在:StringDef
9、inition表中。,习题5,1、使用现有的IBAUILITY,查询部件的IBA属性 输入:部件对象,指定IBA属性的名称 输出:IBA属性值 2、接上题,设置此IBA属性为新值 输入:部件对象,指定IBA属性的名称,新IBA属性值 输出:若发生异常则返回异常,6、设置生命周期状态,Helper-服务模式 核心API:LifeCycleHelper /设置生命周期状态 LifeCycleHelper.service.setLifeCycleState();,习题6,1、查询部件的生命周期模板 输入:部件对象 输出:生命周期模板对象 2、重新设置部件的生命周期状态输入:部件对象输出:若发生异常则
10、抛出异常,7、设置动态权限,Helper-服务模式 核心API:AccessHelper,习题7,1、判断某用户是否能修改某对象输入:用户对象,部件对象输出:能则返回true其它返回false。 2、为用户添加修改权限 输入:用户对象,部件对象 输出:若发生异常则抛出异常,8、部件与文档之间,部件与文档之间的关系,Windchill API是WTPartReferenceLink 核心API:StructureHelper /查询 StructureHelper.service.navigateReference /构造 WTPartReferenceLink.new WTPartRefere
11、nceLink();,习题8,1、查询部件的所有参考文档 输入:部件对象 输出:所有参考文档的集合 2、查询文档参考的部件 输入:文档对象 输出:与之有参考关系的部件的集合,9、持续化操作,核心API:PersistenceHelper 没有持续化的对象不能使用此API。要操作不持续的对象,使用其它WC API。 /删除 PersistenceHelper.manager.detele /存储 PersistenceHelper.manager.detele,习题9,1、删除部件 输入:部件对象 输出:若发生异常则抛出异常 2、更新部件的名称 输入:部件对象 输出:若发生异常则抛出异常,10、Windchill设计模式,一起学习Windchill 客制化手册倒数第2章,总结,1、习惯一:防止空指针异常。 2、多实践、多验证 3、用JAVA OOP的思想来思考WC API。 4、规范的代码是职业素养的体现。,谢谢!,