Det finns två sätt att koda egna listor i sharepoint 2007, antingen väljer man API spåret eller XML/CAML spåret. Som med allt annat så finns det för- och nackdelar med båda dessa sättet. Stora grejer som jag ser det är i XML så kan du återanvända GUID till innehållstyper, fält m.m. vilket är något jag ofta gör/behov av.
I det här inlägget kommer jag gå igenom hur du bygger en egen dokument lista med innehållstyper och egna fält i en feature som vi sedan kommer använda för att generera egna listor som vi behöver. Vi börjar med att skapa ett nytt projekt och en ny Blank Feature med hjälp av tex WSPBuilder(riktigt bra verktyg för utvecklare). När detta är gjort öppnar du upp feature.xml. Ändra din fil så att den ser ungefär enligt följande, tänk på att generera egna guidar.
<?xml version="1.0" encoding="utf-8"?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/"
Id="876551fb-e627-4e7a-8207-a7682b431b98"
SolutionId="4EAA49EB-2965-44ea-8D47-BE360AA7813E"
Title="MyDocumentListTemplate"
Description="Description for MyDocumentListTemplate"
Version="1.0.0.0"
Hidden="FALSE"
Scope="Site"
ActivateOnDefault="TRUE"
DefaultResourceFile="core">
<ElementManifests>
<ElementManifest Location="SP2010.ListTemplates\SSH.ListTemplates.xml" />
<ElementFile Location="SP2010.DocumentLibraryTemplate\schema.xml"/>
<ElementFile Location="SP2010.DocumentLibraryTemplate\EditDlg.htm"/>
<ElementFile Location="SP2010.DocumentLibraryTemplate\FileDlg.htm"/>
<ElementFile Location="SP2010.DocumentLibraryTemplate\Repair.aspx"/>
<ElementFile Location="SP2010.DocumentLibraryTemplate\Upload.aspx"/>
</ElementManifests>
</Feature>
Det viktiga i denna filen är innehållet i <ElementManifests /> som vi kan sno ifrån den ursprungliga DocumentLibrary som finns under 12 högen och sedan: \12\TEMPLATE\FEATURES\DocumentLibrary.
Viktigt är också vad som står framför vår pekning av filerna, i mitt fall SP2010.ListTemplates samt 2010.DocumentLibraryTemplate vilket gör att vi måste skapa kataloger i vårt projekt och lägga filerna där. Nu borde vi ha en struktur som ser ut såhär i vårat projekt.

Spara om filerna enligt din elementmanifest spec. Öppna nu filen ListTemplates.xml och uppdatera den enligt följande. Viktigt är att sätta Type med värde över 10000 så att den inte krockar med någon annat i Sharepoint.
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<ListTemplate
Name="SP2010.DocumentLibraryTemplate"
Type="10070"
BaseType="1"
OnQuickLaunch="TRUE"
SecurityBits="11"
DisplayName="MyDocumentListLibrary"
Description="My description of MyDocumentListLibrary"
Image="/_layouts/images/itdl.gif"
DisallowContentTypes="False"
/>
</Elements>
Nästa steg är att lägga till våra innehållstyper till vår schema.xml men innan vi öppnar schema.xml så måste vi skapa våra innehållstyper och sidkolumner. Skapa en blank feature i samma projekt och döp det till DocumentContentTypesAndSitecolumns ta bort elements-filen och skapa sedan de innehållstyper du vill ha med samt kolumner. Vår struktur ser nu enligt följande och exempel på hur våra innehållstyper och sidkolumner kan se ut enligt följande.

Sitecolumns.xml
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Field ID="{DIN GUID}" Type="Text" Group="SP2010 Kolumner"
Name="SP2010_Epost" DisplayName="E-post" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields"
StaticName="SP2010_Epost" Description="E-post" Required="TRUE" />
…
</Elements>
firstCT.xml
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<ContentType ID="0x0101001A7F23FCA140433eAF3E8D034000E351" Name="First CT" Group="SP2010-innehållstyper" Description="Innehållstyp för First" Version="0">
<FieldRefs>
<FieldRef ID="{Samma guid som i sitecolumns.xml}" Name="SP2010_Epost" />
…
</FieldRefs>
</ContentType>
</Elements>
Viktigt är i ID är en kombination av värden som indikerar vilken innehållstype den ärver ifrån. I vårat fall är det 0x0101 som säger åt sharepoint att den här innehållstypen ärver ifrån Document. Man behöver även lägga till två nollor innan vi kastar in vår GUID. Så med andra ord blir det 0x010100VÅRGUID.
Bibliotek innehållstyper
- 0x0101 - Dokument
- 0x010101 - Formulär
- 0x010102 - Bilder
- 0x010108 – WikiDokument
- 0x010109 - BasPage
- 0x01010901 - WebPartSida
Så nu är vi klara med våra innehållstyper och kolumner så nu kan vi gå over till schema.xml. Bli inte rädda för den filen då den är ohyggligt stor när man först öppnar och läser den.
Börja med att byta ut följande:
<List xmlns:ows="Microsoft SharePoint"
Title="$Resources:shareddocuments_Title;"
Direction="$Resources:Direction;"
Url="Shared Documents"
BaseType="1">
Till:
<List xmlns:ows="Microsoft SharePoint"
Title="$Resources:shareddocuments_Title;"
Direction="$Resources:Direction;"
Url="Shared Documents"
Type="10070"
BaseType="1"
EnableContentTypes="True"
EnableFolderCreation="FALSE"
EnableVersioning="majorminor">
Du kan nu ta bort följande del då vi kommer koppla våra innehållstyper mha av powershell.
<ContentTypes>
<ContentTypeRef ID="0x0101">
<Folder TargetName="Forms/Document" />
</ContentTypeRef>
<ContentTypeRef ID="0x0120" />
</ContentTypes>
Nu är grunderna lagda och det går bra att bygga vårt WSP projekt samt köra deploy till vår server. Om du nu går in på sidan och webbplatsinställningar/webbplatsamlingens funktioner hittar du våra två nyinstallerade features.

Nu går det att för hand klicka sig fram till att få vårat eget bibliotek med egna innehållstyper skapade vi gränssnittet. Du hittar vår nya typ av bibliotek under webbplatsbibliotek och listor. Men jag ska visa ett annat sätt som gör det enkelt och smidigt att bygga upp miljöer genom powershellscriptning. Anledning till att man vill använda den scriptade vägen är att du minimerar chanserna att göra fel genom att i andra fall klicka dig fram till hur miljön skall vara och det går fort att flytta eller sätta upp nya miljöer(ex testserver, prodserver eller nya kollegors utv.miljö).
Detta kommer jag beskriva och visa hur vi bygger i del två.