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.
- SPWeb - sito
SPSite site = new SPSite("http://localhost");
SPWeb web = site.OpenWeb("/sito1");
oppure
SPSite site = new SPSite("http://localhost");
Guid gWeb = new Guid("CA33A887-7E46-45c6-9DE6-DA92870D50A9");
SPWeb web = site.OpenWeb(gWeb);
- SPList - lista
string urlLista = "/Lists/lista1";
SPList list = web.GetList(web.ServerRelativeUrl + urlLista);
oppure
Guid gList = new Guid("E2AC0EB9-E5D4-4189-8891-84E92655D16B");
SPList list = web.Lists[gList];
ma non il seguente in quanto usa il display name della lista che può essere cambiato dall'utente
string titleList = "La mia lista 1";
SPList list = web.Lists[titleList];
- SPField - campi
SPField fld = list.Fields.GetFieldByInternalName("Title");
SPListItem item = list.Items[0];
string title = item[fld.Id] as string;
oppure nel caso dei campi standard uso l'oggetto SPBuiltInFieldId
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;
ma non il seguente in quanto usa il display name del campo che può essere cambiato dall'utente
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
SPContentTypeId idCT = list.ContentTypes.BestMatch(new SPContentTypeId(0x007D65B6644B5B473a9F9AEA2FB74338F9))
qesto perche quando il CT viene aggiunto alla lista diventerà simile al seguente 0x007D65B6644B5B473a9F9AEA2FB74338F97690228CB20E42dfA5F5975E52297372, ovvero verrà aggiunta una parte che lo rende univoco.