Accesso corretto agli oggetti da codice
Alcuni brevi esempi su come accedere in modo sicuro (univoco) agli oggetti (SPWeb, SPList e SPField) di SharePoint 2007 (WSS3 - MOSS).
Con accesso sicuro mi riferisco ai riferimenti che vengono impostati al momento della creazione dell'oggetto e non possono essere cambiati dall'utente tramite l'interfaccia standard di SharePoint. Per il sito e la lista l'url, mentre per il campo il nome interno (l'unica eccezione è il sito a cui può essere cambiata anche l'url da interaccia). Per tutti gli oggetti c'è anche la possibilità di riferirsi tramite il loro Guid, mentre è assolutamente da evitare, per le liste e i campi, l'uso della stringa all'interno dell'indicizzatore, ad esempio web.Lists["La lista"], in quanto si accede tramite il DisplayName/Titolo dell'oggetto.
Con accesso sicuro mi riferisco ai riferimenti che vengono impostati al momento della creazione dell'oggetto e non possono essere cambiati dall'utente tramite l'interfaccia standard di SharePoint. Per il sito e la lista l'url, mentre per il campo il nome interno (l'unica eccezione è il sito a cui può essere cambiata anche l'url da interaccia). Per tutti gli oggetti c'è anche la possibilità di riferirsi tramite il loro Guid, mentre è assolutamente da evitare, per le liste e i campi, l'uso della stringa all'interno dell'indicizzatore, ad esempio web.Lists["La lista"], in quanto si accede tramite il DisplayName/Titolo dell'oggetto.
- SPWeb - sito
oppureC#
SPSite site = new SPSite("http://localhost"); SPWeb web = site.OpenWeb("/sito1");
C#
SPSite site = new SPSite("http://localhost"); Guid gWeb = new Guid("CA33A887-7E46-45c6-9DE6-DA92870D50A9"); SPWeb web = site.OpenWeb(gWeb);
- SPList - lista
oppureC#
string urlLista = "/Lists/lista1"; SPList list = web.GetList(web.ServerRelativeUrl + urlLista);
ma non il seguente in quanto usa il display name della lista che può essere cambiato dall'utenteC#
Guid gList = new Guid("E2AC0EB9-E5D4-4189-8891-84E92655D16B"); SPList list = web.Lists[gList];
C#
string titleList = "La mia lista 1"; SPList list = web.Lists[titleList];
- SPField - campi
oppure nel caso dei campi standard uso l'oggetto SPBuiltInFieldIdC#
SPField fld = list.Fields.GetFieldByInternalName("Title"); SPListItem item = list.Items[0]; string title = item[fld.Id] as string;
ma non il seguente in quanto usa il display name del campo che può essere cambiato dall'utenteC#
SPFieldText fldTitle = list.Fields[SPBuiltInFieldId.Title] as SPFieldText; SPListItem item = list.Items[0]; string title = item[fldTitle.Id] as string; //oppure direttamente string title = item[SPBuiltInFieldId.Title] as string;
C#
SPField fld = list.Fields["Il titolo"]; SPListItem item = list.Items[0]; string title = item["Il titolo"] as string;
- SPContentTypeId - content type (CT)
supponendo di avere definito il seguente content type id 0x007D65B6644B5B473a9F9AEA2FB74338F9 ed averlo applicato alla lista qesto perche quando il CT viene aggiunto alla lista diventerà simile al seguente 0x007D65B6644B5B473a9F9AEA2FB74338F97690228CB20E42dfA5F5975E52297372, ovvero verrà aggiunta una parte che lo rende univoco.C#
SPContentTypeId idCT = list.ContentTypes.BestMatch(new SPContentTypeId(0x007D65B6644B5B473a9F9AEA2FB74338F9))