0 引言
目前,企业面临的挑战是最大限度地实施并行工程,发挥产品上市快的优势,缩短产品上市时间,提高效率,增强企业的竞争能力。产品数据管理(Product Data Management,PDM)是在现代产品开发环境中成长发展起来的一项管理产品数据的新技术,使用PDM技术可增强产品的应变能力,提高产品的质量。
在PDM领域处于领先地位、以Internet为核心的Teamcenter系统,是SIEMENS公司提供的一种完整、功能强大、经过证实的且能够实现数字化全生命周期管理的解决方案。Teamcenter具有强大的功能,例如文档管理、权限管理、产品结构和配置管理,以及工作流程管理等,它的领先还体现在提供了强大的二次开发应用程序接口,在实施项目时,可以通过接口对产品进行订制和开发。PDM是以产品管理为核心,以资料、过程和资源为管理信息的三大要素,它进行信息管理的两条主线是静态的产品结构和动态的产品形成过程的管理(静态的产品数据管理和动态的工作流程管理)。工作流程管理是PDM系统中的一个重要部分,产品从设计到发布是一个动态的过程,在这个过程中,工作流程起到至关重要的作用,它使产品数据多态而不混淆、连贯且可跟踪。
在Teamcenter系统中提供了企业级工作流程。与工作流程关联紧密的主要有以下几个概念:过程(process),是用来定义工作流程的模板;工作进程(jobs),是一个过程的实例化,运行一个过程相当于自动创建一个新的工作进程;任务(tasks),是被用来在目标对象上执行的动作;目标对象(target objects),是能由任务控制的与工作进程相关的数据;引用数据(reference data),是不能由任务控制的且与工作进程相关的数据;任务动作(task action),都含有一些动作(action)。
每个任务动作都能使用两种处理程序,一种是执行一定功能的动作处理程序(action handler),另一种是核实或者验证某些状况的规则处理程序(rule handler)。处理程序(Handler)是令任务动作按照使用者的思维,根据实际业务的需要来安排、执行每一个任务的关键所在。流程管理任务模型如图1所示,正是处理程序使工作流程管理呈现出创造性、多样化和强大的生命力,所以处理程序技术是工作流程管理的核心。
图1 流程管理任务模型
1 Teamcenter中Handler的实现原理
现在越来越多的企业都使用PDM系统对企业产品数据进行统一管理。由于企业需求的日益多样化,过于单一的工作流程管理已无法满足企业的需求。根据工作流程管理联盟(MWFC)的规定,工作流程定义为:业务流程的全部和部分自动化,在此过程中,文档、信息或者任务按照一定的过程规则流转,实现组织成员间的协调工作,以期达到业务的整体目标。
某轴承企业的电子文件均利用Teamcenter进行统一管理,通过Teamcenter提供的工作流程模块来进行审签,该企业希望能够在这些文件中看到审签的信息,而在实际业务中往往需要发送大量的电子文件,让审签人员对每一份文件进行手动填入审签信息不现实,所以需要开发一个功能,以实现在流程审签过程中能自动在技术文件上填入审签信息。针对该应用实例,本文通过利用Teamcenter进行服务器端Handler技术的开发,从而实现了流程信息的自动收集,并结合VBA技术实现了审签信息自动填人技术文件。
图2所示为Teamcenter工作流程管理对象模型,该模型是为支持图1所示模型而设计的,两者在本质上关系紧密,而Handler的实现就是依赖于工作流程管理。
图2 Teamcenter工作流程管理对象模型
下面根据图2所示的模型介绍Handler的工作原理。图2中的任务是指在Teamcenter的工作流程设计器中定制一个工作流程的模板,里面包含一系列的任务(即一组图l所示的任务的有顺序规则的集合)及每个任务的用户情况,例如组(group)和角色(role)。每个任务都可以添加一些动作即动作处理程序(如图1中的进程)和业务规则即规则处理程序(即图1中的控制)。在流程发起时正确安排审签人员,可以在流程模板中添加附件如设计的轴承图样、工艺文档和技术文档等(即图1中的输入和输出)。
当流程发起时,流程模板出现实例化(即图2中的工作进程)。在流程进行时,系统会按照任务的定制顺序,如图3所示的零件图审批流程,按照设计→校对→审核→发布的顺序,先调用设计任务中的规则处理程序,判断是否符合规则。例如有一个规则处理程序的要求是上一个任务未完成之前阻止下一个任务的开始,所以当判断出规则未满足时,规则处理程序会返回EPM_nogo值,Teamcenter系统获取该返回值后会让流程停在当前任务,无法进入下一个任务——校对;反之经处理程序判断出规则已满足时,返回EPM_go值,流程可以进入下一个任务,然后按加载到任务上的动作处理程序次序,继续顺序执行第一个动作处理程序,当程序完成之后,系统会返回一个ITK_ok的值,系统接收之后,再按顺序调用下一个处理程序。所以Teamcenter工作流程中的处理程序可分为两类:一类是动作处理程序,作用是执行某些特定的功能,例如执行某一个程序,转换状态;另一类是规则处理程序,主要用于核对或证实某些状况,例如检查任务的状态,检查是否符合某些条件,规则处理程序一般在动作处理程序之前执行,如果符合规则处理程序要求,则执行接下来的动作。这两类处理程序(Handler)皆可以在Teamcenter交互式的处理程序面板中与流程进行关联。
图3 零件图审批流程
2 文件审签技术核心
Teamcenter系统属于管理系统,管理系统售后常需要一个定制过程,使之适应企业的特殊需求。二次开发是PDM实施的主要工作之一,因此必须掌握其核心技术。Teamcenter的开发分客户端及服务器端两种。客户端软件是用JAVA语言开发的,同样,它的二次开发也使用JAVA语言。服务器端的二次开发要利用二次开发模块ITK及C语言。文件审签技术中的Handler就是为了满足企业需求在服务器端二次开发的。
2.1 Handler技术
若需要在Teamcenter的工作流程中达到某项功能,首先需要成功创建Handler,Handler相当于是Teamcenter系统与业务程序之间的桥梁,在该实例中,需要一个获取审签信息的业务程序和调用外部VBA技术进行自动填入审签信息的程序,但这些程序都需要一个载体,即Signoff_Review和Signoff_Replace两个应用程序。
创建Handler的步骤如下。
第一步:编写Handler,并在客制化的用户出口进行注册。需要的两类关键函数如下。
第一类关键函数:
EPM_register_action_handler(char*handlerName,char*handlerDe scnption,EPM_action_handler_t functionPointer)
第二类关键函数:
EPM_register_rule_handler(char*handlerName,char*handlerDe scription,EPM_action_handler_t functionPointer)
以上为注册处理程序的两个关键函数,前者是注册动作处理程序,而后者是注册规则处理程序,两者类似。handlerName是在Teamcenter交互式的任务定义界面中处理程序的名字,handlerDescription是可以省略的。functionPointer是一个函数的入口指针,如编写Signoff_Review这个处理程序时,就需要把获取审签流程的信息写入functionPointer对应的函数中。
CUSTOM_register_exit函数是对用户客制化出口的初始化进入点注册。USER_gs_shell_init_module是一个用户初始化的基本函数,它可以使Teamcenter在初始化时就连接上用户客制化出口内容。而sitename(站点名)就是存储这个客制化内容的库,如果想连接成功,这个库还必须在Teamcenter系统中注册,它可以根据用户需要修改,但必须前后统一起来。而之前注册的函数EPM_register_action_handler和EPM_register_rule_handler都需要作为my_custom_exit_function的函数体。编译链接生成的动态链接库(DLL)须以站点名命名,即sitename.dll文件。所生成的DLL必须复制到Teamcenter安装路径根目录下的bin文件夹里,以便Teamcenter的服务器去链接前述的DLL,从而调用处理程序。CUSTOM_register_exit函数如下:
第二步:以管理员身份登陆Teamcenter,在菜单栏选择编辑一选项一索引,找到首选项TC_customization libraries,并为其添加新值,即sitename。
第三步:在Teamcenter系统的工作流设计器中的任务下会有显示任务处理程序的面板,可以查看到注册的Handler是否已经存在,若已存在,可直接添加到不同任务的不同操作状态下。Handler的实现过程如图4所示。
图4 Handler的实现过程
2.2 获取流程信息技术
Signoff_Review程序主要是用来获取流程中审签的信息,然后存储在临时的文本文档中,关键步骤及程序语言如下。
步骤1:获得该job的标签。
EPM_ask*ob(msg.task,&job)
步骤2:获得审签任务的名字。
EPM_ask_review_task_name(msg.task,review_task_name)
步骤3:获取审签者的人数及其标签。
CR_ask_reviewers(job,review_task_name,&reviewer_ctr,&groupmembers)
步骤4:利用循环找出每个审签人的用户标签。
POM_class_of_instance(groupmembers[ctr],&classld)
POM_name_of_class(classld,&class_name)
SA_ask_groupmemberuser( groupmembers[i],&user_tag)
步骤5:输入审签的标签,得到审签人的名字。
SA_ask_user_identifier(user_tag,user_name)
步骤6:获取系统中审签的相关信息。在如图5所示的人机交互审签界面中审签完毕,单击“确定”按钮后,审签信息就会产生并记录在系统中,审签信息如审签人、审签的决定、审签的意见和审签的日期等。
图5 流程中人机交互的审签界面
CR_ask_decision( job,review_task_name,user_tag,&decision,comments,&decision_date);
步骤7:将上述信息存放到一个临时的文本文档(*.txt)中作为记录,以便在后续的流程中,将这些信息自动填入电子文件中。记录审签信息的临时文本文档如图6所示。
mail_file=fopen(“*.txt”,a+);fprintf(mail_file,“%s”,审签信息);
图6 记录审签信息的临时文本文档
Signoff_Replace程序把获取的审签信息填入电子文件的程序步骤如下。
step 1:获得Item下的附件数量和它们的标签。
EPM_askjob(msg.task,&job);
EPM_ask_root_task(joh,&root_task);
EPM_ask_attachments(root_task,EPM_target_attachment,&nfound,&ftags)
step 2:循环每一个附件,判断其类别是否为数据集。
POM_class_of_instance( ftags[i],&classjd):
POM_name_of_class(classid.&class_name)
strcmp(class_name,“ Dataset”)==0
step 3:获得这个数据集的命名引用类型,然后判断是什么类型的文件,把文件导出Teamcenter,调用相应的外部VBA程序来进行签名。
AE_find_dataset_named_ref(ftags[i],0,refname,&reftype,&refobject);
AE_impmt_named_ref(ftagsi],refname,pathname,NULL,SS_BINARY);
step 4:最后把已经签名的文件导入到原数据集下的命名引用,保存这个数据集。
AE_remove_dataset_named_ref(ftags[i],refname);
AEjmport_named_ref(ftags[i],refname,pathname,NULL,SS_BINARY);
AOM_save(ftags[i]);
2.3 VBA技术
Handler本身并不能完成数据集的自动签名功能,自动签名是由服务器端的VBA程序完成。将此ActionHandler与VBA程序的实现功能分开,给程序带来了很大的扩展性。如果需要增加对新的数据集的签字功能,只需要编写相对应的VBA程序。而选择VBA技术,是因为许多的电子文件与VBA存在交互开发环境(VBA IDE)。尽管每种电子文件各有其特点,但大部分在VBA环境行为上都是相似的。VBA工程是代码模块、类模块和窗体的集合,而且各种类库、变量齐全,由它们组合用来执行独立的功能方便而且稳定。VBA工程可保存在电子文件中,或作为独立的文件保存,本文中就是将其生成独立的.exe程序,作为外部文件使用。
2.3.1 向Word文件中写入流程信息
1)连接Word软件,选择操作的文件(需要指定路径及文件名),在后台打开,设可见性属性(Visible)为False。
Dim wordApp As Object
Dim doc
Set wordApp=CreateObject(“Word.Application”)
wordApp.Visible=False
Set doc=wordApp.Documents.Open(“pathname+filename”)
2)打开之前用来保存签名信息的临时文本文档,读取信息。
Dim fs.line
Set fs=CreateObject(“Scripting,FileSystemObject”)
Set txtFile=fs.OpenTextFile(“pathname+filename”)
line=txtFile.ReadAIl()
3)在文件中定位需要签名的地方,程序中的***就是一个自定义的标记,当搜索到这个标记时,进行替换,从审签信息的文本文档中读取相关信息并将标记替换,实现电子文件的自动签名功能,这一步是签名的关键。
Selection.Find.Replacement.ClearFormatting
With Selection.Find.Text=“***”
Replacement.Text=审签信息
2.3.2 向dwg文件中写入流程信息
1)连接CAD,选择要进行操作的文件(需要指定路径及文件名),在后台打开,设可见性属性(Visible)为False。
Public cadApp As AcadApplication,cadDoc As AcadDocument
Set cadApp=CreateObject(“autocad.Application”)
Set cadDoc=cadApp.Documents.Open(“pathname+filename”)
2)再打开用来保存签名信息的文本文档,将信息读取(与Word文件中的方法一样)。
3)在dwg中定位,找到需要替换签名信息的标记。有两种常见的可能,一种是需要替换的标记存在于图样中的文本图元里,这时需要创建一个选择集,利用Select方法把所有文本图元筛选出来并放人选择集当中,然后遍历选择集中的每个文本图元,获取其TextString的属性值,然后利用InStr方法,判断该属性值中是否含有预先设定的宏,若是找到,便把审签信息写入,其程序如下:
Dim SSet As AcadSelectionSet
Dim a As String
SSet.Select acSelectionSetAIl,
fType,fData
For Each ent In Sset:a=ent.TextString b=“***”
InStr(1,a,b,1)
ent.TextString=“审签信息”
另一种可能是,所有需要自动签名的标识都放到一个块上,那就需要换一种定位标记的方式。采用两层遍历的方式来找到标记。首先创建所有块的一个集合blockcoll,在里面进行遍历,如果找到想要进行签名的块,一般用块的名字进行区分(elem.Name);然后进行下一层的遍历,在审签块中遍历每个图元,看哪一个图元的TextString属性值是设定的标识,找到后写入对应的审签信息,其程序如下:
Set blkcoll=cadDoc. Blocks
For Each elem In blkcoll
If elem.Name=“审签”Then
For Each subelem In elem
If subelem.TextString=“***”
Then subelem.TextString=“审签信息”
3 应用实例
笔者在某轴承企业的PDM实施工作中,根据该企业要求,在设计任务书评审流程、零件图审签流程、装配图审签流程、套圈工艺审签发布流程、保持架工艺审签发布流程、快速发布和工程更改等工作流程中获取审签信息并自动填入到相应的电子文档中。在流程审核任务的perform-signoff节点中,添加前面成功注册的Signoff_Review和Signoff_Replace两个处理程序,其界面如图7所示。当流程起动并运行到该任务,按照前述的Handler的工作原理,以及动作处理程序次序,在任务完成的这个动作中,自动调用服务器端的Signoff_ Review和Signoff_Replace这两个动作处理程序,实现提取流程审签信息,并最终自动填入技术文件中,成功填人审签信息的技术文档如图8所示。
图7 添加处理程序界面
图8 成功填入审签信息的技术文档
目前上述处理程序在企业运行情况良好,满足了企业需求。
4 结语
本文通过利用Teamcenter进行服务器端Handler技术的开发,结合其他相关的计算机技术,实现了从流程中获取审签信息,最终把流程中的审签信息自动填入对应的电子文件中。Handler技术使Teamcenter系统中工作流程的管理适合更多企业的实际需要,达到使企业用户使用Teamcenter系统的目的,同时也提高了企业的效率。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/