by Håvard Hebnes
18. July 2009 11:37
If you want to change the associated contenttype for a pagelayout, you can do it like this:
// first you need a reference to a PublihingSite or PublishingWeb
var pubSite = new PublishingSite(site);
// then we need to get all available pagelayouts
var pageLayouts = pubSite.GetPageLayouts(false);
// try to find the pagelayout you want to update
var pageLayout = GetPageLayout(pageLayouts, "pagelayout.aspx");
// if pagelayout exists, update it (here you need to have a ref to the contenttype)
if (pageLayout != null)
UpdateAssiciationContentType(contentType, pageLayout);
/// <summary>
/// Helper method to update associated contenttype for a pagelayout
/// </summary>
/// <param name="newsContentType"></param>
/// <param name="pageLayout"></param>
private static void UpdateAssiciationContentType(SPContentType contentType, PageLayout pageLayout)
{
// Check out the pagelayout
pageLayout.ListItem.File.CheckOut();
// set AssociatedContentType
pageLayout.AssociatedContentType = contentType;
pageLayout.Update();
// CheckIn, Publish and approve changes
pageLayout.ListItem.File.CheckIn("Changed associated contenttype");
pageLayout.ListItem.File.Publish("");
pageLayout.ListItem.File.Approve("Change approved");
}
/// <summary>
/// Get pagelayout by name
/// </summary>
/// <param name="pageLayouts"></param>
/// <param name="name"></param>
/// <returns></returns>
private static PageLayout GetPageLayout(IEnumerable<PageLayout> pageLayouts, string name)
{
var layouts = from PageLayout layout in pageLayouts
where layout.Name == name
select layout;
return layouts.Count() == 1 ? layouts.ElementAt(0) : null;
}
by Håvard Hebnes
14. July 2009 21:49
Out of the box SharePoint has a few content types that you can use. If you would like to create your own that inherits from one of these you could do it like this:
// first we reference the content type we want to inherit from
SPContentType pageContentType = web.AvailableContentTypes[ContentTypeId.Page];
// create our new content type
var customContentType = new SPContentType(pageContentType, web.ContentTypes, "Name of content type");
newsContentType.Group = "Custom content type group";
// add content type to the site
web.ContentTypes.Add(customContentType);
web.Update();
To add a custom sitecolumn to our new content type:
// first we need to find our site column
SPField siteColumn = web.AvailableFields.GetFieldByInternalName("InternalSiteColumnName");
// Add column to our new content type
customContentType.FieldLinks.Add(new SPFieldLink(siteColumn));
// Update content type
customContentType.Update();
by Håvard Hebnes
8. July 2009 10:26
Yesterday I tried to migrate a user from one domain to another domain running:
stsadm -o migrateuser -oldlogin domain1\user -newlogin domain2\user –ignoresidhistory
This resulted in the following error:
The site with the id c725736f-d942-4475-b3c1-bf1f8c8a1339 could not be found.
To find out which sitecollection this id belongs to I ran the following sql query:
SELECT [Id], [SiteId], [FullUrl]
FROM [WSS_Content_DB].[dbo].[Webs] where SiteId = 'c725736f-d942-4475-b3c1-bf1f8c8a1339'
Result:
Id SiteId FullUrl
99642E4D-6C53-49D0-996C-7650C494971C c725736f-d942-4475-b3c1-bf1f8c8a1339 personal/mysiteuser
After this I ran another test which requires that SP2 is installed on your server:
stsadm -o preupgradecheck
The result from this command can be found here:
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\LOGS\PreUpgradeCheck-TIMESTAMP.htm
Look for the following section:
Failed : Orphaned site collections
An orphaned site collection is a site collection exists in the content database, but it is not in the configruation site map. Such site collections is not accessible and will not be upgraded properly.The follow orphaned site collections where found:
- /personal/mysiteuser(Data Source=sqlserver\instance;Initial Catalog=WSS_Content_DB;Integrated Security=True;Enlist=False;Connect Timeout=15)
I then confirmed that this sitecollection was the same as the one that I had problems with.
Solution
To fix this I deleted the sitecollection with this command (Requires SP2 if you use –force or -siteid):
stsadm -o deletesite -siteid c725736f-d942-4475-b3c1-bf1f8c8a1339 -databaseserver SQLSERVER\instance
-databasename wss_content_db -force
After this I migrated the user successfully.
Links:
Deletesite- Stsadm operation