カスタム コードを使用できる場合FeatureActivated event receiver
は、機能の をオーバーライドして、リストとフォルダーを作成できます。
ファイルをプロビジョニングする機能の前に実行する別の機能を作成し、ファイル プロビジョニング機能に最初の依存関係を与えて、リストが利用可能であることを確認する必要があります。
または、xml を介してリスト定義とインスタンスを追加することもできます。個人的には可能な限りこのルートを避けていますが、MSDN でこれに関するガイダンスを見つけることができます- SharePoint Server 2007 のカスタム リスト列を使用したリスト定義の作成
コードを介してリストを追加する例 (警告 - テストする 2007 はありませんが、これは 2010 で機能し、2010 固有のコードを使用したことはないと思います)
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWeb web = properties.Feature.Parent as SPWeb; // Assuming web scoped feature
SPList customPagesList;
bool listExists = true;
//Check to see if the list exists, this method sucks but 2007 doesn't have web.TryGetList()
try
{
customPagesList = web.GetList("/CustomPages"); // server relative url of the list
}
catch (FileNotFoundException e)
{
listExists = false;
}
if (!listExists)
{
// Create list and record returned guid
Guid customPagesListGuid = web.Lists.Add("CustomPages",
"Library to store web pages used in the site", SPListTemplateType.DocumentLibrary);
//Get list from stored guid
customPagesList = web.Lists[customPagesListGuid];
// Set list properties and add required content types
customPagesList.Title = "CustomPages";
customPagesList.OnQuickLaunch = false; // Set to true to display on the quick launch
customPagesList.ContentTypesEnabled = true;
customPagesList.NoCrawl = true; // Set to false if you want pages indexed by search
customPagesList.EnableFolderCreation = true;
customPagesList.EnableSyndication = false; // Turn off rss
SPContentType webPartPageCT = web.AvailableContentTypes[SPBuiltInContentTypeId.WebPartPage];
SPContentType basicPageCT = web.AvailableContentTypes[SPBuiltInContentTypeId.BasicPage];
customPagesList.ContentTypes.Add(webPartPageCT);
customPagesList.ContentTypes.Add(basicPageCT);
// Remove the default content type added on list creation if it is not needed
DeleteContentType(customPagesList.ContentTypes, "Document");
// Commit changes
customPagesList.Update();
//Get library from stored guid
SPDocumentLibrary customPagesLibrary = (SPDocumentLibrary)web.Lists[customPagesListGuid];
customPagesLibrary.Folders.Add("/Lists/CustomPages/yyy", SPFileSystemObjectType.Folder);
string rootFolderUrl = customPagesLibrary.RootFolder.ServerRelativeUrl;
SPListItem newFolder = customPagesLibrary.Folders.Add(rootFolderUrl, SPFileSystemObjectType.Folder, "yyy");
newFolder.Update();
}
}
private void DeleteContentType(SPContentTypeCollection ctCollection, string ctName)
{
foreach (SPContentType ct in ctCollection)
{
if (ct.Name.Equals(ctName))
{
ct.Delete();
}
}
}