此篇是上一篇「建立專案時預建資料夾」的進階版
上一篇是將要欲新增的資料夾名稱及結構寫在程式裡,那其實就跟 SDE 沒啥兩樣了,要修改就很麻煩,除了改程式外還要一一更新客戶端
故此篇要將資料夾的名稱及結構存於資料庫,維護時只要從資料庫下手,改完資料庫後就馬上生效,不用一一更新客戶端
首先先建立一存放資料夾結構的 Table「FolderStructureTest」##CONTINUE##
CREATE TABLE [dbo].[FolderStructureTest](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ParentID] [int] NULL,
[FolderName] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL
) ON [PRIMARY]
建立的資料內容如下圖,如果 ParentID 為 null 的表示直接link 於 Project,若有 ID 的表示成為 Folder 子階
再來只要修改上一篇範例中建立資料夾的 function (CreateProjectFoldersTest),改由讀取資料庫即可,其他 function 不改
Function CreateProjectFoldersTest(ByVal SmSession As SmApplic.SmSession, ByVal Operation As SmApplic.ISmOperation, ByVal FirstPar As SmRecList.SmRecordList, ByVal SecondPar As SmRecList.SmRecordList, ByVal ThirdPar As SmRecList.SmRecordList) As String
Dim Project As ISmObject
Dim smObject As ISmObject
Dim sRetObjectID As String
Project = SmSession.ObjectStore.ObjectFromData(FirstPar.GetRecord(0), False)
GetConnectionString()
Dim dbh As New DbHelperSQL(sSH_ConnectionString)
Dim sSql As String = "select ID, ParentID, FolderName from FolderStructureTest"
Dim dt As DataTable
dt = dbh.Query(sSql).Tables(0)
Dim retObject As ISmObject
Dim tmpObject As ISmObject
Dim sProjectID As String = Project.Value("TDMX_ID").ToString()
Dim i As Integer = 0
For i = 0 To dt.Rows.Count - 1
If dt.Rows(i)("ParentID").ToString = "" Then
retObject = CreateProjectSubfolderTest(SmSession, dt.Rows(i)("FolderName").ToString, Project)
Dim dv As New DataView(dt)
dv.RowFilter = "ParentID=" + dt.Rows(i)("ID").ToString
If dv.Count > 0 Then
For Each row As DataRowView In dv
CreateSubfolderTest(SmSession, row("FolderName").ToString(), retObject)
Next
End If
End If
Next
Return sRetObjectID
End Function
執行後結果如下圖

網誌管理員已經移除這則留言。
回覆刪除hi 你好
回覆刪除我也是從事smarteam導入開發相關工作
不知道有沒有榮幸可以認識你 彼此互相交流?
sure, 很高興認識你
回覆刪除只是近年來 SmarTeam 在台灣已經快消失了
我也已經一年多沒碰 SmarTeam 的案子了
我們最近到是有不少新的SmarTeam的案子~
回覆刪除其實ST的架構是真的很不錯
看過一些客戶是國外協助導入都用得挺不錯的
P.S. 不知道方便給我您的mail 我們交流一下
作者已經移除這則留言。
回覆刪除