Windchill查找某一个id关联的数据库表
Windchill查找某一个id关联的数据库表
1、执行想要查询区域的UI,同时使用以下命令捕获生成的 SQL
设置 log4j.logger.wt.pom.sql=DEBUG
位置: $WT_HOME\codebase\WEB-INF\log4jMethodServer.properties
2、查询数据库表之间的关系
1、使用 describe 指示数据库泄露表中的列名
- 注意:CLASSNAMExxxxx 和 IDA3x 将位于列列表中
- 示例:ControlBranch 表
名称 是否为空? 类型
ADHOCSTRINGIDENTIFIER VARCHAR2(180)
HASARCHIVEINFOARCHIVEINFO NUMBER(1)
CLASSNAMEKEYC5 VARCHAR2(600)
IDA3C5 NUMBER
BRANCHPOINTUFID VARCHAR2(4000)
CLASSNAMEKEYB5 VARCHAR2(600)
IDA3B5 NUMBER
CLASSNAMEKEYD5 VARCHAR2(600)
IDA3D5 NUMBER
ONEOFFVERSIONID VARCHAR2(180)
CLASSNAMEKEYA5 VARCHAR2(600)
IDA3A5 NUMBER
SESSIONOWNER NUMBER
CREATESTAMPA2 DATE
MARKFORDELETEA2 NOT NULL NUMBER
MODIFYSTAMPA2 DATE
CLASSNAMEA2A2 VARCHAR2(600)
IDA2A2 NOT NULL NUMBER
UPDATECOUNTA2 NUMBER
UPDATESTAMPA2 DATE
VARIATION1 VARCHAR2(90)
VARIATION2 VARCHAR2(90)
VERSIONID VARCHAR2(180)
VIEWID NUMBER
WIPSTATE VARCHAR2(90)
2、查找唯一标识数据库表的主键
- CLASSNAMExxx 和 ida3xxx 列成对工作
- CLASSNAMExxx 列包含正在引用的表
- IDA3xx 列包含这些表中的参考值
- IDa3xx 数字指向 CLASSNAMExxx 列中引用的表中的 ida2a2(主键)值
- 每组 CLASSNAMExxx 和 ida3xxx 对都指向多个表中的关系
示例:使用 CLASSNAMEKEYB5 和 IDA3B5 列确定正在引用的表:
- 查询数据库表 (controlBranch) 以查找 Classname (ClassnameKeyB5) 的不同值
select distinct CLASSNAMEKEYB5 from controlBranch;
wt.lifecycle.LifeCycleTemplateMaster
wt.dataops.objectcol.RelationshipDefMaster
wt.doc.WTDocumentMaster
wt.inf.template.WTContainerTemplateMaster
com.ptc.windchill.option.model.ChoiceMaster
wt.dataops.objectcol.FilterCriterionDefMaster
com.ptc.windchill.option.model.OptionMaster
wt.workflow.templates.TaskFormTemplateMaster
wt.dataops.objectcol.RelationshipMapDefMaster
wt.part.WTPartMaster
wt.change2.WTChangeOrder2Master
com.ptc.arbortext.windchill.partlist.PartListMa
com.ptc.windchill.option.model.OptionSetMaster
- 结果指向与其他表(主键)的关系
- 在本例中,将引用 WTDocumentMaster、WTTypeDefinitionMaster、EPMDocumentMaster 表
- 所有引用均引用指向“to”表的 IDA2A2 列
3、使用获得的关系知识来编写有意义的查询
- 用于生成 ControlBranch 表中引用的 WTDocumentMasters 列表的查询为:
select name, WTDocumentNumber
from WTDocumentMaster WTdocMast, ControlBranch cb
where WTdocMast.ida2a2=cb.IDA3B5;
- IDA3B5 列具有对多个表的引用
- 由同一行的 CLASSNAMExxxx 列中的值确定
3、需要业务对象名称或编号
-
Windchill 中的许多对象都是“迭代”的
- 许多迭代对象的信息都存储在“主”对象上(如名称和编号)
- 其他信息(如迭代和版本)存储在迭代的对象上
-
Windchill 中的常见对是
- EPMDocument 和 EPMDocumentMaster
- WTPart 和 WTPartMaster
- WTDocument 和 WTDocumentMaster
-
查询数据库以查看所有“主对象”的列表
-
例:
-
select table_name from user_tables where table_name like '%MASTER';
-
-
迭代****表和主表之间的链接始终使用 ida3masterreference 列
- 例
select <column list>
from WTDocument wtdoc, WTDocumentMaster wtdocm
where wtdoc.IDA3MASTERREFERENCE = wtdocm.ida2a2;
- 如果迭代的 ida2a2 值已知,则可以在 ‘where’ 子句中添加一个条件来获取精炼的信息
- 示例:编号和名称
select NAME,DOCUMENTNUMBER
from EPMdocumentMaster epmdocm, EPMDocument epmd
where epmd.IDA3MASTERREFERENCE = epmdocm.ida2a2
and epmd.ida2a2=1234;
4、从 URL 在数据库中查找对象
- 有两种类型的 Windchill URL,每种类型都包含其中的数据库引用:
1、“OR”或对象引用
-
指向被引用对象的 IDA2A2 值(删除“3A”后)
-
使用以下 URL 返回对象的表行的 SQL 查询:
-
…/Windchill/app/#ptc1/tcomp/infoPage?oid=OR%3Awt.meeting.actionitem.DiscreteActionItem%3A316196328&u8=1
-
select <> from DiscreteActionItem where ida2a2=316196328;
-
2、“VR”或版本引用
- 请参阅 BRANCHIDITERATIONINFO 列
- 使用以下 URL 返回对象的表行的 SQL 查询:
- …/Windchill/app/#ptc1/tcomp/infoPage?oid=VR%3Awt.doc.WTDocument%3A705410464&u8=1
-
select <> from WTDocument where BRANCHIDITERATIONINFO=705410464;
5、通过执行sql文件,找到该oid所关联的数据库表:
set SERVEROUTPUT ON SIZE 1000000;
set verify OFF;
ACCEPT IDXXXX PROMPT 'Enter the value of IDXXXX : ';
set head off;
PROMPT Processing...;
DECLARE
CURSOR UTC_cursor IS
select TABLE_NAME, COLUMN_NAME
from USER_TAB_COLUMNS
where COLUMN_NAME like 'ID%'
and DATA_TYPE='NUMBER';
UTC_record UTC_cursor%ROWTYPE;
BEGIN
FOR UTC_record IN UTC_cursor LOOP
--FETCH UTC_cursor INTO UTC_record;
--DBMS_OUTPUT.PUT_LINE('---');
DECLARE
v_count integer;
v_spelling VARCHAR2(2) :='es';
BEGIN
EXECUTE IMMEDIATE
'select count(*) from '||
UTC_record.TABLE_NAME||
' where '||
UTC_record.COLUMN_NAME||
' = '||
&&IDXXXX
INTO v_count;
IF v_count>0 THEN
IF v_count=1 THEN
v_spelling:='';
END IF;
DBMS_OUTPUT.PUT_LINE(v_count||' match'||v_spelling||' found in '||
UTC_record.TABLE_NAME||
' / '||
UTC_record.COLUMN_NAME);
END IF;
END;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Done!');
END;
/
执行sql文件来进行查询:
@C:\Users\Administrator\Desktop\ida2a2.sql;
6、开启四个记录器捕获sql
参考链接:
文章 - CS46545 - 如何在 Windchill 中记录 SQL 语句 (ptc.com)
wt.pom.sql
wt.pom.trace计时
wt.pom.stackTrace
wt.pom.rowCount
- 将 log4j.logger.wt.pom.sql=DEBUG 添加到 Windchill/codebase/WEB-INF/log4jMethodServer.properties
- 将永久设置日志记录(直到从 log4jMethodServer.properties 中删除属性)
- 将有许多关于 Windchill 启动的 SQL 语句