/ 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);
}
}
}