高级自定义 > 服务和基础结构自定义 > 存在性管理 > 存在性数据存储序列自定义
存在性数据存储序列自定义
目标
您想要创建新的数据存储序列以在 Windchill 中使用。
背景
Windchill 使用数据存储架构对象来实现序列。在 Oracle 中,这直接作为序列架构对象实现。在 SQLServer 中,这作为表格实现并访问存储的过程。
范围/适用性/假设
本文档假设您有权访问 Windchill 数据存储目录、<WindchillHome>\db 以及在目标数据存储中执行 DDL 脚本的访问权限。
对于模型化自定义过程,假设 Windchill Java 注释支持已成功安装和配置的序列。
预期结果
此解决方案的最终结果是创建数据存储序列。
解决方案
使用 Windchill Java 注释为序列类建模。
解决方案元素
元素
类型
说明
<MySequence>
Java 类
用于表示 Windchill 中的数据存储序列的类。
过程 - 创建模型化数据存储序列
1. 在扩展 <MySequence><MyPackage> 中创建类 <MySequence>
2. 将 "GenAsDatastoreSequence" 注释和序列特性指定为注释的自变量。指定初始种子和增量值 (如果默认值不满足要求)。例如,如果种子值为 1000,增量值为 100,则生成的 Java 源文件如下所示:
import com.ptc.windchill.annotations.metadata.GenAsDatastoreSequence;
@GenAsDatastoreSequence (objectName="mySequence", seed=1000, increment=100)
public class MySequence extends _MySequence {
}
3. 编译 <MyPackage> 中的 <MySequence>.java 类。
4. 生成 DDL 脚本。
5. 执行序列 DDL。通过 Windchill Shell,执行:<WindchillHome>/db/execute_sql_script.bat <MyPackage>/create_<MySequence>_ sequence.sql
自定义点
过程 - 在 Oracle 中创建非模型化数据存储序列
创建非模型化序列时,数据库架构对象不会包含在 Windchill 自省信息中。因此,某些依赖于此信息的工具 (例如,Windu、升级工具) 会将这些对象视为与 Windchill 不相关。
1. 在 "<WindchillHome>\db\sql" 目录中创建序列 DDL 脚本 "create_<MySequence>_sequence.sql"。对于多字节系统,请使用目录 "<WindchillHome>\db\sql3"。
2. 将以下各行添加到此脚本中,替代 <MySequence>、<MySequenceSeed> 和 <MySequenceIncrement>。
exec WTPK.createSequence('<MySequence>', <MySequenceSeed>,
<MySequenceIncrement>)
3. 执行序列 DDL。通过 Windchill Shell,执行:<WindchillHome>/db/execute_sql_script.bat create_<MySequence>_sequence.sql
过程 - 在 SQLServer 中创建非模型化数据存储序列
创建非模型化序列时,数据库架构对象不会包含在 Windchill 自省信息中。因此,某些依赖于此信息的工具 (例如,Windu、升级工具) 会将这些对象视为与 Windchill 不相关。
1. 在 "<WindchillHome>\db\sqlServer" 目录中创建序列 DDL 脚本 "create_<MySequence>_sequence.sql"。
2. 将以下行添加到此脚本中,替代 <MySequence><MySequenceSeed><MySequenceIncrement>
CREATE TABLE wt_sequence_<MySequence>(dummy
CHAR(1),
value BIGINT IDENTITY(<MySequenceSeed>, <MySequenceIncrement>))
go
CREATE PROCEDURE wt_get_next_sequence_<MySequence>
@returnValue BIGINT OUTPUT
AS
INSERT wt_sequence_<MySequence> (dummy) VALUES ('x')
SELECT @returnValue = SCOPE_IDENTITY()
go
3. 执行序列 DDL。通过 Windchill Shell,执行 <WindchillHome>/db/execute_sql_script.bat create_<MySequence>_sequence.sql <DB_USERNAME> <DB_PASSWORD>
过程 - 获取模型化序列中的下一个值
在上述主要过程中,创建了一个序列类。要获取此序列中的下一个值,可使用 PersistenceManager.getNextSequence(Class) 方法传递 <MyPackage>.<MySequence>.class
过程 - 获取非模型化序列中的下一个值
在上述非模型化过程中,已直接在数据存储中创建了一个序列。要获取此序列中的下一个值,可使用 PersistenceManager.getNextSequence(String) 方法传递字符串常量 <MySequence>
限制
无。
示例代码
Windchill 代码中的使用示例
Windchill 代码的多个区域中都使用了序列值。请参阅 Where-Used Tool 和/或 Javadoc 中 wt.fc.DatastoreSequence 的子类。
随附的示例
无。
非模型化示例脚本
Oracle
以下是一个以 1 开头且间隔为 20 的 partNumber 序列的示例脚本。
exec WTPK.createSequence('partNumber', 1, 20)
SQL Server
以下是一个以 1 开头且间隔为 20 的 partNumber 序列的示例脚本。
CREATE TABLE wt_sequence_partNumber (dummy
CHAR(1), value BIGINT IDENTITY(1,20))
go
CREATE PROCEDURE wt_get_next_sequence_partNumber @returnValue BIGINT OUTPUT
AS
INSERT wt_sequence_<MySequence> (dummy) VALUES ('x')
SELECT @returnValue = SCOPE_IDENTITY()
go
相关的包/类 Javadoc
Foundation 模块
wt.fc
这对您有帮助吗?