1、 Teamcenter Enterprise 帮助文档Teamcenter Enterprise 客户化 II 练习通力凯顿(北京)系统集成有限公司地址: 北京市崇文区广渠门南小街领行国际中心 1-1-1201 邮编 100061网址: http:/电话: +86-10-671748682007 UFC, All Rights Reserved 1传真: +86-10-67174866作者: 张振宇日期: 2007 年 02 月 02 日目 录练习 1:创建一个测试环境和一个客户化目录 4简介 .4任务清单 4任务 1:创建一个测试环境 5任务说明 .5任务意义 .5任务操作 .5任务确认 .
2、6进一步练习 .6任务 2:创建一个客户化目录 7任务说明 .7任务意义 .7任务操作 .7任务 3:创建一个文件系统、个人工作区和一个数据仓库 .8任务说明 .8任务意义 .8任务操作 .8练习 2:替换一个已经存在的方法 12简介 .12任务 1:替换一个存在的方法 13任务操作 .13练习 3A:以 AtClass 发送一个消息 16简介 .16任务 1:以 AtClass 发送一个消息 .17任务操作 .17练习 3B:在消息覆写上使用“Hooks(钩子) ”182007 UFC, All Rights Reserved 2简介 .18任务 1:在消息覆写上使用“Hooks(钩子) ”
3、.19任务操作 .19任务验证 .19简单的编译指令 .20练习 4:使用名值表属性(Name Value Table Attributes) 21简介 .21任务 1:使用名值表属性 22任务操作 .22任务验证 .23练习 5:使用一个对话框按钮来运行一个新的对话框显示一个全表(Full Table) .24简介 .24任务 1:使用一个对话框按钮来运行一个新的对话框显示一个全表(Full Table) 25任务操作 .25任务验证 .26练习 6:使用 OBJ、OS、META 和 NLS 函数来创建一个对象属性的报表(Report ) .27简介 .27任务 1:使用 OBJ、OS、ME
4、TA 和 NLS.28任务操作 .28任务验证 .29进一步的练习 29练习 7:使用配制(Configuration)和会话管理(session)函数来获得信息 30简介 .30任务 1:使用配制(Configuration)和会话管理(session)函数 .31任务操作 .31任务验证 .31练习 8:使用用户界面函数来显示提示(prompt)和创建浏览窗口( browser) 32简介 .32任务 1:使用用户界面函数 33任务操作 .33任务验证 .33练习 9:使用带有交互式通知(interactive notification)的注册服务(registry server) 34简
5、介 .34任务 1:使用带有交互式通知的注册服务 35任务操作 .352007 UFC, All Rights Reserved 3任务验证 .36练习 10:为一个消息流程创建一个新的 LCM 消息 .37简介 .37任务 1:为一个消息流程创建一个新的 LCM 消息 .38任务操作 .38任务验证 .38Detailed Test Procedure for Workshop 10(练习 10 的详细测试步骤) 39练习 11:使用自动序列生成器 41简介 .41需求 .41一般步骤 41测试你的工作 .41问题 .41提示 .41练习 12:创建并发送事件(creating and po
6、sting events) 43简介 .43任务 1:创建和发送事件 44任务操作 .44练习 13:创建一个命令行客户端 45简介 .45任务 1:创建一个命令行客户端 .46任务操作 .46任务验证 .47练习 14:在非交互式客户端 OMFCL 为用户创建一个消息 48简介 .48任务 1:在非交互式客户端 OMFCL 为用户创建一个消息 .49任务操作 .49任务验证 .49练习 15:内存管理 50简介 .50任务 1:内存管理 51任务操作 .512007 UFC, All Rights Reserved 4练习 1:创建一个测试环境和一个客户化目录简介在本练习中,你将使用 mkt
7、stenv 命令来创建一个测试环境。任务清单 创建一个测试环境 创建一个客户化目录 创建一个文件系统(File System) ,个人工作区(Work Location)和数据仓库(Vault ) 。2007 UFC, All Rights Reserved 5任务 1:创建一个测试环境任务说明在本任务中,你将创建一个测试环境和数据库。你要使用这个新的测试环境来构建你的客户化环境。本课程后面的练习将使用这个新的测试环境。任务意义创建一个测试环境允许你构建和测试你的客户化工作,而不影响你的产品正式环境。任务操作1. 确认下列系统环境变量已经被设置。如果没有,按下列方式设置: MTI_ROOT =
8、 MTI_ROOT MTIPATH = %MTI_ROOT% %MTI_ROOT%meta %MTI_ROOT%meta- %MTI_ROOT%config(每个路径字符串应该以空格隔开) METATOK = %MTI_ROOT%tmti.prd NLS_LOCAL = %MTI_ROOT%nlsen_us NLS_PATH = %MTI_ROOT%nls2. 使用教师提供的用户名登录操作系统3. 在 MTI_ROOTconfig 目录,运行 pdmsetup。4. 从 HOME,运行 mktstenv,并使用下面表中的提示来提供相应的值。注意:在你输入所有的值之后,你将有一个机会浏览你所输入
9、的值。提示 值Test Environment Directory a2mtestDatabase Vendor ORA 或者直接回车Test Database Name a2mdbIs this an existing database? N 或者直接回车Modules to exclude 直接回车(正式环境的所有安装的模块都有)Oracle System user password oracleExisting Tablespace Name 直接回车Size of Oracle tablespace megs 120Full path of Oracle data file 直接回车以
10、默认2007 UFC, All Rights Reserved 6Test IPPORT number 7570任务确认验证你的测试环境在功能上是可用的:1. 搜索文件 vsvars32.bat。注意文件的位置。2. 编辑 a2mtestpdmsetup.bat: 使用 notepad 命令打开 a2mtestpdmdsetup。 添加下面一行语句到文件的开头:call pathvsvars32.bat替换 path 为 vsvars32.bat 的路径。 保存并关闭 pdmsetup.bat。注意:这一工作将确保你使用的是正确的编译器。3. 更改目录到 a2mtest 并运行 pdmsetu
11、p。4. 通过运行 omf 打开经典端,并以 super user 登录(不需要输入密码) 。注意:当 OMF 启动后,你将进入 Home Collection for super user 浏览窗口。注意浏览窗口的背景颜色是淡蓝色而不是白色。这个就让你知道你是在测试环境下运行 OMF。5. 在你的主机上有多少 muxd.exe 进程在运行?为什么?注意:通过同时在键盘上按下 + + ,你可以浏览到活动进程数,点击 Task Manager 按钮,选择 Processes 标签。进一步练习通过编辑 config.cfg 文件来更改你的测试环境的背景颜色。那些动作需要被执行,以使得更改后的配置信
12、息能够被合并到 active Metaphase session?2007 UFC, All Rights Reserved 7任务 2:创建一个客户化目录任务说明在本练习中你将使用 mkcusdir 命令来创建一个客户化目录。任务意义这一任务将创建一个目录结构来用于构建你的客户化服务。客户化目录是一个用于开发 MODeL 代码、方法代码和执行其它客户化活动的地方,它不会影响产品环境。任务操作1. 关闭经典端。2. 运行 dspstop 来停止 dispatcher 和 muxstop 来停止 MUX。3. 在 a2mtest 目录下,运行 mkcusdir 并按照下面的提示输入相应的值:At
13、tribute ValueCustomization Directory a2mdirThree-character server name a2mFull server name a2m Customization4. 在新的 a2mdir 目录,通过运行 cussetup。5. 运行 nmake metas 来构建你的对象字典。6. 运行 nmake all 来构建的可执行服务。7. 复制这一文件,TEMPLATES pdmc.h 到 a2mdirinclude。 (覆盖已存在的pdmc.h 文件) 。8. 为了后续的练习做准备,编辑 a2mdirsvrsvrcusmk.def,解除下面含
14、粗体的几行的注释:# Uncomment the following line if your customization defines new messages$(SVR_BIN):$(CLIENT_LIB)# Uncomment the following line if your customization defines new C methods$(SVR_BIN):$(PRODUCT_LIB)2007 UFC, All Rights Reserved 8任务 3:创建一个文件系统、个人工作区和一个数据仓库任务说明在本任务中,你将创建一个文件系统,一个个人工作区和一个数据仓库。你将
15、使用这些来保存你将在下面练习中创建的元数据。任务意义数据项是由数据(操作系统上的文件)和元数据组成的。关联到数据项的文件必须被存在一个个人工作区或者一个数据仓库位置。个人工作区和数据仓库位置必须建立在一个Teamcenter 的文件系统中。任务操作1. 运行 netstart。2. 运行 omf 并以 super user 来登录。3. 创建一个文件系统:(1)在一个 Exploring 窗口,导向到 HOMEa2mtesta2mdir 文件夹。在那个文件夹下,创建一个叫做 filesystem 的文件夹。(2)在 Home Collection 窗口,选择 Create - Administ
16、rative Classes - File System。(3)在 Create File System 对话框输入下面的信息并点击 OK。 Host/Host Group Name:点击输入区右侧的列表按钮。你的主机的名称将会自动填充到你输入区中。2007 UFC, All Rights Reserved 9 Root Path:输入 HOMEa2mtesta2mdirfilesystem。 Path Format:选择 NTFS。 Proxy Host:点击输入区右侧的列表按钮。你的主机的名称将会自动填充到你输入区中。 Validate On All Host:应该被选上。 Prefer
17、to use the Proxy Host for this File System:不应该选上。 Use Proxy Host to access files not owned by session user:不应该被选上。4. 创建一个个人工作区。在 OMF 上执行这一个任务,不要在操作系统这一级别上执行这一任务。(1)在 Home Collection 浏览窗口,选择 Create Work Location。2007 UFC, All Rights Reserved 10(2)完成 Create Work Location 对话框。提示:对于 Full Path,创建一个文件系统下的
18、子目录。(3)为 super user 创建一个数据仓库。 (无数据仓库位置是必要的。 )2007 UFC, All Rights Reserved 11 在 Home Collection,选择 Create Administrative Classes Vault。 完成下面的对话框:练习 1 结束2007 UFC, All Rights Reserved 12练习 2:替换一个已经存在的方法简介在本练习中,你将在 DPbiUpd 类下插入一个类 DB22Upd。然后你将在抽象类DB22Upd 上修改消息 ValidateDialog 的行为,主要通过关联消息和添加新的方法代码来实现。新的
19、方法代码将检验属性类型(前缀“22-” )并产生一个消息来记录需求。2007 UFC, All Rights Reserved 13任务 1:替换一个存在的方法任务操作1. 在 omf 服务中打开方法跟踪: 在 a2mtest 目录下,编辑 config.cfg 文件。在 service.cfg 映射的 omfsvr 入口添加“-tm ”参数。 停止 dispatcher(dspstop)和 MUX(muxstop) 。 重新启动 MUX 和 dispatcher(netstart)来包含更改的配置(跟踪选项)到运行的系统中。2. 产生一个方法跟踪来修改 Document,因此通过下面几步来调
20、用消息ValidateDialog:(1)启动 OMF 并以 super user 登录。(2)在 Home Collection 窗口,创建一个 Document。 (空下 Project 输入区不添)3. 在 dispatcher 输出文件中找到 ValidateDialog 消息的调用:(1)如果 dispatcher 是通过 netstart 命令来开启的, ,那么 dispatcher 输出文件(dspout_0.txt )将在运行 netstart 的目录被找到。(2)打开 dspout_0.txt 文件并找到 ValidateDialog 消息。4. 回答下列问题:(1)消息 V
21、alidateDialog 解算哪些类?(2)哪些方法调用 ValidateDialog?(3)ValidateDialog 调用什么消息?5. 定义插入类 DB22Upd,在 DPbiUpd 之下:(1)在 a2mdirsvr 目录下创建 MODeL 插入文件 a2mins.met。(2)通过添加一个单独的 MODeL 语句来插入(insert )一个新的类 DB22Upd到 DPbiUpd 之下(under) 。(3)在 a2mdirsvr 目录下编辑 mti.prd 文件,来添加新的首行以包含a2mins.met 文件。6. 关联 ValidateDialog 消息到 DB22Upd 之
22、上:(1)在 a2mdirsrc 下创建一个新的 MODeL 源文件。命名应该按照classname.met 的方式。所以新的文件将被叫做 DB22Upd.met。(2)通过在 DB22Upd.met 中添加下面的语句,来将 ValidateDialog 消息关联到DB22Upd。attach message ValidateDialog to DB22Upd in server a2msvr;2007 UFC, All Rights Reserved 14(3)通过在添加新的源文件到 srcsrccusmk.def 文件的 MET_FILES 列表中来将新的源文件包含到构建中,如下所示:#
23、Include the make-include for your Customization.*ginclude $(PRODUCT_BASE)/cusincMET_FILES = model.met DB22Upd.metBRW_MET_FILE = browser.metC_MTH_FILES = cmeth.mthFRM_FILES = form.frm(4)运行 cnvdef 来更新这一目录的 Makefile。(5)运行 nmake init 来重新构建你的服务。7. 复制一个新的方法文件到源文件目录并重新构建你的服务:(1)复制 ws2a.mth 文件到 src 目录,并重命名为
24、 DB22Upd.mth。(2)更新 srccusmk.def 文件反映到新的 C_MTH_FILE 上:# Include the make-include for your Customization.*ginclude $(PRODUCT_BASE)/cusincMET_FILES = model.met DB22Upd.metBRW_MET_FILE = browser.metC_MTH_FILES = cmeth.mth DB22Upd.mthFRM_FILES = form.frm(3)运行 cnvdef 命令来重新构建执行文件(Makefile) 。(4)运行 nmake all
25、 来重新构建服务(通常在重新构建一个服务之前应停止dispatcher) 。(5)如果构建失败,滚动屏幕来检查错误。8. 构建一个独立运行的客户化服务:(1)通过注释下面的语句来编辑 svr/defa2m.met 文件:resolve server a2msvr dynamically(2)重新构建对象字典。9. 为 a2m 服务开启方法跟踪:(1)编辑 a2mdir 目录下的 cus.cfg 文件。添加 -tm 命令行参数到 service.cfg 映射的 a2msvr 服务入口。(2)解除对插入和配置 a2msvr 服务的语句的注释。10. 通过 dspstop 和 muxstop 命令来
26、停止你的系统。11. 运行命令 netstart 来重新启动包含了更新的配置信息(跟踪)的系统。12. 通过测试一个 document 来测试你的工作。注意:客户化的服务可以运行为动态联合服务(omfsvr) (DUS)的一部分,或者可2007 UFC, All Rights Reserved 15以被更改为独立运行。同时跟踪独立运行的客户化服务和 omfsvr 将有助于未来练习中提供充足的调试信息。13. 看一下 dispatcher 输出文件并回答下面的问题:(1)ValidateDialog 消息解算哪些类?(2)哪些服务包含了方法 DB22Upd:ValidateDialog?练习 2
27、 结束2007 UFC, All Rights Reserved 16练习 3A:以 AtClass 发送一个消息简介在本练习中,你将变更 SpecDoc 类的 Update 行为为原始的更新设计,而同时保留客户化行为对 BusItem 的所有其它子类的影响。这一任务将通过在 DSpdUpd 上执行ValidateDialog 来实现。2007 UFC, All Rights Reserved 17任务 1:以 AtClass 发送一个消息任务操作1. 关联 ValidateDialog 消息到 DSpdUpd 类上。(1)运行 nmake init 来重新构建对象字典。(2)在 src 目录
28、下创建一个新的 MODeL 源文件 DSpdUpd.met。(3)编辑这一文件添加 attach 语句。(4)更新你的 srccusmk.def 文件。(5)运行 cnvdef。(6)在 a2mdir 目录下,运行 nmake init 来构建你的对象字典。2. 复制 DB22Upd.mth 并重命名为 DSpdUpd.mth。3. 更新 srcsrccusmk.def 文件以反映这一新的方法文件。4. 运行 cnvdef 来更新执行文件(Makefile) 。5. 编写方法 DSpdUpd:ValidateDialog,来发送消息到 DBieUpd 类上。这样将绕开添加到 DB22Upd 类
29、上的客户化行为。为了完成这一任务,按如下方式编辑DSpdUpd.mth:(1)更改方法名称和所有出现 DB22Upd 的地方为正确的值。(2)通过一个发送相同消息 AtClass(例如:ValidateDialogAtClass)的语句替换新方法的所有方法功能。注意: 最好使用 DBieUpdClass 作为参数(在文件 include/Mtimsgh.h 使用#defined 为 DBieUpd 定义)而不是使用字符串 DBieUpd。 传递给方法中的其他消息的消息参数仅仅作为接收(received)被传递。比如:mfail,不是5. 定义一个按钮消息到 Assembly Get Info
30、对话框上。这一按钮将产生一个新的对话框显示零件列表。定义新的消息命名为 PartsButton, like ButtonMsg:(1)创建一个文件(命名为 msga2mmsg.met)来定义 PartsButton 消息。(2)使用 MODeL 语句定义对象消息 PartsButton like ButtonMsg。(3)为新的按钮消息使用 display as 语句。最好将 display as 语句放置在 src 目录下的 assembly.met 文件中。保留 msg 目录来专门放置 define message 语句。(4)记住添加 a2mmsg.met 到 msgcusmk.def。
31、6. 问题:哪个对象将被作为第一个参数传递到 PartsButton,用户选择的装配件还是GetInfo 对话框对象 ?7. 关联我们编写的方法所需要的消息到合适的类上。为了完成这些,按照下面的内容2007 UFC, All Rights Reserved 26完成对 assembly.met 的编辑:(1)关联 SetDialogDefaults 到合适的类上。(2)关联 PartsButton 到合适的类上。8. 使用 nmake init 来构建你的消息目录和对象字典。在运行 cnvdef 前确定.def 文件已经被更新以反映新的.met 源文件。9. 创建一个新的 C 方法文件命名为
32、assembly.mth。通过从教师源文件目录复制和重命名 ws5.mth 来实现。10. 在 assembly.mth 文件中为 PartsButton 完成方法代码。通过编辑所有以/student 开头的语句完成:(1)调用消息 SetUpDialog 来创建一个新对话框类的实例。注意 SetUpDialog 将调用 ConstructDialog 和 SetDialogDefaults 消息。这将要唤醒你的客户化SetDialogDefaults 方法代码。多关注一下对 SetUpDialog 的参数的描述。(2)调用消息 InteractWithUser 来显示新的对话窗口。11. 在
33、 assembly.mth 文件中为 SetDialogDefaults 完成方法代码。通过编辑所有以/student 开头的语句完成:(1)assembly.mth 文件包含 SetDialogDefaults 的方法代码的要点。(2)你需要完成方法。方法代码要做三件事: 调用 SetDialogDefaultsAtParent 以确保所有源消息的功能都被保持了。 发送消息(SetUpContext 和 ExpandRelationWithCTxt)来返回所有同所选项目相关的对象。主要通过产品结构关系来查找(AsRevRev 关系) 。 循环返回的零件,并将零件的属性装入到 InfoPrtT
34、able 表的三列。填充表的一行为返回的一个零件。使用对象层函数来操作全表属性。任务验证1. 使用 nmake all 来构建你的服务。2. 检验编译记录来寻找错误。3. 启动你的系统。4. 创建一些组件和部件。5. 通过拖拽一些装配件和组件到一个装配件上来完成对一个产品结构的创建。6. 执行一个 Get Info 在那个装配件上。7. 你应该看到 Get Info 对话框上的 Parts 按钮。8. 按下 Parts 按钮,则你应该看到你的新对话框出现了,它包含了一个表以显示这一装配件所使用的零件。练习 5 结束2007 UFC, All Rights Reserved 27练习 6:使用
35、OBJ、OS 、META 和 NLS 函数来创建一个对象属性的报表(Report)简介在本练习中,你将定义一个新的消息来接收一个或多个被选项目并能将对象的属性名/值写入到一个报表文件中。2007 UFC, All Rights Reserved 28任务 1:使用 OBJ、OS、META 和 NLS任务操作1. 定义一个新的消息命名为 NewReport like SelectedItemSetMsg。为了完成这一任务,编辑 msg/a2mmsg.met 文件,添加语句 define class message NewReport like SelectedItemSetMsg;注意:Sele
36、ctedItemSetMsg 用于为一个或多个被选项目工作且它是一个类消息。因此,define 语句、 attach 语句和方法定义将需要一个词 class。如果你没有指定 class,则消息将默认为一个对象消息。2. 创建一个新的 MODeL 源文件命名为 pdmitem.met。3. 关联 NewReport 消息到 PdmItem 类上。PdmItem 被选择为消息关联的类,这样就能使得出现在浏览窗口的任何项目都能为它产生一个报表。4. 创建一个浏览窗口 MODeL 源文件命名为 pdmitemb.met。5. 在这一文件中,定义一个菜单选项(menu option)来发送 NewRep
37、ort 消息。为了完成这一任务,按如下方式编辑文件:(1)使用 NewReport 消息定义新的 option。(2)显示此 option 为 Write Report File。(3)通过将此 option 关联到一个 option list 上来将它关联到 Info 菜单下。通过浏览窗口使用 Help-Menus 和 mvi 来找到 option list 的名称。提示: 在 cussetup.bat 文件中的语句: set REVEAL_MODEL TRUE = +。它使得你能够在帮助屏幕上看到 MODeL 名称。 参考附录部分: How to find option lists in
38、order to change Browser options。6. 重新构建对象字典。7. 通过复制 TEMPLATES 目录下的 ws6.mth 并重命名为 pdmitem.mth 来创建一个新的 C 方法文件。8. pdmitem.mth 文件包含 PdmItem:NewReport 方法的要点。你需要完成方法。这一方法需要做下列事情:(1)创建和打开一个报表文件。完整的路径(包括文件名)应该是源目录、字符串rep_、日期(data)和扩展名.txt。(2)按下面的要求编写报表。为每一个输入(被选的)项,做三件事情: 从对象返回类属性。 获得关联到这个类上的属性的列表。2007 UFC,
39、 All Rights Reserved 29 为每一个属性,作如下操作: 返回提示(display as 语句) 。 使用 objGetAttribute 来获得属性类型的值。 打印提示/值到文件中。任务验证1. 停止 dispatcher。2. 重新构建你的服务。3. 运行 netstart。4. 检查编译记录查验错误。5. 通过选择一些项目,点击 Info - Write Report File 来测试你的方法。这回在你的源目录下产生一个报表文件。注意:到这一步,没有任何信息(指出报表已完成)显示到浏览窗口的状态区。这一工作将在后面的练习中完成。进一步的练习1. 运行一个文本浏览器(比如:Notepad)来显示报表。2. API(osExecuteAsync() ) ,可以被用来在方法中运行一个操作系统应用程序。要使 osExecuteAsync 正确的工作需要两件事情:(1)第一个参数必须是标识进程名称的名称,通常是可执行程序的名称。(2)argv 向量必须最终(terminated)是 NULL。练习 6 结束