1、TCE客户化I教程,培训教师:张振宇,第1章: 绪 论,3,1.1 课程目标,本课程计划: 回顾TCE系统架构,集中复习建立独立的客户化环境 为客户化提供基本知识 详细目标: 创建一个测试环境和用户化目录 定义新的类 定义新的界面 添加新属性 定义对话框 指定的帮助和消息文本,4,什么是可以客户化的,在TCE基础中哪些内容可以进行客户化?,5,1.2 学习前提,先决条件: PKM221基础 需要具有下列基础知识: 面相对象概念 数据库管理 C/S(client/server)架构 记事本,写字板,普通的编辑器,6,1.3 参考手册,可用HTML或pdf使用参考手册: MODeL Referen
2、ce (MT00323) Integrator Toolkit Customization (MT00321) Integrator Toolkit API Reference (MT00324) Release Bulletin (MT00302),7,阅读安装向导中关于以下内容的译本: 数据库 操作系统 编译器 客户化安装必须: OMF Integrator Toolkit (TKT) Support modules,1.4 系统需求,第2章: 体系结构概论,9,2.1 目标,本课以客户的视角从以下几方面提供了一个关于TCE系统总的看法: 识别关键的系统组成 检查它们的重要性 理解它们之间
3、的相互依赖关系,10,2.2 体系结构:系统构成,11,2.3 客户端,客户端: 处理显示 向服务端发送请求 处理服务端的返回结果 三种类型的客户端: interactive session (交互式会话) command session (命令会话) application session (应用程序会话),12,2.4 MUX,MUX 处理Daemon进程 允许进程间的逻辑连接 发送消息请求 可以不考虑网络协议和主机类型进行通信 MUX在哪里运行: 运行TCE的每台机器上都需要一个MUX 每台主机的每个环境中都需要一个MUX 由管理员启动的第一个TCE进程 MUX 在哪里获取信息: 环境变
4、量和/或参考文件 配置文件,13,2.5 Dispatcher,Dispatcher 在后台的服务器进程操作 管理服务器池 帮助、促进消息请求 Dispatcher在哪里运行: 在每台提供服务的机器上;这包括了几乎所有的客户端(通过服务器操作系统存取文件) 每台主机的每个环境中都需要一个Dispatcher 由管理员启动的第二个TCE进程,14,2.6 Servers,Servers 提供一套特定的功能 由 dispatcher管理 响应客户端和来自其它服务器的请求,15,2.7 服务器用例,Building Block Servers OS server database server MO
5、DeL server rules server UID server NLS server GUI server Method Serversdynamic unified server (objserv.exe)动态统一的服务器 OMF server APC server LCM server DMM server,16,2.7 功能架构:单主机,功能架构:单主机,17,功能架构:多主机,第3章:系统说明,19,3.1 目标,本章目标是提供关于TCE客户化的关键的可配置组件的概论:关键的客户化组件: 配置子系统:config .cfg 和 site.cfg 对象字典: tmti .prd 和
6、 mti .prd 文本: tmti .txt和 tmti.idx 窗体: tmti .frm和 tmti .fri 规则缓存(rules cache): RSXXXXXX.RCF,20,3.2 配置子系统,配置子系统: 定义可配置的产品行为 使用环境变量和配置文件 (config .cfg) 配置文件: 提供值之间的复杂的映射 为一个大的分布式系统定义配置 环境变量: 允许简单值的设置 对本机有效 优先于配置文件 配置文件位置: PDM_CONFIG 变量 (set in pdmsetup .bat) 配置文件的默认位置: %MTI_ROOT%configconfig.cfg,21,环境变量
7、,配置子系统中的环境变量: 通讯变量 pdmuser VC_MUX_IPPORT 支持本地化语言的变量 NLS_PATH (%MTI_ROOT%nls) 对象定义语言变量 MTIPATH (%MTI_ROOT% %MTI_ROOT%meta %MTI_ROOT%meta- %MTI_ROOT%config) 规则子系统变量 RULEFILE (%MTI_ROOT%rscache) 数据库变量 DDB (pdmmti) PWF (%MTI_ROOT%configpdmmti.pwf),22,服务定义,dispatcher 通过配置文件中的不同服务定义来管理各种服务: 下面是一些服务的名字: ml
8、oader (loader) mserv (MODeL server) msqlDDB (database server) nlsserv (NLS server) omfsvr (OMF server),23,关系服务映射,TCE服务通过配置编辑器配置在两个映射中,这两个映射 都包含在 config.cfg 文件中。 它们是: services map: 指明服务由哪个主机提供 service.cfg map:指明服务细节(独立进程的数量),24,服务映射,服务映射指明了哪台主机提供了哪些服务 # Services Map insert services host = “pcp755“mlo
9、ader “pcp755”mserv “pcp755”msqlpdmmti “pcp755”nlsserv “pcp755”omfsvr “pcp755”;,25,Services.cfg 映射,service.cfg映射指明了服务细节 (单独进程的数量)insert “service.cfg“ host=”pcp755“mloader“ “1 1 1 3 3 10 $(FILEPATH:q $(PDM_BIN:q) mloader)“mserv“ “1 1 1 1 1 10 $(FILEPATH:q $(PDM_BIN:q) mserv)“ “msqlpdmmti“ “1 1 6 6 6 2
10、 $(FILEPATH:q $(PDM_BIN:q)msqlora) -sn $(PWF_pdmmti) -C 5000“ “nlsserv“ “1 1 1 1 1 10 $(FILEPATH:q $(PDM_BIN:q) nlsserv)“ “omfsvr“ “1 1 5 10 10 60 $(FILEPATH:q $(PDM_BIN:q) objserv) -C 250“,26,配置文件使用方法,27,3.3 对象字典,对象字典 为系统操作所需要 定义: database(s) 类的层次 与下列文件关联: tmti.prd mti.prd 由 MODeL server提供服务 应用于: m
11、ethod servers UID server 由环境变量 METATOK 和 MTIPATH 定位,28,对象字典使用方法,29,3.4 文本,显示给用户的所有帮助文本和消息文本 定义在 tmti.txt tmti.idx 由NLS server提供服务 应用于 clients method server dispatcher 由下面两个环境变量定位 NLS_PATH NLS_LOCALE,30,文本文件使用方法,31,3.5 form文件,对话框的窗口内容定义在MODeL中,但是其排版时定义在form文件中。form文件: tmti.frm和tmti.fri 由UID server提供服
12、务 依赖于 MODeL server 被客户端应用 由 NLS_PATH 和NLS_LOCALE定位,32,form文件使用方法,33,3.6 规则缓存,规则缓存 一个包含所有当前规则的编译文件 由rules server提供服务 应用于: rule processor clients method servers notifier 由环境变量RULEFILE定位 规则类型 消息存取(message access) 位置选取(location selection) 通知(Notification),34,规则缓存使用方法,第4章: 系统工具,36,4.1 目标,本章目标为介绍启动、停止和检查T
13、CE系统状态的系统命令。这些系统命令是: cfgtest muxping, muxstart, muxstat和muxstop dspstart, dspstat, 和 dspstop netstart mtiwhich,37,4.2 cfgtest,cfgtest 为当前TCE环境读取和解释配置文件与环境变量 测试系统配置的信息:所有的值和映射;一个特定的值或所有值;一个特定的映射或所有映射。,38,cfgtest 使用方法,cfgtest -ltHDVMAsL -dvmhu name-f config-file -o outputl - 在分析时打印配置文件语句t - 打印词汇分析和分析跟
14、踪d - 打印指定的已定义名称D - 打印所有已定义名称v - 打印指定值V - 打印所有值m - 打印指定映射M - 打印所有映射,39,cfgtest 使用方法,A - 打印所有值和映射 h - 评估指定主机 u - 评估指定用户 f - 使用指定配置文件 s - 打印设置 shell (设定命令行解释器的位置)变量 L - 只使用本地配置文件,不用远程导入 o - 输出文件 H - 帮助,40,4.3 MUX,在命令行下可以应用的4个关于MUX的命令: muxping muxstart muxstat muxstop,41,muxping,muxping: 可以检查远程和本地的MUX是否
15、联通 使用方法:muxping -s size -c count -n -q -o output-H -h host 选项:h 需要连接的主机s 数据的大小c - 对重复连接计数n - 连接之间没有延迟q - 安静模式;不输出过程o - 输出文件H - 打印此帮助,42,muxping 用法,用法: muxping 这将连接本地MUX。 muxping -h cvgnw43 这将连接主机cvgnw43上的MUX。,43,muxstart,muxstart 在背景模式下启动MUX并校验之前MUX是否已经运行; 必须是被验证的用户才可以执行 使用: muxstart -i -f mux-path
16、-l log-file -o output -H -t level 选项:i - 显示MUX图标(仅在WINDOWS操作系统有效)f - MUX后台程序的路径l - MUX后台程序错误日志o - 输出文件H - 打印此帮助t - 设置跟踪层级别(0-3),44,muxstart 用法,用法: muxstart 启动 MUX. muxstart -l muxlog.txt -o muxout.txt 启动 MUX,并写到日志文件muxlog.txt和输出文件 muxout.txt。,45,muxstat,muxstat 提供了一个远程或本地的MUX的状态,例如它运行了多久和使用的IP。 使用:m
17、uxstat -v -c -e -u -o output -H -h host 选项:h - 需知道状态的主机v - 详细的;产生一个细节报告c - 包括客户端的状态e - 包括连接终端的状态u - 包括存贮的用户数据的概要H - 打印此帮助,46,muxstat 用法,用法:muxstat 报告本地 MUX的状态 。muxstat -h pcp755 返回如下内容: m:appsmeta32muxstat -h pcp755 pcp755: Up for 4 hours, 36 mins, 22 secs.,47,muxstop,muxstop停止MUX或使其重载配置文件 (依赖于使用标记)
18、。 停止MUX 关闭TCE。必须由被验证的用户执行。用法:muxstop -r -o output -H -h host 选项:h - 选项的主机r - 重载指定主机的配置数据和任何从该主机接收配 置信息的客户端o - 输出文件H - 打印此帮助,48,muxstop用法,用法: muxstop 停止本地MUX而且关掉TCE系统。 muxstop -r 不关闭TCE系统并重载本地主机的配置数据。 muxstop -r -h pctrn78 sgic63 不关闭TCE系统并重载指定主机(pctrn78和 sgic63)的配置数据。 主机值可以包括定义在config.cfg (hosts_tcp)
19、中的一个主机组。,49,4.4 dspstart, dspstat, and dspstop,在命令行下可应用的3个关于dispatcher的命令: dspstart dspstat dspstop,50,dspstart,dspstart 用来启动本地的 dispatcher。 用法:dspstart -tFsi -f path -c config -l log -o output -H 选项:t 追踪模式F 强制启动(即使服务器路径错误)s 设置模式,抑制服务器自动启动i 显示图标(仅限于 MS Windows)f 分发器程序的路径c 配置文件或映射l 错误和输出日志文件o 分发器服务的输
20、出文件H 打印此“帮助/用法”消息,51,dspstart 用法,用法: dspstart -o dspout.1 本命令将: 启动dispatcher 将dispatcher services 输出到文件dspout.1 将服务器日志和错误输出到文件dsplog.1,52,dspstat,dspstat 提供: 自dispatcher启动以来的累计统计信息 统计dispatcher管理的服务信息 统计本地和/或远程主机的信息 用法:dspstat -s service -v -o output -n count -H -h host 选项:h - 主机状态s - 服务状态v - 包括服务变化
21、信息o - 输出文件n - 空值 rpc 吞吐量测试H - 打印此帮助/用法消息,53,dspstat 用法,用法: dspstat 显示本地主机所有服务的统计信息 dspstat -s omfsvr 显示本地主机的omfsvr服务的统计信息 dspstat -s msqladminmti sgied11 显示在主机sgied11上的msqladminmti数据库服务的统计信息。,54,dspstop,dspstop 用来停止远程或本地系统的dispatcher 。 用法: dspstop -w -o output dspstop -r -a -s service -o output -h h
22、ost -H 选项:h - 分发器主机(一个或多个)w - 停止分发器,但要等待服务器空闲时r - 重新导入配置数据a - 停止所有现有服务器s - 停止指定服务的现有服务器o - 输出文件H - 打印此帮助/用法消息,55,dspstop 用法,用法: dspstop 停止本地的dspacher dspstop -ra 使本地dspacher重新导入配置数据 当完成所有当前的处理,停止并重启所有服务 -ra 选项不会中断数据库传送,56,4.5 netstart,Netstart同时启动MUX 和 dispatcher。MUX 日志文件指向 muxlog.txt。 dispatcher 日志
23、文件指向 dsplog.txt ,而标准错误指向 dspout.txt。 用法: netstartnetstart.bat文件的部分列表:rem Starts the mux and dispatcher in such a way as to easilyrem capture their output in a consistent fashion. Start therem mux as an icon and enable logging.muxstart -i -l muxlog.txtrem Start the dispatcher and enable logging. Capt
24、ure therem output of the dispatcher since thats where output fromrem started servers will go. Send command-line argument #1 torem the Dispatcher. If present, we expect this to be “-s“rem (disable autostart).dspstart -i -l dsplog.txt -o dspout.txt %1,57,4.6 mtiwhich,mtiwhich: 搜索TCE指定文件 使用环境变量 NLS_PAT
25、H 为 .txt, .idx, .frm 设置搜索路径 使用环境变量 MTIPATH为所有其它文件设置搜索路径,58,mtiwhich 语法,语法:mtiwhich -v variable file1 file2 实例:mtiwhich tmti.prd mti.prd查询文件 tmti.prd 和 mti.prd.mtiwhich -v PATH tmti.prd用变量Path查询文件tmti.prd,第5章: 文件和目录,60,5.1 目标,在完成这课以后将能识别和讨论:TCE文件范围及其应用 正式环境的目录结构和内容 测试环境和客户化目录 客户化目录的目录结构和内容,61,5.2 建立在
26、正式环境中的文件类型,建立在正式环境中的文件类型: .lbm 定义大图标的文件 .sbm 定义小图标的文件 .cfg 配置文件 .frm 定义对话框文件 .fri frm文件的索引 .lng -包含依赖MODeL的指令的语言 .prd 包含不依赖MODeL的指令的语言 .txt 消息、帮助的文本文件 .idx 索引文件在 .txt 文件 .log 日志文件 .mql, .msql, .sql 内在的支持 msql文件 .pwf 数据库密码文件 .RCF 缓存文件,62,5.3 环境目录结构,63,目录结构,64,目录结构,65,5.4 测试环境,测试环境: 用于建立和测试客户化内容 与正式环境
27、相独立以保护正式主环境 具有一个关联的测试数据库 为用户所特定(与特定机器相关) 可以不包含某些正式环境中的模块 不能包含正式环境中没有的模块 如果Integrator Toolkit 和所有支持模块未安装,测试环境无法建立,66,客户化目录,客户化目录: 包含用来定义客户化的源文件 (MODeL 代码和方法代码) 包含客户化定义的服务器 未建立测试环境前无法创建,67,5.5 正式环境和测试环境的对比关系,68,5.6测试环境中的文件类型,客户化创建的源文件类型: .dat 数据文件 .lbm 定义大图标的文件 .sbm 定义小图标的文件 .met - MODeL 文件 .mth 方法文件
28、客户化修改的文件类型: .cfg 配置文件 .def 定义的makefile文件,69,测试环境中的文件类型,客户化时生成的文件类型: .frm 定义对话框文件 .fri frm文件的索引 .lng 包含依赖MODeL的指令的语言 .mk 必须的makefile文件 .prd 包含不依赖MODeL的指令的语言 .txt 文本信息文件 .idx 索引信息文件 系统生成的文件: .log 日志文件 .mql, .msql, .sql 支持msql的内部文件 .pwf 数据库密码文件 .RCF 规则缓存文件,70,5.7 客户化目录结构,71,客户化目录结构,72,客户化目录结构,73,客户化目录结
29、构,第6章:在命令行下创建测试环境,75,6.1 目标,本章阐述了如何建立一个测试环境和客户化目录。下面介绍命令行指令意义: mktstenv: 创建一个测试环境 mkcusdir: 创建一个客户化目录 pdmsetup:确定运行时使用正确的tmti.prd 文件 cussetup:确保所有适用的环境变量都指向客户化目录,76,6.2 mktstenv,在命令行方式中通过mktstenv指令来建立一个测试环境。mktstenv是没有参数的命令。创建测试环境所需信息都通过交互式的命令行提示完成。可以通过输入“?” 得到帮助信息。注意:必须首先设置如下环境变量MTIPATH=d:tc50meta
30、d:tc50meta-,77,mktstenv用法,mktstenvTo set up your test environment answer the following prompts. For help about a prompt, enter “?”. After you answer all the prompts, you will have a chance to change any or all of your answers. Test environment directory ? testenv Database vendor ORA|SYB|INF|MSS ? OR
31、A Test database name ? testdb Is this an existing database ? N Your mti.prd file contains the following modules: omf lcm psm,78,mktstenv 用法(续),To build your test environment with all the listed modules, press the Return key; to delete modules from your test environment, enter the module names exactl
32、y as listed, separated by spaces. ? psm Oracle System user password ? oracle Enter Oracle-specific options - Existing Oracle tablespace to use ? Size of Oracle datafile in Megs ? 20 Full path of Oracle datafile dbstestdbspace.dbf? Test IPPORT number ? 7637,79,mktstenv用法(续),You selected the following
33、 : Test environment directory: Database vendor: Test database name: IPPORT: Oracle System user password: Creating new tablespace: with size: using datafile:Create test environmentwithout module(s): To continue, press the Return key, to re-enter prompts, press any other key.,80,6.3 pdmsetup,创建测试环境后运行
34、pdmsetup。应在测试环境下运行pdmsetup 。pdmsetup 保证了所有的环境变量都是指向测试环境的 tmti.prd 文件, 而不是正式环境的 tmti.prd 文件。用法: cd usertestenv pdmsetup,81,6.4 mkcusdir,在命令行方式下用mkcusdir命令来建立一个客户化目录。mkcusdir是没有参数的命令。创建测试环境所需信息都通过交互式的DOS提示完成。可以通过输入“?” 得到帮助信息,82,mkcusdir 用法,mkcusdirTo set up your customization directory answer the foll
35、owing prompts. For help about a prompt, enter “?”. Customization directory ? cusdir Three-character server name ? XXX Full server name xxx ? XXX Customization,83,6.5 cussetup,创建完客户化目录后运行cussetup。cussetup 需要在客户化目录下运行。cussetup 保证了适用的环境变量指向客户化目录。 用法: cd usertestenvcusdir cussetup在测试环境目录运行pdmsetup和客户化目录
36、运行cussetup之后, 运行 netstart 和 omf 来启动测试环境。,第 7 章: 类的定义,85,7.1 目标,本章学习如何应用MODeL在类层次结构中定义新类. 包括以下要点: 如何定义新类 如何为类定义一个外部显示名称 如何指定类特征 对特殊类型的类额外考虑: Relations tools inserted classes,86,7.2 类的定义概要,对象类类型:Abstract - (抽象类)Persistent - (永久类)Dynamic (动态类),87,对象数据Model,88,类的命名规则,类的命名规则: 长度限于8个字节 大写字母开头 分隔单词用大写字母 在所
37、有classes, attributes, and messages中保持唯一 不要用大小写来定义唯一性 使用下列前缀规范来确定唯一性: a0 - i9 for vars j0 - z9 for customizers 每个类必须具有: 三字节类前缀标识 一个显示名,89,7.3 MODeL入门,MODeL - Metaphase Object Definition Language:是一种面向对象的系统定义语言,用以定义对象字典中(tmti.prd)所有信息。 对象在使用之前必须是已被定义的。 使用全局命名: 类和属性不能重名。,90,7.4 用MODeL定义类,句法: define per
38、sistent | abstract | dynamic class class-name with parent | parent is parent-name; 定义一个叫做 class-name的类 persistent 是所有非动态的叶节点类的缺省类型 新类在类层次结构中被放置于parent-name之下,91,用MODeL定义类,示例:define persistent class Document with parent GenDoc;define persistent class NewClass;(默认为是GenDoc的子类)define abstract class Prod
39、BI with parent BusItem;define dynamic class DPrtRpt with parent PdmDialg;,92,MODeL Localization Statement display as,语法:display name as displayed-value at class-namein locale-name示例:define persistent class Document with parent GenDoc; display as “普通文档”;,93,7.5 一般类的特征,类具有以下特征: 在浏览窗口中使用何种图标 使用何种对话框 (C
40、reate, Query, Update, Delete)这些信息在类常量中定义。示例:Document.IconFamilyC = “document”;Document.CreateDialogC = “DDmtCre”;,94,7.6 Relations,Relations: 在两个类之间定义连接 是TCE中的类 具有方向性,故每个方向都必须命名 可以通过编辑关系和鼠标拖动两种方式来建立 语法: define persistent | abstract | dynamicnodrops | droponleft | dropbothrelation relation-namebetwee
41、n classes left-class-name (left-relationship)AND right-class-name (right-relationship)with parent | parent is parent-name,95,Relations 示例,示例1: define persistent droponleft relation AdHocDep between classes WorkItem (AdHocDependentOnItems) and WorkItem (AdHocDependentForItems) with parent Depndncy;示例
42、2: define abstract nodrops relation Contain between classes DataItem (ContentsOfDataItem) and DataItem (DataItemsContainingItem) with parent Relation;,96,Relations的显示名,Relations的显示名: Relation类需要一个显示(display as)声明语句 每个Relationship名都需要一个显示(display as) 声明语句 Relationship名还需要在树状视图下的缩写,由下面两个类常量定义:LTreeVie
43、wNameCRTreeViewNameC,97,Relations显示名示例,define persistent droponleft relation Attach between classes BusItem (DataItemsAttachedToBusItem) and DataItem (BusItemsAttachingDataItem) with parent GenAttR;display Attach as “Attach Relation“; display DataItemsAttachedToBusItem as “Attaches“; display BusItem
44、sAttachingDataItem as “Is Attached By“;,98,dropped on implies,怎么确定将一个图标拖拽到另外一个图标创建的是什么relationship?用 dropped on implies 来确定.语法:class-name dropped on other-class-name implies relationship-name,99,dropped on implies 示例,define cached category UI, NOTIF, MSGACC dropboth relation UsrToGrp between classes
45、 UsrGrp ( ContainsMembers ) and Usr (MemberOfGroups ) with parent a0rwww;Usr dropped on UsrGrp implies ContainsMembers;UsrGrp dropped on Usr implies MemberOfGroups;,100,7.7 Tools,工具类使用户可以在TCE中启动外部应用程序。 Tool 定义包括: 启动命令 工具实例化 关联的类 启动命令: 可用于启动工具 可用于一个明确的尚未包含工具的实例,101,定义工具类,定义工具类示例: define persistent cl
46、ass XfigTool with parent Tool; XfigTool.DefaultCommandC = “xfig”;嵌套语法示例: define persistent class XfigTool with parent Tool; DefaultCommandC = “xfig”; ,102,Tool 实例化,Tool实例化: 在系统中使用工具前必须创建一个且只能是一个的实例。 没有创建对话框或菜单选项,作为代替地,必须将工具对象载入到数据库中。一个用于载入对象的.dat文件示例: class XfigTool ToolName = Xfig Sketcher Tool ;Ap
47、plication = X2M ;Command = xfig ; ,103,将一个工具关联到一个类,将一个工具关联到一个类允许用户可以打开TCE中的工具实例。一个工具可能通过一个类的类常量LaunchToolC来关联到这个类。示例:XfigSK .LaunchToolC = “XfigTool”;,104,7.8 Inserting Classes(插入类),现在,你能看到怎样定义叶节点类。,Before adding new leaf class:,After adding new leaf class,Before adding new leaf class:,105,Inserting
48、 Classes(插入类),但是如果你改变了这个: 像这样:,106,为什么要插入类,为什么要插入一个类? 要改变某指定类的所有子类的属性或行为但不改变父类本身: 属性和行为 (messages)是可继承的 不满意或根本无法改变父 如果要改变所有子类但不需要或不能改变父类,这时就使用MODeL的插入类,107,Inserted Classes插入的类,语法: insert class-name immediately under parent-name; 示例: Insert a WorkItem for LCM under OMFs WorkItem: insert WrkImLcm under WorkItem;Insert a WorkItem for CCM under OMFs WorkItem but above WrkImLcm: insert WrkImCcm immediately under WorkItem;,108,插入类,insert WrkImLcm under WorkItem; insert WrkImCcm immediately under WorkItem;,109,插入类的简要步骤,