Convert a site template manifest.xml file to onet.xml site definition file 

Tags:

 


    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.



     



    1. <span
      style="font-size: 11pt; font-family: Calibri">Open the ONET.XML file in the site definition from which the template
      manifest.xml<span
      style="font-size: 11pt; font-family: Calibri"> file was created and copy it to a
      destination directory



      Important:<span
      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.

       

    2. <span
      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"
      .

       

    3. <span
      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:<span
      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<span
      style="font-size: 11pt; font-family: Calibri"> element we are converting through
      the List[@source_attribute]<span
      style="font-size: 11pt; font-family: Calibri"> notation and to attributes of the
      /Project/ListTemplates/ListTemplate
      we are generating through
      the
      ListTemplate[@target_attribute]<span
      style="font-size: 11pt; font-family: Calibri"> notation.



      Note:<span
      style="font-size: 11pt; font-family: Calibri"> We are adding additional
      /Project/ListTemplates/ListTemplate
      elements to the new
      ONET.XML<span
      style="font-size: 11pt; font-family: Calibri"> file. We are not removing the default
      /Project/ListTemplates/ListTemplate
      elements already present
      in the file.



      Note:<span
      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.

       


      1. <span
        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".

      2. <span
        style="font-size: 11pt; font-family: Calibri">Set ListTemplate[Name] to List[DisplayName].

      3. <span
        style="font-size: 11pt; font-family: Calibri">Set ListTemplate[Type] to a
        unique numeric value. I, and others, recommend starting at 10000.



        Note:<span
        style="font-size: 11pt; font-family: Calibri"> Although the
        Type<span
        style="font-size: 11pt; font-family: Calibri"> attribute is optional in the
        ONET.XML<span
        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.

         

      4. <span
        style="font-size: 11pt; font-family: Calibri">Set ListTemplate[Description] to List[Description].

      5. <span
        style="font-size: 11pt; font-family: Calibri">Set ListTemplate[BaseType] to List[BaseType].




     



    1. <span
      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.

       

    2. <span
      style="font-size: 11pt; font-family: Calibri">Remove the default /Project/Configurations/Configuration<span
      style="font-size: 11pt; font-family: Calibri"> elements from the new
      ONET.XML<span
      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.

       

    3. <span
      style="font-size: 11pt; font-family: Calibri">Create a new /Project/Configurations/Configuration<span
      style="font-size: 11pt; font-family: Calibri"> element in the new
      ONET.XML<span
      style="font-size: 11pt; font-family: Calibri"> file.

       


      1. <span
        style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration[ID]<span
        style="font-size: 11pt; font-family: Calibri"> to "0"
        .

         

      2. <span
        style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration[Name]<span
        style="font-size: 11pt; font-family: Calibri"> to "Default".

         




    1. <span
      style="font-size: 11pt; font-family: Calibri">Create a new /Project/Configurations/Configuration/Lists<span
      style="font-size: 11pt; font-family: Calibri"> element.

       

    2. <span
      style="font-size: 11pt; font-family: Calibri">For each custom /Project/ListTemplates/ListTemplate
      created in step 3, create a
      /Project/Configurations/Configuration/Lists/List<span
      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:<span
      style="font-size: 11pt; font-family: Calibri"> The next steps should be performed
      for each newly created
      /Project/Configurations/Configuration/Lists/List
      element.

       


      1. <span
        style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration/Lists/List[Title]<span
        style="font-size: 11pt; font-family: Calibri"> attribute to the /Project/ListTemplates/ListTemplate[DisplayName]<span
        style="font-size: 11pt; font-family: Calibri">.

      2. <span
        style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration/Lists/List[Type]<span
        style="font-size: 11pt; font-family: Calibri"> attribute to /Project/ListTemplates/ListTemplate[Type]<span
        style="font-size: 11pt; font-family: Calibri">.

         




    1. <span
      style="font-size: 11pt; font-family: Calibri">Add the following elements to the
      /Project/Configurations/Configuration/Lists
      element:

       



    <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>



     



    1. <span
      style="font-size: 11pt; font-family: Calibri">Clear out the old /Project/Configurations/Configuration/Modules
      element.

       

    2. <span
      style="font-size: 11pt; font-family: Calibri">Create a /Project/Modules element in the new ONET.XML file.

       

    3. <span
      style="font-size: 11pt; font-family: Calibri">Create a /Project/Configurations/Configuration/Modules/Module<span
      style="font-size: 11pt; font-family: Calibri"> element


      1. <span
        style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration/Modules/Module[Name]<span
        style="font-size: 11pt; font-family: Calibri"> to "DefaultHome".

      2. <span
        style="font-size: 11pt; font-family: Calibri">Set the /Project/Configurations/Configuration/Modules/Module[Name]<span
        style="font-size: 11pt; font-family: Calibri"> to "WebPartPopulation".




     



    1. <span
      style="font-size: 11pt; font-family: Calibri">Clear out the old /Project/Modules element

       

    2. <span
      style="font-size: 11pt; font-family: Calibri">Create a /Project/Modules element in the new ONET.XML
      file.



     



    1. <span
      style="font-size: 11pt; font-family: Calibri">Add the following element to the
      /Project/Modules<span
      style="font-size: 11pt; font-family: Calibri"> element:

       



    <Module Name="DefaultHome" Url="" Path="">



    <File Url="default.aspx">



    <NavBarPage Name="Home" ID="1002" Position="Start"> </NavBarPage>



    </File>



    </Module>



     



    1. <span
      style="font-size: 11pt; font-family: Calibri">Add the following element to the
      /Project/Modules
      element:

       



    <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>



     



    1. <span
      style="font-size: 11pt; font-family: Calibri">Leave the /Project/Components as is.

       



    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.


 
Posted by Eugene Rosenfeld on 17-Nov-06
0 Comments  |  Trackback Url  |  Link to this post | Bookmark this post with:        
 

Links to this post

Comments

Name:
URL:
Email:
Comments: