- style="font-size: 11pt; font-family: Calibri">Open the ONET.XML file in the site definition from which the template
manifest.xml style="font-size: 11pt; font-family: Calibri"> file was created and copy it to a
destination directory
Important: style="font-size: 11pt; font-family: Calibri"> Never modify the default ONET.XML
files distributed with SharePoint.
Now that our source and target files are setup, we can begin migrating our list
definitions.
- style="font-size: 11pt; font-family: Calibri">For each /Project/ListTemplates/ListTemplate
element already present in the file,
make sure to set the
/Project/ListTemplates/ListTemplate[Path]
attribute to the folder under the Lists directory where the original site definition
resides. For example, if referencing lists from the default Team Web Site site definition,
set the
/Project/ListTemplates/ListTemplate[Path]
attribute to
"STS".
- style="font-size: 11pt; font-family: Calibri">For each /Web/UserLists/List elements in the manifest.xml
file, add a
/Project/ListTemplates/ListTemplate
element to the destination ONET.XML
file
Note: style="font-size: 11pt; font-family: Calibri"> The next few steps describe the formatting
for each
/Project/ListTemplates/ListTemplate
element. Each new ListTemplate element will take this form:
<ListTemplate Name="Cache" DisplayName="Cache" Type="10000" BaseType="0" Unique="TRUE"
Hidden="TRUE" DontSaveInTemplate="TRUE" SecurityBits="11" Description="List of meetings
attached to the workspace." Image="/_layouts/images/itgen.gif"></ListTemplate>
I will refer to attributes from the
/Web/UserLists/List style="font-size: 11pt; font-family: Calibri"> element we are converting through
the List[@source_attribute] style="font-size: 11pt; font-family: Calibri"> notation and to attributes of the
/Project/ListTemplates/ListTemplate
we are generating through
the ListTemplate[@target_attribute] style="font-size: 11pt; font-family: Calibri"> notation.
Note: style="font-size: 11pt; font-family: Calibri"> We are adding additional
/Project/ListTemplates/ListTemplate
elements to the new
ONET.XML style="font-size: 11pt; font-family: Calibri"> file. We are not removing the default
/Project/ListTemplates/ListTemplate
elements already present
in the file.
Note: style="font-size: 11pt; font-family: Calibri"> We are creating list definition headers
in the ONET.XML file, but we have not yet created the list schemas behind the new
list definitions. For detailed steps on converting the list definition from the
site template manifest.xml to a site definition schema.xml file, take a look at
my previous blog entry.
- style="font-size: 11pt; font-family: Calibri">Set the ListTemplate[Name] to List[Title].
Make sure to remove any non-alpha characters from when converting the title to the
list name. For example, if the Title is "My Mom's List",
set the name to something like "MyMomsList". - style="font-size: 11pt; font-family: Calibri">Set ListTemplate[Name] to List[DisplayName].
- style="font-size: 11pt; font-family: Calibri">Set ListTemplate[Type] to a
unique numeric value. I, and others, recommend starting at 10000.
Note: style="font-size: 11pt; font-family: Calibri"> Although the
Type style="font-size: 11pt; font-family: Calibri"> attribute is optional in the
ONET.XML style="font-size: 11pt; font-family: Calibri"> file, you will not be able to automatically
provision the list using Configuration
elements upon site creation unless you specify the Type
attribute.
- style="font-size: 11pt; font-family: Calibri">Set ListTemplate[Description] to List[Description].
- style="font-size: 11pt; font-family: Calibri">Set ListTemplate[BaseType] to List[BaseType].
- style="font-size: 11pt; font-family: Calibri">Leave the /Project/DocumentTemplates and /Project/BaseTypes
elements as is.
With the list definitions migrated, we need to set up a site configuration to provision
our lists and a couple of modules to define the files and web parts our site will
use.
- style="font-size: 11pt; font-family: Calibri">Remove the default /Project/Configurations/Configuration style="font-size: 11pt; font-family: Calibri"> elements from the new
ONET.XML style="font-size: 11pt; font-family: Calibri"> file. We will be creating a new one
based on the configuring of the site from the site template.
- style="font-size: 11pt; font-family: Calibri">Create a new /Project/Configurations/Configuration style="font-size: 11pt; font-family: Calibri"> element in the new
ONET.XML style="font-size: 11pt; font-family: Calibri"> file.
- style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration[ID] style="font-size: 11pt; font-family: Calibri"> to "0"
.
- style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration[Name] style="font-size: 11pt; font-family: Calibri"> to "Default".
- style="font-size: 11pt; font-family: Calibri">Create a new /Project/Configurations/Configuration/Lists style="font-size: 11pt; font-family: Calibri"> element.
- style="font-size: 11pt; font-family: Calibri">For each custom /Project/ListTemplates/ListTemplate
created in step 3, create a
/Project/Configurations/Configuration/Lists/List style="font-size: 11pt; font-family: Calibri"> element. You will now need to use
the optional Type attribute specified in step 3c.
The newly created elements will take the following forms:
<List Title="Cache" Type="10000" ></List>
Note: style="font-size: 11pt; font-family: Calibri"> The next steps should be performed
for each newly created
/Project/Configurations/Configuration/Lists/List element.
- style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration/Lists/List[Title] style="font-size: 11pt; font-family: Calibri"> attribute to the /Project/ListTemplates/ListTemplate[DisplayName] style="font-size: 11pt; font-family: Calibri">.
- style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration/Lists/List[Type] style="font-size: 11pt; font-family: Calibri"> attribute to /Project/ListTemplates/ListTemplate[Type] style="font-size: 11pt; font-family: Calibri">.
- style="font-size: 11pt; font-family: Calibri">Add the following elements to the
/Project/Configurations/Configuration/Lists
element:
- style="font-size: 11pt; font-family: Calibri">Clear out the old /Project/Configurations/Configuration/Modules
element.
- style="font-size: 11pt; font-family: Calibri">Create a /Project/Modules element in the new ONET.XML file.
- style="font-size: 11pt; font-family: Calibri">Create a /Project/Configurations/Configuration/Modules/Module style="font-size: 11pt; font-family: Calibri"> element
- style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration/Modules/Module[Name] style="font-size: 11pt; font-family: Calibri"> to "DefaultHome".
- style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration/Modules/Module[Name] style="font-size: 11pt; font-family: Calibri"> to "WebPartPopulation".
- style="font-size: 11pt; font-family: Calibri">Clear out the old /Project/Modules element
- style="font-size: 11pt; font-family: Calibri">Create a /Project/Modules element in the new ONET.XML
file. - style="font-size: 11pt; font-family: Calibri">Add the following element to the
/Project/Modules style="font-size: 11pt; font-family: Calibri"> element:
- style="font-size: 11pt; font-family: Calibri">Add the following element to the
/Project/Modules
element:
- style="font-size: 11pt; font-family: Calibri">Leave the /Project/Components as is.
I was doing some work for a client and was thinking…. Site definitions are great.
They are extremely flexible. But, they can also be very time consuming to create.
Site templates are a little less desirable because they un-ghost pages. But, they
are so easy and quick to create. It would sure be nice if I could simply take a
site template and convert it to a site definition. Well, it turns out that it’s
not all that hard. There are quite a few steps to follow, but it’s a lot easier
than creating a site definition from scratch.
First, let's get some prep-work done.
<List Title="Site Template Gallery" Type="111" Url="_catalogs/wt" RootWebOnly="TRUE"></List>
<List Title="Web Part Gallery" Type="113" Url="_catalogs/wp" RootWebOnly="TRUE"></List>
<List Title="List Template Gallery" Type="114" Url="_catalogs/lt" RootWebOnly="TRUE"></List>
<Module Name="DefaultHome" Url="" Path="">
<File Url="default.aspx">
<NavBarPage Name="Home" ID="1002" Position="Start"> </NavBarPage>
</File>
</Module>
<Module Name="WebPartPopulation" List="113" Url="_catalogs/wp" Path="..\sts\lists\wplib\dwp"
RootWebOnly="TRUE">
<File Url="MSContentEditor.dwp" Type="GhostableInLibrary"/>
<File Url="MSPageViewer.dwp" Type="GhostableInLibrary"/>
<File Url="MSImage.dwp" Type="GhostableInLibrary"/>
<File Url="MSMembers.dwp" Type="GhostableInLibrary"/>
<File Url="MSXml.dwp" Type="GhostableInLibrary"/>
</Module>
At this point we have transferred all of the list definitions from our site template
to our site definition and created the list schema.xml files to store the schemas
for our custom lists. However, we have not added the web pats to our default.aspx
page. Unfortunately, I have run out of time on this post so I will have to leave
that for another day. In the mean time, I hope this post helps anyone looking for
a "quick-start" way to create site definitions from existing SharePoint sites.