此篇是上一篇「建立專案時預建資料夾」的進階版
上一篇是將要欲新增的資料夾名稱及結構寫在程式裡,那其實就跟 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
執行後結果如下圖










