Tanto tempo fa vi avevo promesso che avrei parlato di una classe per la gestione dell'accesso ai dati di Sharepoint.
Bene, visto che ora si va verso l'uso di LINQ e di Visual Studio 2008, ho deciso che SharepointDAL 0.1 ha fatto il suo tempo è può essere rilasciata alla comunità degli sviluppatori. SharepointDAL fa uso dell'Object Model nativo, questo significa che è pensato per funzionare su una macchina dove è installato almeno WSS 3.0.
SharepointDAL è scritto in VB.NET e nemmento in modo tanto elegante: è quello che è e probabilmente per come è scritto farà inorridire i DevGuri puristi del Framework.....
Per iniziare dopo aver scaricato i sorgenti dovete creare in una site collection Sharepoint una lista (o una raccolta documenti) con le colonne che volete.
Il primo passo è quello di referenziale la DLL SharepointDAL.dll e creare una classe che mappi la struttura della lista che volete usare. Un esempio:
Public Class TestList
Inherits SharepointDAL.List
Sub New()
MyClass.ListName = "TESTLIST"
MyClass.InterfaceMode = InterfaceModeEnum.Public
End Sub
End Class
Come potete notare la nostra classe TestList eredita dalla classe base SharepointDAL.List. Questa classe (List) implementa tutti i metodi per interagire con una Lista Sharepoint (la classe SPList)
Occorre ora definire le colonne che vogliamo usare nella nostra classe. Non è obbligatorio dichiarare tutte le colonne della lista, ma solo quelle che vogliamo usare e la colonna "ID" (quella che identifica in maniera univoa l'Item nella lista Sharepoint).
Possiamo usare diversi metodi. Il più breve (ed orrido) è quello di usare dei Public member. Cosi:
Public Title As New SharepointDAL.Field("Title", "Title", SharepointDAL.SPFieldType.Text)
Dove Title è il nome del membro che andiamo a definire. Il metodo Field.New richiede in questo caso i seguenti parametri:
(ByVal Title As String, ByVal InternalName As String, ByVal SPFieldType As SharepointDAL.SPFieldType)
Title è il display name della colonna Sharepoint, InternalName il suo InternalName, SPFIeldType è l'enumerazione del tipo dato.
Quello appenda visto è un modo molto veloce per definire la classe. E' quello inteso di default dalla classe .List.
Se volete usarlo dovete impostare la proprietà .InterfaceMode al valore InterfaceMode.Public
Altro modo, più canonico, per definire la classe è questo
Public Class TestList
Inherits SharepointDAL.List
Private pTitle As New SharepointDAL.Field("Title", "Title", SharepointDAL.SPFieldType.Text)
Property Title() As SharepointDAL.Field
Get
Title = pTitle
End Get
Set(ByVal value As SharepointDAL.Field)
pTitle = Title
End Set
End Property
Sub New()
MyClass.ListName = "TESTLIST"
MyClass.InterfaceMode = InterfaceModeEnum.Property
End Sub
End Class
I possibili valori di InterfaceModeEnum sono:
Public Enum InterfaceModeEnum
[Public] = 0
[Property] = 1
[Private] = 2
End Enun
Interessante è il modo Private dato che consente di dichiarare la classe in questo modo
Public Class I_Sedi_Lavoro
Inherits SharepointDAL.List
Private _Sede As New SharepointDAL.Field("Sede", "Title", SharepointDAL.SPFieldType.Text)
Private _ID As New SharepointDAL.Field("ID", "ID", SharepointDAL.SPFieldType.Counter)
Property Sede() As String
Get
Sede = _Sede.Value.ToString
End Get
Set(ByVal value As String)
_Sede.Value = value
End Set
End Property
Property ID() As Integer
Get
ID = _ID.Value
End Get
Set(ByVal value As Integer)
_ID.Value = value
End Set
End Property
Public Sub New()
MyClass.InterfaceMode = InterfaceModeEnum.Private
MyClass.ListName = "Sedi Lavoro"
End Sub
End Class
Dopo aver creato la classe possiamo iniziare ad usarla nel nostro programma.
Per prima cosa dobbiamo dichiararla
Dim myTestList As New TestList
Quindi invocare il metodo .Init
TestList.Init("http://RootSite", "Site") dove il primo parametro è la url del sito principale della sitecollection ed il secondo è il nome del Web. Il primo parametro è in pratica la Url di SPSite mentre il secondo è la Url di SPWeb. Esempio: se la vostra lista si trova in http://RootSite/Test i due parametri saranno rispettivamente "http://RootSite" e "Test". Nel caso fosse "http://RootSite/Test/Test" sarebbero "http://RootSite" e "Test/Test".
Una volta inizializzata l'istanza della classe List potete chiamare il metodo .LoadAll. Questo metodo non fa altro che fare una query della lista, caricare la collection SPListItemCollection e un po di altre cose....
I metodo .MoveNext, .MovePrevious, .MoveFirst e .MoveLast permettono di spostarsi nella collection SPListItemCollection. Gli oggetti Sharepoint sono disponibili come proprietà e sono riconoscibili perchè iniziano con il carattere "_". Le colonne che avere definito come oggetti di classe .Field mettono a disposizione il loro valore per mezzo della proprietà .Value
Ad esempio il valore della colonna "Title" sarà disponibile usando questa sintassi:
Dim Title As String = TestList.Title.Value
.Value ovviamente è Read/Write mentre il metodo .Update lascio a voi indovinare cosa fa.
TestList.Value="Nuovo Titolo"
TestList.Update
Esplorate l'oggetto List e divertitivi. Per oggi abbiamo finito. Alla prossima parte.