当前位置:首页 >> IT/计算机 >> Windchill技术培训笔记

Windchill技术培训笔记

搭建 Windchill 环境

开发工具设置
在 Eclipse 中选择: Window --> Preferences --> java --> Compiler --> Building 去掉:□的选中

注意:一定要取消选中,否则在清工作区时将删除 windchill codebase 下的文件 5.此时会在 Eclipse 的工作空间里面生成一个 HelloWindchill 的文件,此文件很小只有几 KB

创建 Java 项目
? 第一种创建方式:

1.在 Eclipse 中选择: File --> New --> Java Project 创建一个 Test 的 Java 项目

2.在当前创建的 java 项目 Test: 在 Eclipse 中选择: 当前项目上(Test) --> New --> Properties --> Java Build Path --> Add Class Folder --> Create New Folder

单击 ok 完成 codebase 文件夹的创建和指定(由于 Windchill 的 codebase 文件夹很大,所

以这一步骤需要等待片刻) 成功之后,将会看到:

? 第二种创建方式: 1. 在 Eclipse 中选择: File --> New --> Java Project 创建一个 TestWindchill 的 Java 项目 ? Link additional source --> Browse --> Finish

2. Browse ? 选择 codebase

3.添加自定义的 library 库

3.指定 codebase 的映射:

3.指定 codebase 文件夹编译之后的.class 文件 和 工程下面的 java 源文件的映射关系 在 Eclipse 中选择: 当前项目上(HelloWindchill) --> New --> Properties --> Java Build Path --> Browse -->

单击 OK 之后, 你可能会发现 Java 项目 Referenced Libraries 里面有个 codebase 文件夹了

4.添加 Windchill 环境所需的 jar 包(推荐使用 1)

D:\ptc\Windchill_9.1\Windchill 里面需要的被导入的 jar 文件按有: lib、srclib、installlib、WHC\WEB-INF\lib、ant\lib、codebase\WEB-INF\lib、codebase\lib 7 个 文件夹下的所有 jar 文件 ? 1.可用自定义一个类库,然后把 Windchill 7 个 lib 下面的 jar 都添加到该库中,以后就 可以在开发中直接引用该类库(注意:最好不要覆盖相同名字的 jar 包,因为他们的 jar 的文件大小不同,所以作用也不同,避免在开发中因 jar 的冲突和版本问题而引起些莫 名奇妙的错误) 在 Eclipse 中选择: 当前项目上(HelloWindchill) --> New --> Properties --> Java Build Path --> Libraries 选项卡

?

2.直接引用,7 个 lib 下面的所有 jar 包

第一个 Hello World 创建 HelloWorld.java
在 Eclipse 中选择: 当前项目上(HelloWindchill) src --> New --> Package

创建一个 TestWindchill.java 的类

内容为:
package angus.com;

public class TestWindchill { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(" Hello World...."); }

}

启动 Windchill 服务

1. 启动 Oracle10g 监听服务:OracleOraDb10g_home1TNSListener 2. 启动 Oracle10g 主数据库服务:OracleServiceWIND

3. 启动 Apache 服务 4. 启动 Tomcat 服务 成功标志:

5. 启动 control-panel.bat 服务 D:\ptc\Windchill_9.1\WindchillDS\server\bat

6. 启动 Windchill Shell 服务,输入 windchill start 目标:D:\ptc\Windchill_9.1\Windchill\bin\windchill.exe shell 起始位置:D:\ptc\Windchill_9.1\Windchill\bin

7. 观察 Windchill 的两个窗口:

ServerManager :

MethodServer

8. Windchill 启动成功的标志: 在 MethodServer 窗口出现如下标志,表明 Windchill 服务启动成功

运行 HelloWorld.java
1. Eclipse 控制台会打印:Hello World…

2. 此时会在 Windchill 系统的安装目录(D:\ptc\Windchill_9.1\Windchill\codebase)生成 如下目录:

angus --> com 里面会生成 TestWindchill.java 源文件的编译后的文件:TestWindchill.class 此时表明第一个 Hello World 程序运行成功 3.

第一个 JSP 与 Hello Word 创建 index.jsp
在 Windchill 的安装目录 (D:\ptc\Windchill_9.1\Windchill\codebase\netmarkets\jsp)下面新 建一个文件夹 angus,在里面新建一个 index.jsp 页面 页面内容为:
<%@ page language="java" import="java.util.*,angus.com.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'index.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

</head>

<body>

ddd

<% TestWindchill tst = new TestWindchill();%>

<br>

<%= tst.helloWindchill() %>

<%= tst %>

</body>

</html>

创建 TestWindchill.java
TestWindchill.java 里面的内容
package angus.com; public class TestWindchill { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("第一个Windchill程序"); } public String helloWindchill(){

return "this is the Hello World Windchill..."; } }

编译后的 TestWindchill.class 文件会自动映射,放到 D:\ptc\Windchill_9.1\Windchill\codebase\angus\com 目录下 注意:该目录下的 TestWindchill.class 的更新时间

访问:
在浏览器地址栏输入:http://localhost/Windchill/netmarkets/jsp/angus/index.jsp 就可以在 Windchill 目录使用 jsp 页面调用 Windchill 目录 java 类的方法。

注意:
如果你在 TestWindchill.java 里面添加了一个方法,然后在 index.jsp 中调用,注意一定要删 除:D:\ptc\Windchill_9.1\Windchill\codebase\angus\com 目录下 的 TestWindchill.class 文件 然后在 Windchill Shell 中输入

重启 Windchill 然后重启 Tomcat ,再在 浏览器地址栏输入:http://localhost/Windchill/netmarkets/jsp/angus/index.jsp 访问 jsp 页面,不然就会报错

Windchill 菜单定制

顶级菜单定制
1. 在安装的 Windchill 系统的 Windchill Shell 中运行命令: ant –f bin\swmaint.xml createSafeArea

会在 Windchill 的安装 D:\ptc\Windchill_9.1\Windchill\wtSafeArea 目录出现 3 个文件夹: ptcCurrent、ptcOrig、siteMod 2. 在文件夹 siteMod 下创建 codebase ? config ? actions 三个文件夹(内嵌结构) 3. 在 WC_Home 安装目录的 actions 文件夹下面添加如下两个 xml 文件 把 custom-actionModels.xml、custom-actions.xml 两个 xml 文件添加到 ..\wtSafeArea\siteMod\codebase\config\actions 目录下 文件一定要是 UTF-8 编码格式的 4. 在 custom-actionModels.xml 文件里面需要配置如下代码:

