2010年6月18日 星期五

MapGuide_變更設定檔_變更XML檔

瞭解如何將設定的各項資源匯出XML檔後,第二步就是必須現有直改變,並存入要改變的資源位置,以達到設定動態變更的效果。

也是一個常用的功能,也寫成了一隻函式,有興趣的人也可以直接拿去用。

Sub ChangeXmlContent(ByVal mgSessionId As String, ByVal XmlFrom As String, ByVal XmlTo As String, ByVal FieldName As String, ByVal ChangeValue As String)

'功能:改變XML內的屬性
'輸入:XmlFrom─來源的XML位置、XmlTo─要寫入的位置、FieldName─要變更的欄位、ChangeValue─變更的值

'1. 獲得使用者資訊
Dim userInfo As MgUserInformation = New MgUserInformation(mgSessionId)

'2. 連接站點
Dim siteConnection As MgSiteConnection = New MgSiteConnection
siteConnection.Open(userInfo)

'3. 建立資源服務
Dim resourceService As MgResourceService
resourceService = siteConnection.CreateService(MgServiceType.ResourceService)

'4. 讀取XML檔,將XML檔內欲變更的項目變更為指定數值
Dim DOM As New XmlDocument
DOM.Load(XmlFrom)
Dim XmlFSourceNode As XmlNode = DOM.GetElementsByTagName(FieldName).Item(0)
XmlFSourceNode.InnerText = ChangeValue

'5. 將資料寫回resourceService
'讀入改完的XML進layerDefinition,將其存進resourceService////////////////////////////////
'第一種方法:將型態傳入byte()裡,再塞入MgByteSource
Dim sw As New StringWriter
Dim xw As New XmlTextWriter(sw)
DOM.WriteTo(xw)
Dim encoding As System.Text.ASCIIEncoding = New System.Text.ASCIIEncoding
Dim layerDefinition() As Byte = encoding.GetBytes(sw.ToString())
Dim byteSource As New MgByteSource(layerDefinition, layerDefinition.Length)
byteSource.SetMimeType(MgMimeType.Xml)
'///////////////////////////////////////////////////////////////////////////////////////

Dim DataresourceID As New MgResourceIdentifier(XmlTo)
resourceService.SetResource(DataresourceID, byteSource.GetReader(), Nothing)

End Sub

整個流程相當直觀,讀取檔案→改變數值→將改變好的XML設定到相關的資源內。

這個功能其實可以做出非常多的變化,相當於整個MapGuide所設定的任何東西,都可以藉由這樣的方式動態變更,只要確實做好權限控管,將可以產出很自由的功能變化。

沒有留言:

張貼留言