在上一篇有介紹如何在 Form 的按鈕中觸發程式
在正式撰寫程式前,首先需先 Check 是否能真的抓到按鈕的 click 事件來觸發程式
故就先寫個 Hello World
程式如下
Function GetProjectData(ApplHndl As Long,OpStr As String,FirstPar As Long,SecondPar As Long,ThirdPar As Long) As Integer
MsgBox "Hello World!!"
GetProjectData = ERR_None
Exit Function
確定能攔截 SmarTeam 的事件後,便可進行更進一步的程式開發
在 SmarTeam 觸發事件後,會傳送五個參數給 Script Function
標準的 SmarTeam Script Function 如下
##CONTINUE##
Function GetProjectData(ApplHndl As Long,OpStr As String,FirstPar As Long,SecondPar As Long,ThirdPar As Long) As Integer
- ApplHndl-->Converts to SmSession using the function SCREXT_ObjectForInterface
- OpStr--> A string parameter that contains the name of the standard SMARTEAM operation of the script hook
- FirstPar-->A pointer to a record list containing object information received from SMARTEAM.
- SecondPar-->A pointer to a record list that contains object, task, or link information.
- ThirdPar--> A pointer to a record list containing object or task information to be returned to SMARTEAM.
- Return Value-->One of the error-code constants in Table 2. You should always assign a return value.
可透過 ApplHndl 來取得目前的 SmSession
透過 FirstPar 及 SecondPar 來取得當前物件的資訊
若要將運算完的資料傳回 SmarTeam 則透過 ThirdPar
以下以一個例子來說明如何運作
由於在另一個系統中已有公司所有專案的完整資訊
故希望在 SmarTeam 中新增專案時能透過專案ID去該系統取得專案資訊
以減少在 SmarTeam 的重覆輸入及避免發生輸入錯誤
PS. 取另一系統專案資料的程式已透過 .Net 來撰寫並註冊成 COM,程式類別名稱為 PDMTool.Tools
故此程式首先要接收Form 中的專案代號欄位(TextBox)的值
透過此值至另一個系統取得專案的其他資訊後回傳給 SmarTeam 的其他欄位後儲存專案
程式大致如下
Function GetProjectData(ApplHndl As Long,OpStr As String,FirstPar As Long,SecondPar As Long,ThirdPar As Long) As Integer
'宣告三個物件用來存放 FirstPar, SecondPar 及 ThirdPar
Dim RecListIn1 As Object
Dim RecListIn2 As Object
Dim RecListOut As Object
Dim SmSession As SmApplic.SmSession
Dim SmOp As SmApplic.ISmOperation
Dim ObjectStore As ISmObjectStore
Dim RecordListIn As SmRecordList
Dim MyDll As Object
Dim ColumnName As String
Dim sRet As String
'將 ApplHndl 轉換成 SmSession
Set SmSession = SCREXT_ObjectForInterface(ApplHndl)
Set ObjectStore = smSession.ObjectStore
'將 FirstPar 轉換至 RecListIn1 物件
CONV_RecListToComRecordList FirstPar, RecListIn1
CONV_RecListToComRecordList SecondPar, RecListIn2
CONV_RecListToComRecordList ThirdPar, RecListOut
'取得 COM 物件
Set MyDll = CreateObject("PDMTool.Tools")
'取得Form的專案代號,其欄位為 CN_DOCUNO
Dim CN_DOCUNO As String
CN_DOCUNO = RecListIn1.GetRecord(0).ValueAsString("CN_DOCUNO")
'透過PDMTool.Toolsk的GetProjectData()來取得專案資料,並分別存於 RecListOut 物件,並指派為 SmarTeam Form 的 CN_FIXNO 及 CN_INDATE 欄
ColumnName = "CN_FIXNO"
sRet = MyDll.GetProjectData(CN_DOCUNO, "WORKNO")
RecListOut.AddHeader ColumnName,50 ,sdtChar
RecListOut.Value(ColumnName,0) = sRet
ColumnName = "CN_INDATE"
sRet = MyDll.GetProjectData(CN_DOCUNO, "RDATE")
RecListOut.AddHeader ColumnName,50 ,sdtChar
RecListOut.Value(ColumnName,0) = sRet
'將 RecListOut 透過 ThirdPar 送回給SmarTeam
CONV_ComRecListToRecordList RecListOut, ThirdPar
Set MyDll = Nothing
MIRDC_SH_GetProjectData = ERR_None
Exit Function
沒有留言:
張貼留言