>
Binnen onze organisatie moeten we vaak op een snelle manier gegevens vanuit een externe applicatie (.net) wegschrijven naar een sharepoint lijst. Om het ontwikkelproces zo minimaal te houden heb ik een Sharepoint ListManager framework(je) geschreven:
Het framework is eigenlijk een iets aangepaste versie van het webservice framework waar ik eerder al over schreef.
Het project Howest.Sharepoint.Data is hetzelfde als het webservice framework project. Dit ga ik dus niet meer in detail uitleggen. Het gaat om het Howest.Sharepoint.ListManager project.
Dit project bevat een Facade class (design patterns!) en een ListItemObject dit de schrijfactie naar de lijst doet. Deze class bevat maar 1 method: SetListItems en verwacht als argument een collection van ListItemObjecten.
Het ListItemObject bevat 3 properties
- De naam van het veld uit de sharepoint lijst.
- Het type van het veld (enumeration)
- en de waarde dat het veld moet krijgen
Namespace Objects
Public Class ListItemObject
#Region "Properties"
Public Enum FieldTypeValue
[Text]
[Boolean]
[Numeric]
[Lookup]
[MultiLookup]
End EnumPrivate _fieldName As String
Public Property FieldName() As String
Get
Return _fieldName
End Get
Set(ByVal value As String)
_fieldName = value
End Set
End PropertyPrivate _fieldType As FieldTypeValue
Public Property FieldType() As FieldTypeValue
Get
Return _fieldType
End Get
Set(ByVal value As FieldTypeValue)
_fieldType = value
End Set
End PropertyPrivate _fieldValue As String
Public Property FieldValue() As String
Get
Return _fieldValue
End Get
Set(ByVal value As String)
_fieldValue = value
End Set
End Property#End Region
#Region "Constructor"
Public Sub New()
End Sub
Public Sub New(ByVal fieldName As String, ByVal fieldType As FieldTypeValue, ByVal fieldValue As String)
Me._fieldName = fieldName
Me._fieldType = fieldType
Me._fieldValue = fieldValue
End Sub
Public Sub New(ByVal fieldName As String, ByVal fieldValue As String)
Me.New(fieldName, FieldTypeValue.Text, fieldValue)
End Sub#End Region
#Region "Methods"
#End Region
End Class
Public Class ListItemObjectCollection
Inherits List(Of ListItemObject)
End ClassEnd Namespace
De business class ListItemObject die instaat voor het wegschrijven van de data bevat deze code:
Friend Class ListItemObject
#Region "Properties & Constants"
Private _username As String
Private _password As String
Private _domain As StringPrivate _listGuid As String
Private _siteUrl As String
Private _siteHelper As Howest.Sharepoint.Data.Lists
#End Region
#Region "Constructors"
Public Sub New(ByVal username As String, ByVal password As String, ByVal domain As String, _
ByVal siteUrl As String, ByVal listGuid As String)
Me._username = username
Me._password = password
Me._domain = domain
Me._listGuid = listGuid
Me._siteUrl = siteUrlMe._siteHelper = New Howest.Sharepoint.Data.Lists(Me._siteUrl, Me._username, Me._password, Me._domain)
End Sub
#End Region#Region "Methods"
Public Sub SetListItems(ByVal items As Objects.ListItemObjectCollection)
Dim xmlContent As New Text.StringBuilderIf Not items Is Nothing Then
xmlContent.Append("<Method ID=’1′ Cmd=’New’>")For Each item As Objects.ListItemObject In items
Dim typeText As String
Select Case item.FieldType
Case Objects.ListItemObject.FieldTypeValue.Text : typeText = "Text"
Case Objects.ListItemObject.FieldTypeValue.Boolean : typeText = "Boolean"
Case Objects.ListItemObject.FieldTypeValue.MultiLookup : typeText = "MultiLookup"
Case Objects.ListItemObject.FieldTypeValue.Numeric : typeText = "Number"
Case Objects.ListItemObject.FieldTypeValue.Lookup : typeText = "Lookup"
Case Else : typeText = "Text"
End Select
xmlContent.Append(String.Format("<Field Name='{0}’ Type='{1}’>{2}</Field>", item.FieldName, typeText, item.FieldValue))
NextxmlContent.Append("</Method>")
Me._siteHelper.UpdateList(Me._listGuid, xmlContent.ToString)
End If
End Sub
#End RegionEnd Class
In de method SetListItems() wordt de XML aangemaakt dit naar de webservice wordt verstuurd. Via die webservice van sharepoint worden de gegevens weggeschreven.
In je externe applicatie gebruik je deze code om data weg te schrijven:
Dim f As New Howest.Sharepoint.ListManager.Facade
Dim items As New Howest.Sharepoint.ListManager.Objects.ListItemObjectCollection
items.Add(New Howest.Sharepoint.ListManager.Objects.ListItemObject("Title", Objects.ListItemObject.FieldTypeValue.Text, "item1"))
items.Add(New Howest.Sharepoint.ListManager.Objects.ListItemObject("NumeriekVeld", Objects.ListItemObject.FieldTypeValue.Numeric, 1))
items.Add(New Howest.Sharepoint.ListManager.Objects.ListItemObject("BooleanVeld", Objects.ListItemObject.FieldTypeValue.Boolean, True))f.SetListItems(items)