>Sharepoint ListManager

>

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.

image

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 Enum

        Private _fieldName As String
        Public Property FieldName() As String
            Get
                Return _fieldName
            End Get
            Set(ByVal value As String)
                _fieldName = value
            End Set
        End Property

        Private _fieldType As FieldTypeValue
        Public Property FieldType() As FieldTypeValue
            Get
                Return _fieldType
            End Get
            Set(ByVal value As FieldTypeValue)
                _fieldType = value
            End Set
        End Property

        Private _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 Class

End 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 String

    Private _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 = siteUrl

        Me._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.StringBuilder

        If 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))
            Next

            xmlContent.Append("</Method>")

            Me._siteHelper.UpdateList(Me._listGuid, xmlContent.ToString)

        End If

    End Sub
#End Region

End 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)