Sharepoint Listen Anlegen
/ HomePage / Computer / Software / SharePoint / SharepointListenAnlegen
Sharepoint-Listen programmatisch anlegen (SharePoint 2010)
Aufgabenstellung
Dieses Beispielzeigt wie man SharePoint-Listen mit Hilfe des Objektmodells anlegt und wieder löscht.
Im Bespiel werden zwei Listen erzeugt, bei der in der zweiten ein Lookup-Feld auf die erste definiert wird.
Zusätzlich erhält das Lookup-Feld eine Löschbeschränkung (neues Feature in 2010).
Das Lookup-Feld wird dem Default-View hinzugefügt und die Liste erscheint in der linken Navigation (Quick-Launch)
Anlegen von Listen
private void CreateLists()
{
string nameRegionsList = "Regionen";
string nameCountriesList = "Laender";
Guid regionsGuid = Guid.Empty;
Guid countriesGuid = Guid.Empty;
bool error = false;
using (SPSite siteCollection = new SPSite("http://myServer/sites/mySite"))
{
siteCollection.AllowUnsafeUpdates = true;
// Hier kann man das Subweb angeben, falls die Listen nicht
// im Site-Collection Root erzeugt werden sollen
using (SPWeb myWeb = siteCollection.OpenWeb("mySubWeb"))
{
SPListCollection lists = myWeb.Lists;
// Regionen-Liste anlegen falls sie noch nicht existiert
// Die Liste ist eine Default-Custom List nur mit einem Title-Feld
try
{
SPList list = myWeb.Lists[nameRegionsList];
}
catch (ArgumentException indEx)
{
// Liste existiert nicht, anlegen
regionsGuid = lists.Add(nameRegionsList, "Liste der Regionen", SPListTemplateType.GenericList);
SPList milist = lists[regionsGuid];
// Liste der linken Navigation hinzufügen
milist.OnQuickLaunch = true;
milist.Update();
// Da keine zusätzlichen Spalten angelegt werden,
// entfällt die Erweiterung des Default-Views
}
catch (Exception ex)
{
// Ein unvorhergesehener Fehler, Liste wurde nicht angelegt
error = true;
}
if (!error)
{
// Länderliste anlegen falls noch nciht vorhanden
try
{
SPList list = myWeb.Lists[nameSubprojectList];
}
catch (ArgumentException indEx)
{
// Liste existiert nicht, anlegen
countriesGuid = lists.Add(nameCountriesList, "Liste der Länder", SPListTemplateType.GenericList);
SPList dependentList = lists[countriesGuid];
dependentList.OnQuickLaunch = true;
dependentList.Update();
// Lookup-Feld auf Regionen hinzufügen
SPList sourceList = lists[regionsGuid];
string strPrimaryCol = dependentList.Fields.AddLookup("Region", regionsGuid, true);
SPFieldLookup primaryCol = (SPFieldLookup)dependentList.Fields.GetFieldByInternalName(strPrimaryCol);
// Lookup auf Title-Feld der Regionen-Liste
primaryCol.LookupField = sourceList.Fields["Title"].InternalName;
primaryCol.Indexed = true;
// Löschbeschränkung
primaryCol.RelationshipDeleteBehavior = SPRelationshipDeleteBehavior.Restrict;
primaryCol.Update();
// Lookup-Feld zum Default-View hinzufügen
SPView defaultView = dependentList.Views[dependentList.DefaultView.ID];
defaultView.ViewFields.Add(strPrimaryCol); // internal field name
defaultView.Update();
}
catch (Exception ex)
{
// Ein unvorhergesehener Fehler, Liste wurde nicht angelegt
}
}
}
}
}
Listen löschen
Zum Löschen von verknüpften Listen muss zunächst die Löschbeschränkung aufgehoben werden:
private void DeleteLists()
{
string nameRegionsList = "Regionen";
string nameCountriesList = "Laender";
using (SPSite siteCollection = new SPSite("http://myServer/sites/mySite"))
{
siteCollection.AllowUnsafeUpdates = true;
using (SPWeb myWeb = siteCollection.OpenWeb("mySubWeb"))
{
SPList clist = myWeb.Lists[nameCountriesList];
SPList rlist = myWeb.Lists[nameRegionsList];
// Löschbeschränkung entfernen
SPFieldLookup primaryCol = (SPFieldLookup)clist.Fields.GetFieldByInternalName("Region");
primaryCol.RelationshipDeleteBehavior = SPRelationshipDeleteBehavior.None;
primaryCol.Indexed = false;
primaryCol.Update();
// Listen entfernen
myWeb.Lists.Delete(clist.ID);
myWeb.Lists.Delete(rlist.ID);
}
}
}