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.guhuozai8.cn/