Here is a code snippet to set your page layouts associated content type. This one was a bit weird when I first tried to set it.
private static void SetPageLayoutMetadata(Web web, File uploadFile, string title, string publishingAssociatedContentType) { // Speficy that the page layout is a page layout and not a master page var parentContentTypeId = ""0x01010007FF3E057FA8AB4AA42FCB67B453FFC100E214EEE741181F4E9F7ACC43278EE811""; //Page Layout var gallery = web.GetCatalog(116); web.Context.Load(gallery, g => g.ContentTypes); web.Context.ExecuteQuery(); var contentTypeId = gallery.ContentTypes.FirstOrDefault(ct => ct.StringId.StartsWith(parentContentTypeId)).StringId; var item = uploadFile.ListItemAllFields; web.Context.Load(item); item["ContentTypeId"] = contentTypeId; item["Title"] = title; item["PublishingAssociatedContentType"] = publishingAssociatedContentType; item.Update(); web.Context.ExecuteQuery(); }
Two important things:
-
parentContentTypeId: This is the ID that tells O365 that this page layout is actually page layout, this is a static id which is defined in the code
- publishingAssociatedContentType: This is your actual content type to which you want to associate your page layout to: Example of the format:;#my content type name;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900242457EFB8B24247815D688C526CD44D00A3428808D7DE6A4RABF83921AFB25424;#
- So the format should be in the following way:
public static String BuildPublishingAssociativeContentTypeId(ContentType contentType) { String contentTypeAssociativeID = null; if(contentType != null) { contentTypeAssociativeID = String.Format(";#{0};#{1};#", contentType.Name, contentType.StringId); } return contentTypeAssociativeID; }