TeamCenter历史大数据导入
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Teamcenter(UA)中实现历史数据导入
发表时间:2009-12-31 特约通讯员:郭宇来源:e-works
关键字:Teamcenter Item二次开发历史数据导入PDM
本文阐述了在Teamcenter(UA)上实现的一个比较通用的历史数据导入工具的实现方法。
通过Java Eclipse和POI 技术实现了对历史数据的分批导入。
PDM(Product Data Management)最重要的功能之一是实现企业业务流程的电子化,为了实现这个目标,我们必须保证各种数据能够存储到PDM系统并且能很好得共享。
其中包括了文档、设计资料(二维三维图纸)的存储和共享。
同时我们还需要实现企业业务流程的电子化乃至核心研发流程优化再造,以规范企业的研发流程,帮助企业提高核心竞争力。
Teamcenter(UA)有良好的架构和开发接口,我们可以通过客户化为企业量身定做适合企业自身的业务工作流,满足客户的特殊需要。
在PDM实施过程中系统上线前,企业历史数据必须有步骤分批导入到一个全新的PDM系统以支持日常业务流程。
本文阐述了在Teamcenter(UA)上实现的一个比较通用的历史数据导入工具的实现方法。
通过Java Eclipse和POI技术实现了对历史数据的分批导入。
一、实现原理
Teamcenter(UA)中的基本数据结构是Item结构:
图1. Item结构
Item是系统最基本的业务对象,Item Revision是版本对象,用来管理各个版本的数据。
其中属性表保存了版本的详细属性,包括了客户化属性;数据集(用DS缩写)封装了物理文件。
Item对象还可以通过各种关系关联其他的Item对象。
在实施过程中,我们通常会帮助企业整理一部分有价值的历史数据作为PDM系统上线时的基础和参考,比如标准件库,有代表性的机种等等。
一般情况下,我们会把整理数据整理成Excel格式。
所以要求历史数据导入工具需要能够分析Excel文件,并且在Teamcenter(UA)系统中创建上(图1)中的数据结构。
对于最常用的数据导入要求,我把它分为三个主要的功能模块进行设计:
• Item对象:逐个导入Item对象结构,包括Item、Item Revision、数据集以及他们的关联关系
图2. 导入Item程序框图
•BOM对象:在导入Item对象结构的基础上再创建Bom结构,表达零部件Bom关系;
图3. 导入Bom程序框图•Relation对象:导入若干Item对象之间的关系
图4. 导入关系程序框图
对于上述三种业务逻辑,可以把程序划分为“Excel读取”“数据创建”“驱动引擎”“导入日志”等模块进行设计:
图5. 模块划分
二、关键技术
1. 通用性设计
面对各个不同的类,如何把各种具有不同属性的类导入到系统是导入工具设计的首要问题。
为了解决这个问题,导入工具必须能读取具有可变列的Excel表格。
下面是导入程序应有的一些重要逻辑:•每个属性都有标示符,表示它属于(图1)中哪个类的属性,是Item的还是DS的?
•当读取属性名称列,遇到空白列时,标记这是列结尾。
•当读取到行号为空的行时,标记这是最后一行数据
•提供多种可选选项,配置导入后的一些后续动作。
如:若同名DS存在是否覆盖,若对象存在是否覆盖?
•标记Bom关系上的属性,例如:单位、数量等等
2. POI读写Excel技术
•导入必要的包
import ermodel.*;
•定义Workbook对象:
public HSSFWorkbook wb = null;
•打开Excel工作簿
public boolean open(File in)
{
FileInputStream filein = null;
try {
filein = new FileInputStream(in);
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
try {
wb = new HSSFWorkbook(filein);
filein.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
•读取单元格
读入字符串使用语句:
cellval = wb.getSheetAt(isheet).getRow(iline).getCell((short)irow).getStringCellValue();
读入数字使用语句:
celldval = wb.getSheetAt(isheet).getRow(iline).getCell((short)irow).getNumericCellValue(); •写入单元格(按格式写入)
写入字符串:
wb.getSheetAt(isheet).getRow(iline).getCell((short)irow).getStringCellValue(字符串);
写入数字:
wb.getSheetAt(isheet).getRow(iline).getCell((short)irow).setNumericCellValue(数字); •保存Excel工作簿
只需要保存新建workbook时输入的FileInputStream就能保存文件:
filein.close();
3. 基于Eclipse Plugins的两层Richclient二次开发
Teamcenter(UA)两层Richclient是架构在Eclipse平台上的应用系统。
各部件是按照Eclipse Plugins 插件方式嵌入到整个系统的。
我们所要开发的历史数据导入工具也作为一个插件被加载和运行的。
•准备好Eclipse开发环境
•Eclipse的版本要求是3.2以上,推荐使用3.3
Jre版本要求在1.5.2.06以上
在Eclipse中新建一个插件工程并导入必要的Teamcenter开发包(一些Jar文件)
在Eclipse中新建一个Plug-in Project
图6. 创建插件项目对话框
配置目标平台,指向Teamcenter(UA)安装目录的portal文件夹
图7. 配置Eclipse plug-in目标平台对话框
•在工具栏添加按钮
修改plugin.xml文件,添加按钮
图8. 加入工具栏菜单按钮
•按钮命令启动历史数据导入对话框
对于典型的二次开发,一个命令按钮需要包括以下层次的类调用:命令按钮动作位于CustomToolAction类(动作类)中,按钮按下,触发CustomToolCommand类(命令类),然后会启动一个对话框(有些情况下不需要对话框),完成对话框UI的交互后,可能触发一个后台的动作,由CustomToolOperation类负责执行。
图9. 对话框类的启动
•用Java抽象类实现“驱动引擎”模块中三种不同的业务类型
驱动引擎有很多相似的功能,零部件结构是在Item导入完成后才导入到系统的,所以,ManagerBom 继承在ManagerItem之下。
AbstractManager定义了三个抽象方法帮助分析数据:
public abstract boolean validateContent();对该行数据内容进行验证
public abstract void initOptions();读取导入选项
public abstract void getLine();读取单行数据并格式化
AbstractManager还有一个Run()方法发起整个导入循环操作。
图10. 导入引擎抽象设计
三、应用实例
1. 基本应用
导入数据举例:
图11. 导入数据格式•导入工具界面:
图12. 导入工具界面•导入效果举例:
图13. 导入效果2. 压力测试
标准
本工具已经通过了一定的压力测试,在某国企重型机械单位,曾经成功批量导入过最多5300多行的数据,服务器配置为2CUP*3.2G ;内存4G。
每分钟平均导入98条数据。
在三天之内帮助企业把三十几个机型的产品结构全部录入Teamcenter(UA)系统。
四、小结
如上所述,在对历史数据导入逻辑的抽象和泛化的基础上,运用Java、Eclipse、POI、Excel宏等多种技术对Teamcenter(UA)进行客户化开发,实现了通用格式对象导入功能。
在这个功能的辅助下,我们能够很好的导入必要的历史数据,为PDM系统上线做好铺垫。
文案。