Example: custom-actionsModel.xml (模型文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE actionmodels SYSTEM "actionmodels.dtd"> <actionmodels> <!-- 顶级菜单 main navigation --> <model name="main navigation"> <description>Main navigation (tabs)</description> <action name="home" type="navigation"/> <action name="program" type="navigation"/> <action name="product" type="navigation"/> <action name="project" type="navigation"/> <action name="change" type="navigation"/> <action name="library" type="navigation"/> <action name="org" type="navigation"/> <action name="site" type="navigation"/> <action name="supplier" type="navigation"/> <action name="customization" type="navigation"/> <action name="fiberhomereport" type="navigation"/> </model> </actionmodels>

5. 在 custom-actions.xml 文件里面需要配置如下代码: Example: custom-actions.xml (动作文件)
<!-- 顶级菜单 main navigation --> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE listofactions SYSTEM "actions.dtd"> <listofactions> <objecttype name="navigation" class="">

<action name="fiberhomereport" renderType="GENERAL" resourceBundle="ext.res </action> </objecttype> </listofactions>

<command class="netmarkets" method="servlet/Navigation?tab=fiberhomerepor

6. Windchill 英文资源文件 里面的代码 navigationRB.rbInfo(navigationRB_en_US.rbInfo) 存放的位置: D:\ptc\Windchill_9.1\Windchill\src\ext\resource (resource 目录是自己建的, 名字可以取) Example: navigationRB.rbInfo (英文资源文件)
<!-- 必须引入的 -->

ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!-- 顶级菜单 --> navigation.fiberhomereport.description.value=testreport navigation.fiberhomereport.activetooltip.value=testreport navigation.fiberhomereport.tooltip.value=testreport

7. Windchill 中文资源文件里面的代码 navigationRB_zh_CN.rbInfo 存放的位置: D:\ptc\Windchill_9.1\Windchill\src\ext\resource (resource 目录是自己建的, 名字可以取) Example: navigationRB_zh_CN.rbInfo (中文资源文件)
<!-- 必须引入的 --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!-- 顶级菜单 --> navigation.fiberhomereport.tooltip.value=\u62a5\u8868 navigation.fiberhomereport.description.value=\u62a5\u8868 navigation.fiberhomereport.activetooltip.value=\u62a5\u8868

8. 在 Windchill Shell 下面运行: Resourcebuild ext.resource.navigationRB 或 Resourcebuild ext.resource.navigationRB_zh_CN

ant -f bin\swmaint.xml installSiteChanges

? ? ? ? ?

1.清除 Tomcat 下面的缓存: D:\ptc\Windchill_9.1\Tomcat\work 2.清除资源文件编译后目录: D:\ptc\Windchill_9.1\Windchill\codebase\ext\resource 3.清除 IE 缓存、历史记录、cookies: 4.清除 xml 文件的编译目录: D:\ptc\Windchill_9.1\Windchill\codebase\config\actions 5.查看 Windchill 的日子记录: D:\ptc\Windchill_9.1\Windchill\logs

Windchill 重新启动成功的标志(3min 左右): INFO : wt.method.server.startup - MethodServer ready (in 42.063 secs).

9. 显示效果如图:

二级菜单定制
1. 二级菜单的定制,跟上面顶级菜单的定制差不多,主要涉及的文件也是 4 个(2 个 xml、2 个资源文件),为了 测试二级菜单是否成功, 我们需要在 Windchill 中访问 Jsp 页面 change_record.jsp 、 show_Archive_record.jsp 只是里面的代码有所不同,添加代码之后再 Windchill Shell 里面运行的命令也是一样的 注意:文件一定要是 UTF-8 编码格式的 2. 配置 2 级菜单在 ..\wtSafeArea\siteMod\codebase\config\actions 目录下 custom-actionModels.xml 文件里面添加的代码为: Example: custom-actionsModel.xml (模型文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE actionmodels SYSTEM "actionmodels.dtd"> <actionmodels> <!--二级菜单定制 --> <model name="fiberhomereport navigation" defaultActionType="fiberhomereport" defaultActionName="ChangeReports"> <action name="ChangeReports" type="fiberhomereport"/> <action name="ArchiveReports" type="fiberhomereport"/> </model> </actionmodels>

3. 配置 2 级菜单在 ..\wtSafeArea\siteMod\codebase\config\actions 目录下 custom-actions.xml 文件里面添加的代码为: Example: custom-actions.xml (动作文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE listofactions SYSTEM "actions.dtd"> <listofactions>

<!-- 二级菜单定制 --> <objecttype name="fiberhomereport" resourceBundle="ext.resource.navigationRB <action name="ChangeReports"> </action> <action name="ArchiveReports">

<command url="/netmarkets/jsp/angus/report/change_record.jsp?tab=fiberhomer

<command url="/netmarkets/jsp/angus/report/show_Archive_record.jsp?tab=fib windowType="page"/> </action> </objecttype> </listofactions>

4. 配置 2 级菜单在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目录下 navigationRB.rbInfo(navigationRB_en_US.rbInfo)英文资源文件里面添加的代码为: Example: navigationRB.rbInfo (英文资源文件)
<!-- 必须引入的(重复则无需引入) --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!-- 二级菜单定制 --> fiberhomereport.ChangeReports.description.value=Global Change statistics fiberhomereport.ChangeReports.tooltip.value=Global Change statistics fiberhomereport.ArchiveReports.description.value=Archive Drawing statistics fiberhomereport.ArchiveReports.tooltip.value=Archive Drawing statistics

5. 配置 2 级菜单在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目录下 navigationRB_zh_CN.rbInfo 中文资源文件里面添加的代码为: Example: navigationRB_zh_CN.rbInfo (中文资源文件)
<!-- 必须引入的(如果已经引入则无需再引入) --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false

<!--二级菜单定制 --> fiberhomereport.ChangeReports.description.value=\u5168\u5c40\u53d8\u66f4\u7edf\u8ba

fiberhomereport.ChangeReports.tooltip.value=\u5168\u5c40\u53d8\u66f4\u7edf\u8ba1\u6

fiberhomereport.ArchiveReports.description.value=\u5f52\u6863\u5de5\u7a0b\u56fe\u7e

fiberhomereport.ArchiveReports.tooltip.value=\u5f52\u6863\u5de5\u7a0b\u56fe\u7edf\u

6. 为了测试二级菜单是否新建成功, 我们需要在 Windchill 安装系统.. codebase\netmarkets\jsp 目录新建几个 Jsp 文件,如下在 D:\ptc\Windchill_9.1\Windchill\codebase\netmarkets\jsp\angus\report 目录下面新建: change_record.jsp 、show_Archive_record.jsp 两个 Jsp 页面 jsp 页面的内容为:

<%@ include file="/netmarkets/jsp/util/begin.jspf"%> Windchill test <%@ include file="/netmarkets/jsp/util/end.jspf"%>

7. 在 Windchill Shell 下面运行: Resourcebuild ext.resource.navigationRB 或 Resourcebuild ext.resource.navigationRB_zh_CN

ant -f bin\swmaint.xml installSiteChanges

? ? ? ?

1.清除 Tomcat 下面的缓存: D:\ptc\Windchill_9.1\Tomcat\work 2.清除资源文件编译后目录: D:\ptc\Windchill_9.1\Windchill\codebase\ext\resource 3.清除 IE 缓存、历史记录、cookies: 4.查看 Windchill 的日子记录: D:\ptc\Windchill_9.1\Windchill\logs

Windchill 重新启动成功的标志(3min 左右): INFO : wt.method.server.startup - MethodServer ready (in 42.063 secs).

8. 显示效果如图:

Action 下拉菜单
1. Action 下拉菜单的定制,跟上面二级菜单的定制差不多,主要涉及的文件也是 4 个(2 个 xml、2 个资源文件),添加代码之后再 Windchill Shell 里面运行的命令也是一样的 注意:文件一定要是 UTF-8 编码格式的 2. 定制 Action 下拉菜单在 ..\wtSafeArea\siteMod\codebase\config\actions 目录下 custom-actionModels.xml 文件里面添加的代码为: Example: custom-actionsModel.xml (模型文件)

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE actionmodels SYSTEM "actionmodels.dtd"> <actionmodels> <!-- Action 下拉菜单的定制 --> <model name="more parts actions" menufor="wt.part.WTPart"> <action name="ExportBom" type="part"/> <action name="ExportData" type="part"/> </model> </actionmodels>

3. 定制 Action 下拉菜单在..\wtSafeArea\siteMod\codebase\config\actions 目录下 custom-actions.xml 文件里面添加的代码为: Example: custom-actions.xml (动作文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE listofactions SYSTEM "actions.dtd"> <listofactions> <!-- Action 下拉菜单的定制 --> <objecttype name="part"> <command windowType="popup" class="java.lang.Object" </action> <command windowType="popup" class="java.lang.Object" </action> </objecttype> </listofactions>

<action name="ExportBom" renderType="GENERAL" ajax="page" resourceBundle="e

method="netmarkets/jsp/angus/report/show_Archive_record.jsp?action=Expor

<action name="ExportData" renderType="GENERAL" ajax="page" resourceBundle="e

method="netmarkets/jsp/angus/report/show_Archive_record.jsp?action=Export

4. 定制 Action 下拉菜单在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目录下 navigationRB.rbInfo navigationRB_en_US.rbInfo) ( 英文资源文件里面添加的代码为: Example: navigationRB.rbInfo (英文资源文件)
<!-- 必须引入的(重复则无需引入) --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!-- 导出物料 --> part.ExportBom.description.value=ExportBom

part.ExportBom.tooltip.value=ExportBom <!-- 导出数据 --> part.ExportData.description.value=ExportData part.ExportData.tooltip.value=ExportData

5. 定 制 Action 下 拉 菜 单 在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目 录 下 navigationRB_zh_CN.rbInfo 中文资源文件里面添加的代码为: Example: navigationRB_zh_CN.rbInfo (中文资源文件)
<!-- 必须引入的(如果已经引入则无需再引入) --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!-- 导出物料 --> part.ExportBom.description.value=\u5bfc\u51fa\u7269\u6599 part.ExportBom.tooltip.value=\u5bfc\u51fa\u7269\u6599 <!-- 导出数据 --> part.ExportData.description.value=\u5bfc\u51fa\u6570\u636e part.ExportData.tooltip.value=\u5bfc\u51fa\u6570\u636e

6. 在 Windchill Shell 下面运行: Resourcebuild ext.resource.navigationRB 或 Resourcebuild ext.resource.navigationRB_zh_CN

ant -f bin\swmaint.xml installSiteChanges

windchill stop & windchill start

? ? ? ?

1.清除 Tomcat 下面的缓存: D:\ptc\Windchill_9.1\Tomcat\work 2.清除资源文件编译后目录: D:\ptc\Windchill_9.1\Windchill\codebase\ext\resource 3.清除 IE 缓存、历史记录、cookies: 4.查看 Windchill 的日子记录: D:\ptc\Windchill_9.1\Windchill\logs

Windchill 重新启动成功的标志(3min 左右): INFO : wt.method.server.startup - MethodServer ready (in 42.063 secs).

7. 显示效果如图:

文件夹工具栏菜单定制
1. 文件夹工具栏菜单定制,跟上面二级菜单的定制差不多,主要涉及的文件也是 4 个(2 个 xml、2 个资 源文件),添加代码之后再 Windchill Shell 里面运行的命令也是一样的 注意:文件一定要是 UTF-8 编码格式的 配 置 文 件 夹 工 具 栏 菜 单 定 制 在 ..\wtSafeArea\siteMod\codebase\config\actions 目 录 下 , custom-actionModels.xml 文件里面添加的代码为: Example: custom-actionsModel.xml (模型文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE actionmodels SYSTEM "actionmodels.dtd"> <actionmodels> <!--文件夹工具栏菜单定制--> <model name="folder_list_toolbar"> <action name="list_cut" <action name="list_copy" <action name="fbpaste" <action name="pasteAsCopy" <action name="list_delete" <action name="CONTAINERMOVE" <action name="PAGERELOADINGMULTICHECKOUT" <action name="WFADDTOWORKSPACE" <action name="separator" <action name="create" <action name="create" <action name="createMulti" <action name="createFromTemplateWizard" <action name="createPartWizard" <action name="createMultiPart" type="object"/> type="object"/> type="object"/> type="saveas"/> type="object"/> type="pdmObject"/> type="folder"/> type="folder"/> type="separator"/> type="folder"/> type="document"/> type="document"/> type="document"/> type="part"/> type="part"/>

2.

<action name="create" <action name="createSpecification" <action name="importWordRequirements" <action name="add_link" <action name="create" <action name="create" <action name="create" <action name="SBUpdatePrj" <action name="separator" <action name="createChangeDirective" <action name="list6" </model> </actionmodels>

type="requirement" type="specification" type="requirement" type="bookmark"/> type="problemReport"/> type="changeRequest"/> type="changeNotice"/> type="sandbox"/> type="separator"/> type="changeDirective"/> type="object"/>

resourceBundle="com.ptc.windchill.enterprise.requirement.requirementFol

resourceBundle="com.ptc.windchill.enterprise.requirement.specificationA

resourceBundle="com.ptc.windchill.enterprise.requirement.requirementAct

3.

文件夹工具栏菜单定制..\wtSafeArea\siteMod\codebase\config\actions 目录下 custom-actions.xml 文件里面添加的代码为: Example: custom-actions.xml (动作文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE listofactions SYSTEM "actions.dtd"> <listofactions> <!--文件夹工具栏菜单定制--> <objecttype name="object" resourceBundle="ext.resource.navigationRB"> <action name="list6"> </action> </objecttype> </listofactions>

<command url="/netmarkets/jsp/angus/report/change_record.jsp" window

4.

文件夹工具栏菜单定制在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目录下 navigationRB.rbInfo(navigationRB_en_US.rbInfo)英文资源文件里面添加的代码为: Example: navigationRB.rbInfo (英文资源文件)
<!-- 必须引入的(重复则无需引入) --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!--文件夹工具栏菜单定制-->

object.list6.description=CreateWS object.list6.icon=/netmarkets/images/demodata/Modem.jpg object.list6.tooltip=ToolTip6

5.

文件夹工具栏菜单定制在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目录下 navigationRB_zh_CN.rbInfo 中文资源文件里面添加的代码为: Example: navigationRB_zh_CN.rbInfo (中文资源文件)
<!-- 必须引入的(如果已经引入则无需再引入) --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!--文件夹工具栏菜单定制--> Resourceinfo.class=wt.tools.resource.StringResourceinfo Resourceinfo.customizable=true Resourceinfo.deprecated=false object.list6.description=\u521b\u5efa\u5de5\u4f5c\u533a object.list6.icon.value=/netmarkets/images/demodata/Modem.jpg object.list6.tooltip=ToolTip6

6.

在 Windchill Shell 下面运行: Resourcebuild ext.resource.navigationRB 或 Resourcebuild ext.resource.navigationRB_zh_CN

ant -f bin\swmaint.xml installSiteChanges

windchill stop & windchill start

? ? ? ?

1.清除 Tomcat 下面的缓存: D:\ptc\Windchill_9.1\Tomcat\work 2.清除资源文件编译后目录: D:\ptc\Windchill_9.1\Windchill\codebase\ext\resource 3.清除 IE 缓存、历史记录、cookies: 4.查看 Windchill 的日子记录: D:\ptc\Windchill_9.1\Windchill\logs

Windchill 重新启动成功的标志(3min 左右): INFO : wt.method.server.startup - MethodServer ready (in 42.063 secs).

7.

显示效果如图:

三级导航菜单
1.三级导航菜单定制,跟上面二级菜单的定制差不多,主要涉及的文件也是 4 个(2 个 xml、2 个资源文件) 添加代码之后再 Windchill Shell 里面运行的命令也是一样的 注意:文件一定要是 UTF-8 编码格式的 2 . 配 置 三 级 导 航 菜 单 定 制 在 ..\wtSafeArea\siteMod\codebase\config\actions 目 录 下 custom-actionModels.xml 文件里面添加的代码为: Example: custom-actionsModel.xml (模型文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE actionmodels SYSTEM "actionmodels.dtd"> <actionmodels>

<!--三级导航菜单定制--> <model name="third_level_nav_promotionRequest" defaultActionName="promotionI defaultActionType="promotionRequest" > <submodel name="general"/> <submodel name="relatedItems"/> <submodel name="history"/> <submodel name="collaboration"/> <submodel name="replaceout"/> </model> <model name="replaceout" resourceBundle="ext.resource.navigationRB"> <description>ReplaceOut 3rd level nav menu</description> <action name="BatchReplace" type="object"/> <action name="MaterialsOut" type="object"/> </model> </actionmodels>

<description>Third level for promotion request with default action promotio

3.三级导航菜单定制..\wtSafeArea\siteMod\codebase\config\actions 目录下 custom-actions.xml 文件里面添加的代码为: Example: custom-actions.xml (动作文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE listofactions SYSTEM "actions.dtd"> <listofactions> <!--三级导航菜单定制--> <objecttype name="object" class="wt.fc.Persistable"> <action name="MaterialsOut" resourceBundle="ext.resource.navigationRB"/> </objecttype> </listofactions>

<action name="BatchReplace" resourceBundle="ext.resource.navigationRB"/

4.三级导航菜单定制在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目录下 navigationRB.rbInfo(navigationRB_en_US.rbInfo)英文资源文件里面添加的代码为: Example: navigationRB.rbInfo (英文资源文件)
<!-- 必须引入的(重复则无需引入) --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!--三级导航菜单定制--> object.replaceout.description.value=ReplaceOut object.replaceout.description.comment=ReplaceOut object.replaceout.tooltip.value=ReplaceOut object.BatchReplace.description.value=BatchReplace object.BatchReplace.description.comment=BatchReplace object.BatchReplace.tooltip.value=BatchReplace object.MaterialsOut.description.value=MaterialsOut object.MaterialsOut.description.comment=MaterialsOut object.MaterialsOut.tooltip.value=MaterialsOut

5.三级导航菜单定制在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目录下 navigationRB_zh_CN.rbInfo 中文资源文件里面添加的代码为: Example: navigationRB_zh_CN.rbInfo (中文资源文件)
<!-- 必须引入的(如果已经引入则无需再引入) --> ResourceInfo.class=wt.tools.resource.StringResourceInfo

ResourceInfo.customizable=true ResourceInfo.deprecated=false <!--三级导航菜单定制--> object.replaceout.description.value=替换淘汰 object.replaceout.description.comment=替换淘汰 object.replaceout.tooltip.value=替换淘汰 object.BatchReplace.description.value=批量淘汰 object.BatchReplace.description.comment=批量淘汰 object.BatchReplace.tooltip.value=批量淘汰 object.MaterialsOut.description.value=物料淘汰 object.MaterialsOut.description.comment=物料淘汰 object.MaterialsOut.tooltip.value=物料淘汰

6.在 Windchill Shell 下面运行: Resourcebuild ext.resource.navigationRB 或 Resourcebuild ext.resource.navigationRB_zh_CN

ant -f bin\swmaint.xml installSiteChanges

windchill stop & windchill start

? ? ? ? ?

1.清除 Tomcat 下面的缓存: D:\ptc\Windchill_9.1\Tomcat\work 2.清除资源文件编译后目录: D:\ptc\Windchill_9.1\Windchill\codebase\ext\resource 3.清除 IE 缓存、历史记录、cookies: 4.清除 xml 文件的编译目录: D:\ptc\Windchill_9.1\Windchill\codebase\config\actions 5.查看 Windchill 的日子记录: D:\ptc\Windchill_9.1\Windchill\logs

Windchill 重新启动成功的标志(3min 左右): INFO : wt.method.server.startup - MethodServer ready (in 42.063 secs).

7.显示效果如图: 产品 ? 文件夹 ? 选择一个部件或者是文档 ? 在操作里面选择升级,升级流程执行完成之后, 回到:单击 主页 ? 工作总揽 ,在列表里面找到你刚才升级的部件或文档,单击链接

然后你会看到:

客制工作流的角色
1. 客制工作流的角色,主要涉及的文件也是 2 个(英文、中文资源文件),添加代码之后再 Windchill Shell 里面运行编译资源文件的命令和打包的命令 注意: 客制工作流的角色的时候, 因为修改了 Java 应用程序中的枚举类型, 所以应该使用以下命令打一次包... 编译资源文件的时候先编译中文的,文件一定要是 UTF-8 编码格式的 打包成功的标志:

2. 在% wt_home %Src/wt/project/ (目录)找文件,如:D:\ptc\Windchill_9.1\Windchill\src\wt\project 找到如 下 3 个文件: RoleRB.rbInfo RoleRB_zh_TW.rbInf RoleRB_zh_CN.rbInfo 复制到:D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\project 中,沒有路径则建立 ? 编辑 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\project 目录下 RoleRB.rbInfo 英文资源文件里面添加的代 码为: Example: RoleRB.rbInfo (英文资源文件) Linenum:496 行添加如下代码:
# custom role DEPARTMENTLEVEL1.value=PM Project Leader

DEPARTMENTLEVEL1.shortDescription=Workflow Approver Role DEPARTMENTLEVEL1.order=990

?

编辑 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\project 目录下 RoleRB_zh_CN.rbInfo 中文资源文件里面添 加的代码为: Example: RoleRB_zh_CN.rbInfo (中文资源文件) Linenum:494 行添加如下代码:
# custom role DEPARTMENTLEVEL1.value=PM项目负责人 DEPARTMENTLEVEL1.shortDescription=工作流程核准者角色 DEPARTMENTLEVEL1.order=990

3.进入 Windchill Shell 运行一下命令:
执行中文资源文件: ResourceBuild wt.project.RoleRB_zh_CN

执行英文编译文件: ResourceBuild wt.project.RoleRB 执行打包命令: ant -f D:\ptc\Windchill_9.1\Windchill\codebase\MakeJar.xml 简写打包命令:ant -f codebase\MakeJar.xml

停止 Windchill: windchill stop

启动 Windchill: windchill start

删除 D:\ptc\Windchill_9.1\Tomcat\work 缓存 登陆 Windchill 系统验证客制工作流角色是否成功

工作流角色资源文件编译后的目录: D:\ptc\Windchill_9.1\Windchill\codebase\wt\project 自己建的工作流角色资源文件存放目录: D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\project

如果工作流角色资源文件编译成功你会看到:

4.显示效果如图: 站点 ? 实用程序 ? 工作流管理器 ? 在列表随便选择一个,然后编辑,双击人图标 选择参与者选项卡 ? 角色 ? 找到自己客制化的角色 ,然后

5.如果遇到角色乱码,请参考下面的解决步骤: 角色客制化乱码 的问题解决了,方法步骤是: 1.保证系统中: D:\ptc\Windchill_9.1\Windchill\src\wt\project 的角色资源文件的编码没有问题,如果不行,去备份的 codebase 目录拷贝 2.保证自己新建客制化目录的资源文件的编码格式没有问题 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\project 3.保证工作流角色资源文件编译后的目录是最新的文件: D:\ptc\Windchill_9.1\Windchill\codebase\wt\project 4.编译、打包、重启 Windchill、重启 Tomcat、删除 Tomcat 缓存

客制生命周期的状态
1. 客制生命周期的状态, 主要涉及的文件也是 2 个(英文、 中文资源文件), 添加代码之后再 Windchill Shell 里面运行编译资源文件的命令和打包的命令 注意: 客制生命周期状态的时候, 因为修改了 Java 应用程序中的枚举类型, 所以应该使用以下命令打一次包... 编译资源文件的时候先编译中文的,文件一定要是 UTF-8 编码格式的 打包成功的标志:

2.在 Windchill 的安装% wt_home %Src/wt/project/ (目录)找文件,如: D:\ptc\Windchill_9.1\Windchill\src\wt\lifecycle 找到如下 3 个文件: StateRB.rbInfo StateRB_zh_CN.rbInfo StateRB_zh_TW.rbInfo 复制到:D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\lifecycle 中,沒有路径则建立 ? 编辑 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\lifecycle 目录下 StateRB.rbInfo 英文资源文件里面添加的 代码为: Example: StateRB.rbInfo (英文资源文件) Linenum:496 行添加如下代码:
# custom state QC Manager.value=品管科主管审核中 QC Manager.shortDescription=品管科主管审核中状态

?

编辑 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\project 目录下 StateRB_zh_CN.rbInfo 中文资源文 件里面添加的代码为: Example: StateRB_zh_CN.rbInfo (中文资源文件) Linenum:194 行添加如下代码:
# custom state QC Manager.value=品管科主管审核中 QC Manager.shortDescription=品管科主管审核中状态

3.进入 Windchill Shell 运行一下命令:
执行中文资源文件: ResourceBuild wt.lifecycle.StateRB_zh_CN

执行英文编译文件: ResourceBuild wt.lifecycle.StateRB 执行打包命令: ant -f D:\ptc\Windchill_9.1\Windchill\codebase\MakeJar.xml ant -f codebase\MakeJar.xml

停止 Windchill: windchill stop

启动 Windchill: windchill start

删除 D:\ptc\Windchill_9.1\Tomcat\work 缓存 登陆 Windchill 系统验证客制生命周期状态是否成功

生命周期状态资源文件编译后的目录: D:\ptc\Windchill_9.1\Windchill\codebase\wt\lifecycle 自己建的生命周期状态资源文件存放目录: D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\lifecycle 如果生命周期状态资源文件编译成功你会看到:

4.显示效果如图: 站点 ? 实用程序 ? 生命周期管理器 ? 在列表随便选择一个,然后编辑,双击任一一个状态

,然后选择状态下拉条 ? 找到自己客制化的生命 周期状态

5.如果遇到生命周期状态乱码,请参考下面的解决步骤: 角色客制化乱码 的问题解决了,方法步骤是: 1.保证系统中: D:\ptc\Windchill_9.1\Windchill\src\wt\lifecycle 的角色资源文件的编码(UTF-8系统\ANSI-自定义)没有问题,如果不行,去备份

的 codebase 目录拷贝 2.保证自己新建客制化目录的资源文件的编码格式没有问题 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\lifecycle 3.保证工作流角色资源文件编译后的目录是最新的文件:

D:\ptc\Windchill_9.1\Windchill\codebase\wt\lifecycle 4.编译、打包、重启 Windchill、重启 Tomcat、删除 Tomcat 缓存

客制单位
1.客制 Windchill 中的单位,主要涉及的文件也是 2 个(英文、中文资源文件),添加代码之后再 Windchill Shell 里面运行编译资源文件的命令和打包的命令 注意: 客制生命周期状态的时候, 因为修改了 Java 应用程序中的枚举类型, 所以应该使用以下命令打一次包... 编译资源文件的时候先编译中文的,文件一定要是 UTF-8 编码格式的 打包成功的标志:

2.在 Windchill 的安装 % wt_home %\Windchill\wt\part\ (目录)找文件,如: D:\ptc\Windchill_9.1\Windchill\src\wt\part 找到如下 3 个文件: QuantityUnitRB.rbInfo QuantityUnitRB_zh_CN.rbInfo QuantityUnitRB_zh_TW.rbInfo 复制到:D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\part 中,沒有路径则建立 ? ? 编辑 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\part 目录下 StateRB.rbInfo 英文资源文件 里面添加的代码为: Example: QuantityUnitRB.rbInfo (英文资源文件) Linenum:54 行添加如下代码:
#Customization QuantityUnit gram.value=gram gram.shortDescription=g gram.order=70

?

编辑 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\part 目录下 QuantityUnitRB_zh_CN.rbInfo 中文资源文件 里面添加的代码为: Example: QuantityUnitRB_zh_CN.rbInfo (中文资源文件) Linenum:54 行添加如下代码:
#客制化单位 gram.value=克 gram.shortDescription=g gram.order=70

3.进入 Windchill Shell 运行一下命令:
执行中文资源文件:

ResourceBuild wt.part.QuantityUnitRB_zh_CN

执行英文编译文件: ResourceBuild wt.part.QuantityUnitRB 执行打包命令: ant -f codebase/MakeJar.xml

重启windchill: windchill stop & windchill start

删除 D:\ptc\Windchill_9.1\Tomcat\work 缓存 登陆 Windchill 系统验证客制单位是否成功

客制化单位文件编译后的目录: D:\ptc\Windchill_9.1\Windchill\codebase\wt\part 自己建的客制化单位资源文件存放目录: D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\part 4.显示效果如图:

Windchill 进阶

JCA 定制表格:
? Jsp 页面:
1. JCA 表单 jsp 文件所在目 D:\ptc\Windchill_9.1\Windchill\codebase\netmarkets\jsp\angus\report 目录下 JCAReport.jsp 文件里面添加的代码为: Example: JCAReport.jsp
<%@ include file="/netmarkets/jsp/util/begin.jspf"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://www.ptc.com/windchill/taglib/components" prefix="jca"%>

<%@ taglib uri="http://www.ptc.com/windchill/taglib/core" prefix="wc"%> <%@ taglib uri="http://www.ptc.com/windchill/taglib/fmt" prefix="fmt"%> <%@page import="java.io.*"%> <%@page import="java.util.*"%> <%@page import="wt.util.*"%> <html> <head> <title>All_List</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> </html>

<fmt:setLocale value="${localeBean.locale}"/> <fmt:setBundle basename="ext.resource.jcaDisplayRB"/> <fmt:message var="number" key="NUMBER"/> <fmt:message var="name" key="NAME"/> <fmt:message var="creator" key="CREATE_BY"/> <fmt:message var="modifyTimestamp" key="MODIFY_TIME"/> <table> menubarName="netmarkets_folderbrowser_menubar" toolbarName="folder_list_toolbar"> <jca:setComponentProperty key="selectable" value="true"/> <jca:describeColumn id="number" label="${number}"/> <jca:describeColumn id="name" label="${name}"/> <jca:describeColumn id="creator" label="${creator}"/> <jca:describeColumn id="modifyTimestamp" label="${modifyTimestamp}"/> </jca:describeTable> </table> methodName="findPart"> </jca:getModel>

<jca:describeTable id="test" var="tabledesc" label="test" type="wt.part.WTPart

<jca:getModel descriptor="${tabledesc}" var="modeldesc" serviceName="angus.com.JCA

<jca:renderTable model="${modeldesc}" showCount="true" showCustomViewLink="true" p <br> <%@ include file="/netmarkets/jsp/util/end.jspf"%>

2. ddddd

? Info 资源文件:
1. 定制 JCA 表格在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目录下 jcaDisplayRB.rbInfo 英文资源文件里面添加的代码为: Example: jcaDisplayRB.rbInfo (英文资源文件)
<!-- 必须引入的 --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!-- JCA报表制作 --> NAME.value=Name NUMBER.value=Number DESCRIPTION.value=Description STATE.value=State CREATE_BY.value=Create By UPDATE_BY.value=Update By CREATE_TIME.value=Create Time UPDATE_TIME.value=Update Time MODIFY_TIME.value=Modify Time JCATestTable.value=Angus Liu JCA Test

2. 定制 JCA 表格在 D:\ptc\Windchill_9.1\Windchill\src\ext\resource 目录下 jcaDisplayRB_zh_CN.rbInfo 英文资源文件里面添加的代码为: Example: jcaDisplayRB_zh_CN.rbInfo(中文资源文件)
<!-- 必须引入的 --> ResourceInfo.class=wt.tools.resource.StringResourceInfo ResourceInfo.customizable=true ResourceInfo.deprecated=false <!-- JCA报表制作 --> NAME.value=名称 NAME.constant=NAME NUMBER.value=编号 NUMBER.constant=NUMBER DESCRIPTION.value=描述 DESCRIPTION.constant=DESCRIPTION STATE.value=状态 STATE.constant=STATE CREATE_BY.value=建立者 CREATE_BY.constant=CREATE_BY

UPDATE_BY.value=修改者 UPDATE_BY.constant=UPDATE_BY CREATE_TIME.value=建立时间 CREATE_TIME.constant=CREATE_TIME UPDATE_TIME.value=更新时间 UPDATE_TIME.constant=UPDATE_TIME MODIFY_TIME.value=修改时间 MODIFY_TIME.constant=Modify Time JCATestTable.value=Angus Liu JCA Test JCATestTable.constant=JCATestTable

? Java 文件:
在 Java 文件中书写如下代码:
package angus.com; import wt.fc.PersistenceHelper; import wt.fc.QueryResult; import wt.method.RemoteAccess; import wt.part.WTPart; import wt.pds.StatementSpec; import wt.query.QuerySpec; import wt.util.WTException; public class JCATest implements RemoteAccess { /** * @author bob he 取得所有部件 * @return 部件的查询类型 * @throws WTException */ public static QueryResult findPart() throws WTException { QuerySpec qs = new QuerySpec(WTPart.class); return PersistenceHelper.manager.find((StatementSpec) qs); } public static void main(String[] args) { try { System.out.println(JCATest.findPart()); } catch (WTException e) { // TODO Auto-generated catch block e.printStackTrace();

} } }

Validate 验证:
? Java 文件:
1. 在 Java 类中写
package angus.com; import java.util.Locale; import wt.org.WTPrincipal; import wt.session.SessionHelper; import wt.util.WTException; import com.ptc.core.ui.validation.UIValidationResult;

import com.ptc.core.ui.validation.DefaultUIComponentValidator; import com.ptc.core.ui.validation.UIValidationCriteria; import com.ptc.core.ui.validation.UIValidationKey; import com.ptc.core.ui.validation.UIValidationResultSet; import com.ptc.core.ui.validation.UIValidationStatus; /** * Windchill验证定制 * @author angus * */ public class Validate extends DefaultUIComponentValidator{ /** * 处理多个Action的的验证 * @param UIValidationKey * @param UIValidationCriteria * @param Locale */ @Override 要验证的action 验证标志实体类 本地化的

public UIValidationResultSet performFullPreValidation(UIValidationKey actio UIValidationCriteria criteria, Locale locale) throws WTException { // TODO Auto-generated method stub //获得参与者 WTPrincipal wtp = SessionHelper.manager.getPrincipal(); //获得验证结果 UIValidationResultSet rs = new UIValidationResultSet(); //判断参与者是不是管理员 if("Administrator".equals(wtp.getName())){

//显示菜单 rs.addResult(new UIValidationResult(actionKey, UIValidationStatus.EN }else{

//隐藏菜单 rs.addResult(new UIValidationResult(actionKey, UIValidationStatus.HI } return rs; } }

2. dd 3. ddddd

? Register serve:
1. 在 Windchill Shell 下面使用 xconfmanager 命令注册 angus.com.Validate 类 xconfmanager -s wt.services/svc/default/com.ptc.core.ui.validation.UIComponentValidator/report(自定义的 action 名称)/null/0= angus.com.Validate/duplicate -t codebase/service.properties –p 2. 注册成功之后,你会在
%WT_HOME%\Windchill\site.xconf 文件中找到

<!-- Validate验证一级菜单,如果当前用户是Administrator,则显示,其他用户登录则隐藏 --> <Property overridable="true" targetFile="codebase/service.properties" value="angus.com.Validate/duplicate"/>

name="wt.services/svc/default/com.ptc.core.ui.validation.UIComponentValidator/

%WT_HOME%\Windchill\codebase\service.properties 文件中找到

<!-- Validate验证一级菜单,如果当前用户是Administrator,则显示,其他用户登录则隐藏 --> wt.services/svc/default/com.ptc.core.ui.validation.UIComponentValidator/fiberh

Listen 监听:
? Listen Interface:
1. 编写一个监听接口: ListenService.java
package angus.com; /** * 空接口,什么也不做,这是实现监听必须实现的接口 * <p>Description: </p> * @author:angus liu * @time: May 03, 2011 6:08:24 PM * @version 1.0 */ public interface ListenerService { }

定义一个监听接口的目的,是为了更灵活的扩充自定义监听事件的方法 2. ddddd

? Listen Class:
1. 自定义一个类,使他继承 wt 的 StandardManager 类,实现 ListenerService 接口

package angus.com; import wt.doc.WTDocument; import wt.events.KeyedEvent; import wt.events.KeyedEventListener; import wt.fc.PersistenceManagerEvent;

import wt.services.ServiceEventListenerAdapter; import wt.services.StandardManager; import wt.util.DebugProperties; import wt.util.DebugWriter; import wt.util.WTException; /** * * @author angus * */ public class TestListener extends StandardManager implements ListenerService{ /** * */ private static final long serialVersionUID = 1L; //获取监听器类的名称 private static final String CLASSNAME = TestListener.class.getName(); //定义一个接受监听事件中的DEBUG变量 private static final boolean DEBUG = DebugProperties.isDebugOn(CLASSNAME);

//把监听到的BEBUG输出到DEBUG日志文件当中 private static final DebugWriter LOG =(DEBUG ? DebugProperties.getWriter(CLASS private KeyedEventListener listener; //定义一个接受当前类的 名称方法 public String getConceptualClassName(){ return CLASSNAME; } /** * 创建监听实例 * @return 监听实例对象 * @throws WTException */ protected static TestListener newTestListenerInstance() throws WTException{ System.out.println("===========创建监听实例============"); TestListener listenerInstance = new TestListener(); listenerInstance.initialize();

return listenerInstance; } /** * 添加要监听的事件 */ protected void performStartUpProcess(){ System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@"); if(DEBUG && DebugProperties.isTrace(this)){ } listener = new WCListenerEventListener(this.getConceptualClassname()); //添加要监听的事件(删除、修改操作) getManagerService().addEventListener(listener, getManagerService().addEventListener(listener, PersistenceManagerEvent.generateEventKey(PersistenceManagerEvent.POST_MODIFY)); } /** * 内部类实现 * @author angus * */ class WCListenerEventListener extends ServiceEventListenerAdapter{ private String post_delete = PersistenceManagerEvent.POST_DELETE; private String post_modify = PersistenceManagerEvent.POST_MODIFY; /** * 有参构造函数 * @param manager_name */ public WCListenerEventListener(String manager_name) { // TODO Auto-generated constructor stub super(manager_name); notifyVetoableEvent(manager_name); } /** * 监听方法中注册监听事件 */

LOG.enter(CLASSNAME, "this is the mothed perfromStartupProcess begin!!!

PersistenceManagerEvent.generateEventKey(PersistenceManagerEvent.POS

public void notifyVetoableEvent(Object eve){ if (!(eve instanceof KeyedEvent)) return; //获取当前触发的事件对象 KeyedEvent event = (KeyedEvent) eve; //获取当前被操作的持久化对象,如部件,文档,容器等 Object target = event.getEventTarget();

/************************以下代码可根据实际业务进行修改********************* if(event.getEventType().equals(post_delete)){ System.out.println("删除操作执行!"); }else if(event.getEventType().equals(post_modify)){ System.out.println("修改操作执行!"); } WTDocument document = (WTDocument) target; if("postdelete".equals(document.getName())){ //抛出WTException阻止删除操作的确认并提示必要的信息 try { throw new WTException("名字为postdelete的文档是不可被删除的!"); } catch (WTException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } if(DEBUG && DebugProperties.isTrace(this)){ } } } }

if (target instanceof WTDocument&& event.getEventType().equals(post_del

LOG.exit(CLASSNAME, "this is the mothed prefromStartupProcess end!!!

2. 自定义监听类的实现步骤为: 1. 获取监听的类名 2. 定义一个接收监听事件中的 Debug 变量 3. 把监听的 Debug 输出到 Debug 日志中 4. 定义一个接收当前类的名称的方法 5. 实例化监听对象(创建监听实例对象) 6. 添加要监听的事件 7. 在监听方法中注册监听事件

? register serve:
在 Windchill Shell 下面运行 xconfmanager 命令注册监听服务 xconfmanager -t codebase/wt.properties -s wt.services.service.3400=angus.com.ListenerService/angus.com.TestListener –p xconfmanager -t codebase/wt.properties -s wt.services.service.5017=angus.com.ListenService/angus.com.StandardListenService –p
ListenServer

? test Listen:
注册成功之后,你会在:
%WT_HOME%\Windchill\site.xconf 文件中找到

%WT_HOME%\Windchill\codebase\wt.properties 文件中找到

重启 Windchill 服务: windchill stop & windchill start 然后在 Windchill 系统中每删除一个文档就会触发该监听事件

? wt 监听:

PersistenceManagerEvent

WorkInProgressServiceEvent

VersionServiceEvent

电子仓库配置:
? 步骤:
文件存储策略 ? 使用多个电子仓库,然后编写相应的规则,将内容上载到相应的电子仓库中 ? 使用单电子仓库,设置属性 wt.fv.forceContentToValue = true

1.

用wcadmin用户登陆->选择“站点”—> “实用程序”-> 选择 “外部储存管理器”

-> 选择“文件电子仓库”-> 将节点展开如下图:

默认的外部电子仓库路径为:D:\ptc\Windchill_9.1\Windchill\vaults\defaultuploadvault

2.

选中“副本文件夹”->点击“新建文件夹”图标,

3.

双击“右视图中新建的文件夹”,出现如下图所示,填写电子仓的路径

4.

双击“对象”,里面的“安装”,输入路径

5.

双击“对象”,里面的“验证”

6.

在D:\ptc\Windchill_9.1\Windchill目录下site.xconf文件中添加如下信息: <Property name="wt.fv.forceContentToVault" overridable="true" targetFile="codebase/wt.properties" value="true"/>

在 windchill shell 中运行 xconfmanager –p 重启 windchill: windchill stop & windchill start

? Advice:
Ddddd Ddddd

集成邮箱:
? concern:
dddd ddddd

? Advice:
Ddddd Ddddd

备份和还原:
? concern:
dddd ddddd

? Advice:
Ddddd Ddddd

Tree 的定制:
? Java 文件:
1. 在 Java 文件中添加如下代码:
package angus.com; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.ListIterator; import java.util.Map; import wt.fc.Persistable; import wt.fc.QueryResult; import wt.fc.collections.WTArrayList; import wt.part.WTPart; import wt.part.WTPartHelper; import wt.query.QuerySpec; import wt.util.WTException; import wt.vc.config.ConfigHelper; import wt.vc.config.ConfigSpec; import com.ptc.core.components.beans.TreeHandlerAdapter; import com.ptc.netmarkets.model.NmOid; import com.ptc.netmarkets.util.beans.NmCommandBean; public class TestTree extends TreeHandlerAdapter { public TestTree() { } private ConfigSpec configSpec; public Map getNodes(List list) throws WTException { if (configSpec == null) { configSpec = getDefaultConfigSpec(); } HashMap hashmap = new HashMap(); ListIterator listiterator = list.listIterator(); do { if (!listiterator.hasNext()) {

Persistable p[][][] = WTPartHelper.service.getUsesWTParts(new WTArrayList(l

break; } WTPart wtpart = (WTPart) listiterator.next(); wt.fc.Persistable p1[][] = p[listiterator.previousIndex()]; if (p1 != null) { ArrayList arraylist = new ArrayList(p1.length); hashmap.put(wtpart, arraylist); wt.fc.Persistable p2[][] = p1; int i = p2.length; int j = 0; while (j < i) { wt.fc.Persistable p3[] = p2[j]; arraylist.add(p3[1]); j++; } } } while (true); return hashmap; } public List getRootNodes() throws WTException { NmCommandBean nmcommandbean = getModelContext().getNmCommandBean(); if (nmcommandbean == null) { return null; } NmOid nmoid = nmcommandbean.getPrimaryOid(); WTPart wtpart; if (nmoid == null) { wtpart = getGolfCart(); } else { if (!nmoid.isA(wt.part.WTPart.class)) { // The following 2 lines are one line throw new ClassCastException((new StringBuilder()).append("Expected ").append(nmoid).toString()); } wtpart = (WTPart) nmoid.getRef(); } if (wtpart == null) { return null; } else { configSpec = ConfigHelper.service.getConfigSpecFor(wtpart); return Collections.singletonList(wtpart); } }

private WTPart getGolfCart() { WTPart wtpart = null; try { QuerySpec queryspec = new QuerySpec(wt.part.WTPart.class); "GOLF_CART")); if (queryresult.hasMoreElements()) { wtpart = (WTPart) queryresult.nextElement(); } } catch (WTException wtexception) { System.out.println("Unable to get golf cart" + wtexception); } return wtpart; } private ConfigSpec getDefaultConfigSpec() throws WTException { return ConfigHelper.service.getDefaultConfigSpecFor(wt.part.WTPart.class); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TestTree tree = new TestTree(); WTPart part = new WTPart(); part = tree.getGolfCart(); System.out.println("ContainerName:\t"+ part.getContainerName()+ "\n" + "FolderPath():\t"+ part.getFolderPath() + "\n" + "ModifierName:\t" +part.getModifierName() + "\n" + "VersionInfo:\t" +part.getVersionInfo()); } }

//queryspec.appendWhere(new SearchCondition(wt.part.WTPart.class, "mast

QueryResult queryresult = ConfigHelper.service.queryIterations(queryspec

2. 在 Eclipse 中保存该文件,Eclipse 就会自动编译,并吧编译后的文件放置 在%WT_HOME%\Windchill\codebase\包的层次 会存放一个 TestTree.class 如,D:\ptc\Windchill_9.1\Windchill\codebase\angus\com\ 3. 如果要验证该类是否能够正确查询出数据,就在 Eclipse 中运行该类,会弹出一个对话框让你登录

4. 输入用户名和密码之后,在 Eclipse 控制台,会打印一些内容

5. Dd

? Jsp 文件:
1. 在 JCATree.jsp 文件中添加以下代码 如:D:\ptc\Windchill_9.1\Windchill\codebase\netmarkets\jsp\angus\tree\JCATree.jsp
<%@ include file="/netmarkets/jsp/util/begin.jspf"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://www.ptc.com/windchill/taglib/components" prefix="jca"%> <jca:describeColumn id="name" /> <jca:describeColumn id="number" /> </jca:describeTableTree>

<jca:describeTableTree var="treeDescriptor" type="wt.part.WTPart" id="demo.tree" l

<c:set target="${commandBean}" property="compContext" value="part$bom$${param.oid} <jca:renderTableTree model="${treeModel}" /> <%@ include file="/netmarkets/jsp/util/end.jspf"%>

<jca:getModel var="treeModel" descriptor="${treeDescriptor}" treeHandler="TestTree

2. Ddd Ddddd

? xconf 文件:
1. 在%WT_HOME%\Windchill\site.xconf 文件中添加

<!-- tree的客制化 --> <Service context="default" name="com.ptc.core.components.beans.TreeHandler" targetFile="codebase/service.properties"> cardinality="duplicate" /> </Service>

<Option requestor="java.lang.Object" serviceClass="angus.com.TestTree" selecto

2. 进入 Windchill Shell 命令窗口输入: xconfmanager –p 注意观察 Windchill Shell 命令窗口的输出,不能有 error 信息,如果没有则表示编译 xconf 文件成功

3. 重启 Windchill 使用命令:windchill stop & windchill start

4. 清除 Tomcat 缓存%WT_HOME%\ Windchill_9.1\Tomcat\work 删除 清除 IE 缓存。 5. 在登录 Windchill 系统之后,在 IE 地址输入: http://angusliu.com.cn/Windchill/netmarkets/jsp/angus/tree/JCATree.jsp

文件夹

6. 完成

Windchill 优化:
? 调整 Tomcat 参数:
配置 Tomcat 的缓存大小: setenv JAVA_OPTS "-server -XX:PermSize=46M -XX:MaxPermSize=144M -Xms64M -Djava.awt.headless=true -Dwt.context.defaultLocalResourcesOnly=true"配置 Tomcat 的连接数 在 D:\ptc\Windchill_9.1\Tomcat\bin\wttomcat_start 文件的 Linenum:16 行更改为: setenv JAVA_OPTS "-server -XX:PermSize=128M -XX:MaxPermSize=256M -Djava.awt.headless=true -Dwt.context.defaultLocalResourcesOnly=true"

-Xmx128M

-Xms512M -Xmx512M

配置 Tomcat 的连接数: D:\ptc\Windchill_9.1\Tomcat\conf\server.xml <Connector port="8010" channelSocket.maxPort="-1" redirectPort="8443" protocol="AJP/1.3" tomcatAuthentication="false" enableLookups="false" maxPostSize="-1" useBodyEncodingForURI="true" URIEncoding="UTF-8" backlog="0" maxThreads="320" minSpareThreads="16" maxSpareThreads="40"/> 配置 Tomcat 的热部署: D:\ptc\Windchill_9.1\Tomcat\conf\web.xml <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>development</param-name> <param-value>true</param-value> </init-param> </servlet> 把这里改成 true <param-value>true</param-value> 就可以更改 jsp 之后不用重启 Tomcat

? ServerManager:
调整 Windchill 方法管理服务器-Servermanager 的内存,在 D:\ptc\Windchill_9.1\Windchill\site.xconf 中添加 <Property name="wt.manager.minHeap" overridable="true" targetFile="codebase/wt.properties" value="128"/><!-- 最小内存 --> <Property name="wt.manager.maxHeap" overridable="true" targetFile="codebase/wt.properties"

value="256"/><!-- 最大内存 --> 然后在 Windchill Shell 下面执行 xconfmanager -p 命令: 如果编译成功你将会在:D:\ptc\Windchill_9.1\Windchill\codebase\wt.properties 文件 Linenum:741 行中看到

? MethServer:
调整 Windchill 方法服务器-MethServer 的内存, MethServer 最小内存:1024m methServer 最大内存:2048m 在 D:\ptc\Windchill_9.1\Windchill\site.xconf 中添加 <Property name="wt.manager.cmd.MethodServer.java.command" overridable="true" targetFile="codebase/wt.properties" value="$(wt.java.cmd.quoted) $(wt.manager.cmd.common.java.args) -Djava.protocol.handler.pkgs=HTTPClient -DHTTPClient.disableKeepAlives=true -DHTTPClient.dontChunkRequests=true –Xms1024m –Xmx2048m $(wt.manager.cmd.MethodServer.platform.java.args) wt.method.MethodServerMain"/> 注: 这段代码执行暂时没有测试成功,会导致 MethodServer 启动不起来 配置 MethodServer 的数量: <Property name="wt.manager.monitor.start.MethodServer" overridable="true" targetFile="codebase/wt.properties" value="2"/>

? 客户端 Java:
Windchill 系统里面的进程,都是用一个 java.exe 跑的,系统配置也是采用 Java applet(java 小程序) ,如果 策略管理器中维护的信息量过大,可能会导致内存溢出,报:java.lang.OutOfMemoryError:Java heap space 异常,解决方案我们可以调整 java 客户端内存的大小 在 【控制面板】?【JAVA】? java 选项卡 ? 查看 ? 设置 Java Runtime 的参数为: -Xms128M –Xmx256M

? Oracle:
访问 Oracle:http://localhost:1158/em/console/database/instance/changState 数据库实例:wind

Windchill 集成 WebService:
? 创建 WebService 服务:
1. 使用 wcadmin 登录 Windchill9.1 系统,在菜单栏中选择: 站点 --> 实用程序 --> info*Engine 管理器

2. 以 Aphelion 用户登陆,设置:承担者/密码 => 注意:密码是你安装时保存的,

cn=Manager/wcadmin, 文件里面的密码,如果该文件已丢失,你可以在

${wt_home}\Windchill_9.1\Windchill\site.xconf 文件,里面用 cn=Manager 搜索获得对应的密码。

如上面的密码就是:ldap

3. 点击“任务委派管理” ,在弹出的管理页面上选择“创建委派” ,输入相应内容,单击“创建” 存储类型:com.ptc.windchill 名称:Login 源 URL:/com/infoengine/soap/webservice.xml (是你 xml 文件的存放位置) 类型标识符:com.infoengine.soap 说明:Webservice Login 我的 xml 文件存放在:D:\ptc\Windchill_9.1\Windchill\tasks\com\infoengine\soap

应该为反斜杠: 4. 继续上一步骤,在管理页面上选择“管理类型标识符” ,输入类型标识符名称,单击“创建”

到此为止创建 WebService 服务完成。

? 验证 WebService:
1.在浏览器地址栏输入:http://angusliu.jwis.cn/Windchill/servlet/RPC?CLASS=com.infoengine.soap 输入密码登录之后,你会看到下面的内容:

2.运行 WebServicesClient 类,如果没有报错,会在 MethodServer 里面会有如下输出:

屏蔽升级流程第六步:
? 业务现状分析:
windchill系统中创建升级请求时,最后一步要求设置升级流程中的参与者,在这个页面中 会将组织中所有的角色和用户显示,这样非常不方便用户选择目标参与者。

? 业务需求:
屏蔽升级第六步“设置参与者”窗口:升级流程采用OOTB功能设置参与者时,容易选错, 所以将此活动移动到提交任务中完成。所以需要将第六步“设置参与者”窗口屏蔽 希望屏蔽“设置参与者”步骤。在流程中的任务中设置参与者,方便用户选择目标参与者。

? 实现步骤:
1. 找到系统处理升级流程的 PromotionNoticeWizardPageProcessor.class 编译文件 该编译文件所在地目录为: D:\ptc\Windchill_9.1\Windchill\codebase\com\ptc\windchill\pdmlink\maturity\server\proc essors\wizard

注意:为了防止破坏系统,请备份该编译文件

2. 使用反编译工具

, 获得该 PromotionNoticeWizardPageProcessor.java 类。

3. 在 Eclipse 中的 Java 项目中,建立一个目录架构,目录架构包的层次结构和该类包的路 径一致 如:

4. 修改该类中的代码,其实就是注释掉一行代码:

package com.ptc.windchill.pdmlink.maturity.server.processors.wizard; import com.ptc.core.htmlcomp.wizard.WizardFormProcessor;

import wt.httpgw.*; import wt.util.WTException; import wt.util.WTMessage; public class PromotionNoticeWizardPageProcessor extends WizardFormProcessor { public static final String DESCRIPTION_PANE_ACTION = "PNDetailsPane"; public static final String GATHER_PANE_ACTION = "PNGatherPane"; public static final String OBJECTLIST_PANE_ACTION = "PNObjectListPane"; public static final String TRANSITION_PANE_ACTION = "PNTransitionPane"; public static final String PROCESS_PANE_ACTION = "PNProcessPane"; public static final String ROLE_PANE_ACTION = "PNResolveUsersPane"; public static final String ONLINE_HELP = "PromotionCreateHelp"; private static final String RESOURCE = "com.ptc.windchill.pdmlink.maturity.server.processors.processorsResource"; public PromotionNoticeWizardPageProcessor() { } public void initWizard(HTTPRequest httprequest, HTTPResponse httpresponse) throws WTException { try { java.util.Locale locale = LanguagePreference.getLocale(httprequest .getProperty("cgi.http_accept_language")); setTitle( WTMessage .getLocalizedMessage( "23", null, locale), "PromotionCreateHelp"); addStep( "PNDetailsPane", "step1_title", true, "step1_description"); addStep( "PNGatherPane", "step2_title", true, "step2_description"); addStep(

"com.ptc.windchill.pdmlink.maturity.server.process

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

"PNObjectListPane", "step3_title", true, "step3_description"); addStep( "PNTransitionPane", "step4_title", true, "step4_description"); addStep( "PNProcessPane", "step5_title", true, "step5_description"); //注释掉这行代码 addStep("PNResolveUsersPane", "step6_title", true, "step6_description"); setHeaderTemplate("promotionHeader"); setOnloadHandler("init_page"); setValidationHandler("validateAndSetFormData"); } catch (WTException wtexception) { wtexception.printStackTrace(); } } public void handleStepRequest(HTTPRequest httprequest, HTTPResponse httpresponse, String s) throws WTException { if (s.equals("PNDetailsPane") || s.equals("PNProcessPane") || s.equals("PNTransitionPane") || s.equals("PNResolveUsersPane")) { super.setMessageComponentEnabled(false); } else { super.setMessageComponentEnabled(true); }

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

"com.ptc.windchill.pdmlink.maturity.server.processors.processors

// // // // //

"com.ptc.windchill.pdmlink.maturity.server.processors.processorsResourc

"com.ptc.windchill.pdmlink.maturity.server.processors.processorsResourc

} public String getOkButtonFunction() { return "javascript:validateAndSubmit()"; } }

5. 清除 tomcat 缓存,重启 tomcat、windchill 服务。

? 最终效果:
1. 屏蔽,升级流程第六步之前,在产品下新建一个文档,然后升级该文档,此时升级界面为:

2. 屏蔽,升级流程第六步之后,登录系统,新建该文档,并升级该文档,此时升级界面为:

文档失效设置:
? 业务现状分析:

文档-WTDocument 或 CAD 文档-EPMDocument 的最新小版本的状态达到“已批准-CANCELLED”状态时 系统自动将之前所有版本中处于 “已批准-CANCELLED”状态的版本的相关状态设为 “已失效-CANCELLED” ; 文档 或 CAD 文档的最新小版本的状态达到 “已发行-RELEASED” 状态时系统自动将前所有版本中处于 “已 发行-RELEASED”状态的版本的相关状态设为“已失效-CANCELLED” 处于“已批准-cancelleds”或“已发行-released”状态的同一文档只能有一个版本

? 业务需求:
Ddd

? 实现步骤:
1. 客制化生命周期状态, “已失效” a. 在% wt_home %Src/wt/lifecycle/ (目录)找文件, D:\ptc\Windchill_9.1\Windchill\src\wt\lifecycle 找 如: 到如下 2 个文件: StateRB.rbInfo StateRB_zh_CN.rbInfo 复制到:D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\lifecycle 中,沒有路径则建立 b. 编辑 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\lifecycle 目录下 StateRB.rbInfo 英文资源文件 Example: StateRB.rbInfo (英文资源文件) 添加如下代码:
#document invalid Customization INVALID.value=invalid INVALID.shortDescription=invalid state

c.

编辑 D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\lifecycle 目录下 StateRB_zh_CN.rbInfo 中文资源文 Example: StateRB_zh_CN.rbInfo (中文资源文件) 添加如下代码:
#文档失效客制化 INVALID.value=已失效 INVALID.shortDescription=已失效状态

d. 进入 Windchill Shell 运行一下命令: 编译中文资源文件:ResourceBuild wt.lifecycle.StateRB_zh_CN
执行打包命令:ant -f codebase\MakeJar.xml

清除 Tomcat 缓存:D:\ptc\Windchill_9.1\Tomcat\work

重启 Tomcat、Windchill 系统:windchill stop & windchill start 生命周期状态资源文件编译后的目录: D:\ptc\Windchill_9.1\Windchill\codebase\wt\lifecycle 自己建的生命周期状态资源文件存放目录: D:\ptc\Windchill_9.1\Windchill\wtCustom\wt\lifecycle 2. 编写文档失效处理 java 类:DocumnetInvalid.java
package angus.com; import java.util.ArrayList; import java.util.List; import wt.doc.WTDocument; import wt.enterprise.RevisionControlled; import wt.epm.EPMDocument; import wt.fc.PersistenceHelper; import wt.fc.QueryResult; import wt.lifecycle.LifeCycleHelper; import wt.lifecycle.State; import wt.pds.StatementSpec; import wt.query.CompositeWhereExpression; import wt.query.LogicalOperator; import wt.query.QuerySpec; import wt.query.SearchCondition; import wt.query.WhereExpression; import wt.util.LocalizableMessage; import wt.vc.VersionControlHelper; import wt.vc.config.LatestConfigSpec; public class ModifySmallVersionState { /** * 获得目标对象的所有版本(工作、未工作) * @param claz * @param number */ 类类型对象(WtDocument、EPMDocument) 文档编号

@SuppressWarnings("unchecked") public static List<Object> getTargetAllVersions(Class claz, String number) { QueryResult qRes = null; WhereExpression whereNumber = null;

System.out.println("step into....\t" + claz + "\t" + number + "\n"); List<Object> objList = new ArrayList<Object>(); try { QuerySpec qSpec = new QuerySpec();// 构造 int index = qSpec.appendClassList(claz, true);

CompositeWhereExpression comWhere = new CompositeWhereExpression(Logica comWhere.append(whereNumber); qSpec.appendWhere(comWhere, new int[] { index }); qRes = PersistenceHelper.manager.find((StatementSpec) qSpec); while (qRes.hasMoreElements()) { objList.add(((Object[]) qRes.nextElement())[0]); } } catch (Exception e) { e.printStackTrace(); } return objList; } /** * 修改目标对象版本的状态 * @param targerVersion * @param objList */ 目标对象当前工作的版本 目标对象所有版本的集合

whereNumber = new SearchCondition(claz, "master>number",SearchCondition

public static void setLifeCycleState(LocalizableMessage targerVersion,List<Obj try { LocalizableMessage unWorkVersions = null;//未工作的版本(可能有多个) for (int i = 0; i < objList.size(); i++) { Object obj = objList.get(i); //System.out.println("obj" + obj.getClass().getName()); RevisionControlled rc = null;//父类对象 if (obj instanceof WTDocument) rc= (WTDocument) obj; else if (obj instanceof EPMDocument)rc = (EPMDocument) obj; unWorkVersions = rc.getIterationDisplayIdentifier(); //修改未工作的版本状态 if (unWorkVersions.equals(targerVersion)) continue; rc,State.toState("CANCELLED")); PersistenceHelper.manager.refresh(rc); // 刷新生命周期状态 System.out.println("名称:\t" + rc.getName()+ "\t 版本:\t" + rc.getIterationDisplayIdentifier());

LifeCycleHelper.service.setLifeCycleState((wt.lifecycle.LifeCycl

} } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 给工作流节点调用的方法 * @param obj 工作流绑定的对象 */ @SuppressWarnings("unchecked") public void WorkItemMethod(Object obj) { String number=""; Class claz=null; RevisionControlled rc = null; if (obj instanceof WTDocument) { number= ((WTDocument) obj).getNumber(); rc= (WTDocument) obj; claz=WTDocument.class; } else if (obj instanceof EPMDocument){ number= ((EPMDocument) obj).getNumber(); rc = (EPMDocument) obj; claz=EPMDocument.class; } List<Object> objList = getTargetAllVersions(claz, number); setLifeCycleState(rc.getIterationDisplayIdentifier(), objList); } /** * 用于 main方法测试 * @param number 文档编号 * @return WTDocument 匹配该文档编号的对象 */ @SuppressWarnings("deprecation") public WTDocument getTestTarget(String number) { WTDocument doc = null; try { QuerySpec qs = new QuerySpec(WTDocument.class); number);

SearchCondition sc = new SearchCondition(WTDocument.class,"master>numbe

qs.appendSearchCondition(sc); qs.appendAnd(); qs.appendSearchCondition(scOne); QueryResult qr = PersistenceHelper.manager.find(qs);// 得到所有版本的对像 LatestConfigSpec cfg = new LatestConfigSpec();// 构建一个过滤器 QueryResult qrOne = cfg.process(qr);// 按小版本排序 if (qrOne.hasMoreElements()) { doc = (WTDocument) qrOne.nextElement();// 得到最小版本的对像 + "\n"); } } catch (Exception e) { e.printStackTrace(); } return doc; } public static void main(String[] args) { ModifySmallVersionState m = new ModifySmallVersionState(); WTDocument document = m.getTestTarget("0000000041"); setLifeCycleState(document.getIterationDisplayIdentifier(), objList); } }

SearchCondition scOne = VersionControlHelper.getSearchCondition(wt.doc.

System.out.println("名称:\t" + doc.getName() + "\t 版本:\t" + doc.getIt

List<Object> objList = getTargetAllVersions(WTDocument.class, document.getN

3. 新建一个工作流: “文档失效”

4. 新建高级生命周期-“文档失效” ,关联工作流-“文档失效”

5. 在类型属性管理器中新建一个“文档失效”类型

6. 在对象初始化规则管理器,新建一个对象初始化规则-“文档失效” ,关联新建的工作流和生命周期

rule.xml 文件里面的修改:

新建一个对象初始化规则-“文档失效”

7. 到此为止,准备工作已完成

? 最终效果:
1. 使用 wcadmin/wcadmin 登录系统,在某个产品文件夹下面创建一份文档,类型为自定义的“文档 失效”类型,然后按流程升级和审阅,你会看到

2. 数据库中查询:

select wtdm.name wtd.latestiterationinfo

文档名称, 最新版本, 版本,

wtd.versionida2versioninfo

wtd.versionlevela2versioninfo 版序, wtdm.wtdocumentnumber 编号, wtd.iterationida2iterationinfo, wtd.statestate from wtdocument wtd, wtdocumentmaster wtdm where wtdm.ida2a2 = wtd.ida3masterreference and wtdm.WTDocumentNumber = '0000000182';

文件夹模板:
? 业务现状分析:
文件夹模板:在产品中根据设定的模板(4 个子文件夹,每个子文件夹都有一个域来管控, 通过 xml 来配置)创建一个文件夹

? 业务需求:

? 实现步骤:

? 最终效果:

sss:
? 业务现状分析:

? 业务需求:

? 实现步骤:

? 最终效果:

Windchill 知识

静态权限:

Windchill 主要是针对不同类型的对象在不同的生命周期状态下给不同角色不同的权限。 Windchill 的角色关注 4 个部分: 1. 对象类型: Windchill 中的主要对象类型包括:WTObject、WTDocument、EPMDocument、WTPart、SubFolder 等。 2. 生命周期: Windchill 中的生命周期,主要包括:正在工作、正在审阅、已批准、已发布、重新工作、已取消、 产品设计和开发、样机制作、小批试产、批量生产、生产变更和全部 3. 权限:

主要权限分为:读取、下载、修改、修改内容、通过移动创建、变更域、变更上下文、 删除 4. 角色: 系统已定义的角色和自己客制化的角色 注意: 1. 通常对象初始化规则设置应该使用“组织管理员”级别的用户(orgadmin)登录系统,依次选择: 组织 –> 实用程序 –> 对象初始化规则管理器,打开对象初始化规则页面进行相关操作 2. 通常工作流的设置应该使用“站点”级别的用户(wcadmin)登录系统,依次选择: 站点 –> 实用程序 –> 工作流管理器,打开工作流管理器页面进行相关操作 权限的控制在转变条件中进行 生命周期 的勾选

上图的含义是,当该类型的数据在“正在工作”时,修改该数据,他新版本的状态变为“正在工作” ,可以通 过升级流程跃迁到任何状态

Windchill 架构:

登陆界面在 com.teamcenter.rac.common 包里

Windchill 报错

枚举报错:

可能破坏了系统中的 Windchill 类的枚举类型,需要打包 打包命令:ant -f codebase\MakeJar.xml,然后重启

条目报错:


更多相关文档:

Windchill技术培训笔记.doc

Windchill技术培训笔记 - 搭建 Windchill 环境 开发工具设置

JAVAECLIPSE下配置WINDCHILL远程调试 WINDCHILL学习笔....pdf

JAVAECLIPSE下配置WINDCHILL远程调试 WINDCHILL学习笔记 - Tomcat 配置 修改 Tomcat\config.properties 找到 mode=prod,对比...

PTC Windchill 11介绍_图文.ppt

PTC Windchill 11介绍_计算机软件及应用_IT/计算机_专业资料。WELCOME TO ...Windchill技术培训笔记 76页 2下载券 PTC培训资料 65页 5下载券 Windchill产品...

Windchill 开发培训资料.doc

Windchill 开发培训资料_人力资源管理_经管营销_专业资料。Windchill 客制化开发...Windchill技术培训笔记 76页 2下载券 整套的windchill官方培训... 暂无评价 3...

JAVA常用命令 WINDCHILL学习笔记.pdf

JAVA常用命令 WINDCHILL学习笔记 - 打开 Windchill Homepage : start D:\ptc\Windchill_9.0\Windchill\bin\HomePag...

WC9_action&actionModel windchill学习笔记.doc

WC9_action&actionModel windchill学习笔记_工作总结/汇报_总结/汇报_实用文档。windchill学习笔记使用参数 jcaDebug=1。方法:jsp 页面中后面手动加上?jcaDebug=1;其...

windchill业务笔记.doc

windchill业务笔记 - 模块 1,业务管理 Windchill PDMlink 提供: 1.针对快速实施并基于 PTC 的 windchill 技术而设计的产品生命周期管理解决方案软 件...

Windchill Task InfoEngine.doc

Windchill技术培训笔记 76页 5财富值 Windchill 9.0 -

Windchill高级查询感悟笔记.doc

Windchill高级查询感悟笔记 - Windchill高级查询感悟笔记 首先

windchill 培训材料-00Agenda.ppt

Windchill技术培训笔记 76页 5财富值 整套的windchill官方培

WindchillAPI培训分解_图文.ppt

WindchillAPI培训分解 - Windchill API 培训 张玉 概述 ? 只有掌握Windchill API,才能实施好方案. ? 本文介绍方案实施中最常使用的API ? WC...

使用task的windchill集成webservice笔记.doc

使用task的windchill集成webservice笔记 - Windchill 集成 WebService: ? 创建 WebService 服务: 1. 使用 wcadmin 登录 Wi...

Windchill 培训材料Architecture_图文.ppt

Windchill 培训材料Architecture_经管营销_专业资料。Windchill 培训材料 Windchill Architecture Architecture Strategy Web Centric ? Build on Web standards Java, ...

Windchill 培训材料Agenda.ppt

Windchill 培训材料Agenda_经管营销_专业资料。Windchill 培训材料 collaboration Agenda innovation Jyhhwa Ferng jferng@ptc.com 2757-5549 global solutions ? 2000 ...

PTC Windchill10.1培训_图文.ppt

PTC Windchill10.1培训_计算机硬件及网络_IT/计算机_专业资料。Windchill10.1培训 Windchill基础知识培训 目录 ? 一、Windchill环境介绍 ? 二、查找信息 ? 三、...

整套的windchill官方培训教材!只得学习!.pdf

整套的windchill官方培训教材!只得学习! - Windchill PDM

Windchill培训-Creo数据管理培训_图文.ppt

Windchill培训-Creo数据管理培训 - Windchill与Creo集成-数据管理培训 深圳市参数领航科技有限公司 周洋 2015/6/23 目录 contents Wind...

基于elecworks与PTC Windchill的电气信息化平台的建设....doc

基于elecworks与PTC Windchill的电气信息化平台的建设方案_机械/仪表_工程科技_...Windchill技术培训笔记 76页 2下载券 WindChill二次开发的说明... 28页 1下载...

Windchill系统基本概念.ppt

东北师大附中理科学霸高中化学选修5笔记67份文档 九妖笑话 2014年笑话大全之让...Windchill产品及实施简介... 57页 免费 Windchill系统管理员培训... 74页 1下载...

Windchill 10.0用户培训-PDM系统常用操作.ppt

Windchill 10.0用户培训-PDM系统常用操作_计算机软件及应用_IT/计算机_专业资料。PDM系统常用操作.中国一拖集团有限公司 Windchill 10.0 用户培训教程 PDM系统常用操作...

更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com