donderdag 14 juni 2012

SharePoint 2010: Create a custom wiki page

How to create a custom wiki page in SharePoint 2010 with a simple FeatureReceiver?


With this code it's pretty easy:

private string wikiFullContent = string.Empty;

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
using (SPWeb web = properties.Feature.Parent as SPWeb)
{
//* Define page payout
wikiFullContent = FormatBasicWikiLayout();
//* Add page to library
SPList sitePages = web.Lists.TryGetList("$Resources:core,WikiLibDefaultTitle;");
if (sitePages == null)
{
sitePages = web.Lists.EnsureSitePagesLibrary();
}


SPFolder rootFolder = sitePages.RootFolder;
string homePageName = SPUtility.GetLocalizedString("$Resources:core,WikiPageHomePageName;", "core", web.Language);
SPFile wikiPage = rootFolder.Files.Add(String.Format("{0}/{1}", rootFolder.ServerRelativeUrl, String.Format("{0}.aspx", homePageName)), SPTemplateFileType.WikiPage);
SPListItem wikiItem = wikiPage.Item;

//* Define content and add
#region Announcements
SPList listAnnouncements = web.Lists.TryGetList("Announcements");
if (listAnnouncements == null)
{
string localizedTitle = SPUtility.GetLocalizedString("$Resources:core,announceList;", "core", web.Language);
string localizedDesc = SPUtility.GetLocalizedString("$Resources:core,announceList_Desc;", "core", web.Language);
web.Lists.Add(localizedTitle, localizedDesc, SPListTemplateType.Announcements);

listAnnouncements = web.Lists["Announcements"];
}
ListViewWebPart wpAnnouncements = new ListViewWebPart();
wpAnnouncements.ListName = listAnnouncements.ID.ToString("B").ToUpper();
wpAnnouncements.ViewGuid = listAnnouncements.DefaultView.ID.ToString("B").ToUpper();
Guid wpAnnouncementsGuid = AddWebPartControlToPage(wikiPage, wpAnnouncements);
AddWebPartMarkUpToPage(wpAnnouncementsGuid, "{{0}}");
#endregion


#region Shared Documents
SPList listDocs = web.Lists.TryGetList("Shared Documents");

if (listDocs == null)
{
string localizedTitle = SPUtility.GetLocalizedString("$Resources:core,shareddocuments_Title;", "core", web.Language);

string localizedDesc = SPUtility.GetLocalizedString("$Resources:core,camlidDc5;", "core", web.Language);
web.Lists.Add(localizedTitle, localizedDesc, SPListTemplateType.DocumentLibrary);

listDocs = web.Lists["Shared Documents"];
}

ListViewWebPart wpDocs = new ListViewWebPart();
wpDocs.ListName = listDocs.ID.ToString("B").ToUpper();
wpDocs.ViewGuid = listDocs.DefaultView.ID.ToString("B").ToUpper();
Guid wpDocsGuid = AddWebPartControlToPage(wikiPage, wpDocs);
AddWebPartMarkUpToPage(wpDocsGuid, "{{1}}");
#endregion //Shared Documents

  //* Update Wiki page content and save
wikiItem[SPBuiltInFieldId.WikiField] = wikiFullContent.ToString();
wikiItem.UpdateOverwriteVersion();
}
}


private string FormatBasicWikiLayout()
{
StringBuilder sb = new StringBuilder();
sb.Append("<table id=\"layoutsTable\" style=\"width: 100%\">");
sb.Append("<tbody>");
sb.Append("<tr style=\"vertical-align: top\">");
sb.Append("<td style=\"width: 66.6%\">");
sb.Append("<div class=\"ms-rte-layoutszone-outer\" style=\"width: 100%\">");
sb.Append("<div class=\"ms-rte-layoutszone-inner\" style=\"min-height: 60px; word-wrap: break-word\">");
sb.Append("{{0}}");
sb.Append("{{1}}");
sb.Append("<p></p>");
sb.Append("</div>");
sb.Append("</div>");
sb.Append("</td>");
sb.Append("<td style=\"width: 33.3%\">");
sb.Append("<div class=\"ms-rte-layoutszone-outer\" style=\"width: 100%\">");
sb.Append("<div class=\"ms-rte-layoutszone-inner\" style=\"min-height: 60px; word-wrap: break-word\">");
sb.Append("<p><img style=\"margin: 5px\" alt=\"People collaborating\" src=\"/_layouts/images/homepageSamplePhoto.jpg\" /></p>");
sb.Append("<p></p>");
sb.Append("</div>");
sb.Append("</div>");
sb.Append("</td>");
sb.Append("</tr>");
sb.Append("</tbody>");
sb.Append("</table>");
sb.Append("<span id=\"layoutsData\" style=\"display: none\">false,false,2</span>");

return sb.ToString();
}

private Guid AddWebPartControlToPage(SPFile wikiFile, System.Web.UI.WebControls.WebParts.WebPart wp)
{
SPLimitedWebPartManager limitedWebPartManager = wikiFile.GetLimitedWebPartManager(PersonalizationScope.Shared);
Guid storageKeyGuid = Guid.NewGuid();
string storageKeyId = StorageKeyToID(storageKeyGuid);
wp.ID = storageKeyId;
limitedWebPartManager.AddWebPart(wp,
"wpz", 0);
return storageKeyGuid;
}

private void AddWebPartMarkUpToPage(Guid wpGuid, string replaceToken)
{
string wpDiv = string.Format(CultureInfo.InvariantCulture, "<div class='ms-rtestate-read ms-rte-wpbox' contentEditable='false'><div class='ms-rtestate-read {0}' id='div_{0}'></div><div style='display:none' id='vid_{0}'></div></div>", new object[] { wpGuid.ToString("D") });
wikiFullContent = wikiFullContent.Replace(replaceToken, wpDiv);
}

public static string StorageKeyToID(Guid storageKey)
{
if (!(Guid.Empty == storageKey))
{
return ("g_" + storageKey.ToString().Replace('-', '_'));
}
return string.Empty;
}


Thanks to: http://donalconlon.wordpress.com/2010/05/04/sp2010-creating-a-wiki-page-using-the-om/
On this blog you can see the full explantation.

Geen opmerkingen:

Een reactie posten