c# - una - Cómo crear programáticamente páginas wiki editables dentro de la biblioteca de páginas de un sitio de Enterprise Wiki
sitios web para crear wikis gratis (2)
Soy nuevo en SharePoint. Estoy tratando de crear programáticamente una página wiki dentro de la biblioteca de páginas de un sitio Enterprise Wiki en SharePoint 2010. Aquí está mi código:
using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
SPWeb rootWeb = site.RootWeb;
rootWeb.AllowUnsafeUpdates = true;
SPList wiki = rootWeb.Lists["Pages"];
SPFolder rootFolder = wiki.RootFolder;
SPFile wikiPage = rootFolder.Files.Add(String.Format("{0}/{1}", rootFolder.ServerRelativeUrl, "MyWikiPage.aspx"), SPTemplateFileType.WikiPage);
SPListItem wikiItem = wikiPage.Item;
wikiItem["PublishingPageContent"] = "my demo content";
wikiItem.UpdateOverwriteVersion();
rootWeb.AllowUnsafeUpdates = false;
}
La página se crea, pero el problema es que la página creada no es editable y el contenido de la demostración no está insertado. Cuando se abre en el modo de edición, no hay espacio de contenido disponible y las opciones de edición aparecen atenuadas.
También intenté configurar el contenido predeterminado de esta manera:
wikiItem[SPBuiltInFieldId.WikiField] = "my demo content";
Pero eso da un error de campo no válido.
También intenté crear la página con esta línea de código:
SPFile wikiPage = SPUtility.CreateNewWikiPage(wiki, String.Format("{0}/{1}", rootFolder.ServerRelativeUrl, "MyWikiPage.aspx"));
Pero el resultado es exactamente el mismo.
Confirmé que la característica "Publicación de SharePoint Server" está activada para el sitio y que la función "Infraestructura de publicación de SharePoint Server" está activada para la colección de sitios.
Por favor ayuda.
Con la ayuda de mi otro hilo en sharepoint.stackexchange.com, se me ocurrió esta solución:
En lugar de apuntar a la biblioteca de páginas con rutinas de manipulación de wiki, necesitamos crear una nueva página de publicación y actualizar las propiedades del tipo de contenido en consecuencia.
Para el beneficio de los demás, aquí está el código que funcionó para mí:
using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
SPWeb rootWeb = site.RootWeb;
rootWeb.AllowUnsafeUpdates = true;
SPList wiki = rootWeb.Lists["Pages"];
String url = wiki.RootFolder.ServerRelativeUrl.ToString();
PublishingSite pubSite = new PublishingSite(rootWeb.Site);
string pageLayoutName = "EnterpriseWiki.aspx"; //Page Layout Name
string layoutURL = rootWeb.Url + "/_catalogs/masterpage/" + pageLayoutName;
PageLayout layout = pubSite.PageLayouts[layoutURL];
PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(rootWeb);
PublishingPage newWikiPage;
string myWikiPage = "MyWikiPage.aspx"; //Page name
newWikiPage = publishingWeb.GetPublishingPages().Add(myWikiPage, layout);
newWikiPage.Title = "My Wiki Page";
newWikiPage.Update();
rootWeb.AllowUnsafeUpdates = false;
}
Cómo crear una página wiki usando SSOM
DO#
/// <summary>
/// Create Wiki Page
/// </summary>
/// <param name="wikiPages"></param>
/// <param name="pageName"></param>
/// <param name="pageContent"></param>
/// <returns></returns>
public static SPListItem CreateWikiPage(SPList wikiPages, string pageName, string pageContent)
{
var web = wikiPages.ParentWeb;
var pSite = new Microsoft.SharePoint.Publishing.PublishingSite(web.Site);
var pageLayoutUrl = SPUtility.ConcatUrls(web.Site.Url,"/_catalogs/masterpage/EnterpriseWiki.aspx");
var pageLayout = pSite.PageLayouts[pageLayoutUrl];
var pWeb = Microsoft.SharePoint.Publishing.PublishingWeb.GetPublishingWeb(web);
var wikiPage = pWeb.GetPublishingPages().Add(pageName, pageLayout);
var wikiItem = wikiPage.ListItem;
wikiItem["PublishingPageContent"] = pageContent;
wikiItem.Update();
return wikiItem;
}
Potencia Shell
if ((Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null)
{
Add-PsSnapin Microsoft.SharePoint.PowerShell
}
Function Create-WikiPage([string]$WebUrl,[string]$PageName,[string]$PageContent)
{
$web = Get-SPWeb $WebUrl
$wikiPages = $web.Lists["Pages"]
$pSite = New-Object Microsoft.SharePoint.Publishing.PublishingSite($web.Site)
$pageLayoutUrl = $web.Site.Url + "/_catalogs/masterpage/EnterpriseWiki.aspx"
$pageLayout = $pSite.PageLayouts[$pageLayoutUrl]
$pWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
$wikiPage = $pWeb.GetPublishingPages().Add($PageName, $pageLayout);
$wikiPage.Title = [System.IO.Path]::GetFileNameWithoutExtension($PageName)
$wikiItem = $wikiPage.ListItem
$wikiItem["PublishingPageContent"] = $pageContent
$wikiItem.Update()
}
Uso
Create-WikiPage -WebUrl "http://contoso.intranet.sp.dev/faq/" -PageName "FAQ.aspx" -PageContent "Welcome to FAQ"