public static bool IsWebPartDefault(ModelWebPart wp) { var wpcomparer = WebPartSchemaComparer.CreateTypedComparer(wp); bool result = (null != wpcomparer) && wpcomparer.IsDefaultWebPart(wp); return result; }
// private ProvisioningTemplate GetFileContents(Web web, ProvisioningTemplate template, string welcomePageUrl, ProvisioningTemplateCreationInformation creationInfo, PnPMonitoredScope scope) //# private ProvisioningTemplate GetFileContents(ProvisioningTemplate template, Microsoft.SharePoint.Client.File file, ProvisioningTemplateCreationInformation creationInfo, PnPMonitoredScope scope) { var listItem = file.EnsureProperty(p => p.ListItemAllFields); var fileUrl = file.ServerRelativeUrl; var folderPath = fileUrl.Substring(0, fileUrl.LastIndexOf("/")); var homeFile = new OfficeDevPnP.Core.Framework.Provisioning.Model.File() { Folder = folderPath.TokenizeUrl(web.Url), Src = file.ServerRelativeUrl, Overwrite = true, }; // Add field values to file if (listItem != null && listItem.FieldValues != null) { homeFile.Properties = listItem.ToProvisioningValues(); } // Add WebParts to file, if it is a page. if (System.IO.Path.GetExtension(file.ServerRelativeUrl) == ".aspx") { var webParts = web.GetWebParts(file.ServerRelativeUrl); foreach (var webPart in webParts) { var webPartxml = TokenizeWebPartXml(web, web.GetWebPartXml(webPart.Id, file.ServerRelativeUrl)); var newWp = new OfficeDevPnP.Core.Framework.Provisioning.Model.WebPart() { Title = webPart.WebPart.Title, Row = (uint)webPart.WebPart.ZoneIndex, Order = (uint)webPart.WebPart.ZoneIndex, Contents = webPartxml }; #if !SP2016 // As long as we've no CSOM library that has the ZoneID we can't use the version check as things don't compile... if (web.Context.HasMinimalServerLibraryVersion(Constants.MINIMUMZONEIDREQUIREDSERVERVERSION)) { newWp.Zone = webPart.ZoneId; } #endif homeFile.WebParts.Add(newWp); } } template.Files.Add(homeFile); creationInfo.PersistFile(folderPath, file.Name, web, scope); return(template); }
public void CanProvisionObjects() { var template = new ProvisioningTemplate(); Page page = new Page(); page.Layout = WikiPageLayout.TwoColumns; page.Overwrite = true; page.Url = "~site/sitepages/pagetest.aspx"; var webPart = new WebPart(); webPart.Column = 1; webPart.Row = 1; webPart.Contents = webpartcontents; webPart.Title = "Script Test"; page.WebParts.Add(webPart); template.Pages.Add(page); using (var ctx = TestCommon.CreateClientContext()) { var parser = new TokenParser(ctx.Web, template); new ObjectPages().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); ctx.Load(ctx.Web, w => w.ServerRelativeUrl); ctx.ExecuteQueryRetry(); var file = ctx.Web.GetFileByServerRelativeUrl(UrlUtility.Combine(ctx.Web.ServerRelativeUrl, "/SitePages/pagetest.aspx")); ctx.Load(file, f => f.Exists); ctx.ExecuteQueryRetry(); Assert.IsTrue(file.Exists); var wps = ctx.Web.GetWebParts(UrlUtility.Combine(ctx.Web.ServerRelativeUrl, "/SitePages/pagetest.aspx")); Assert.IsTrue(wps.Any()); } }
public void CanProvisionObjects() { var template = new ProvisioningTemplate(); Page page = new Page(); page.Layout = WikiPageLayout.TwoColumns; page.Overwrite = true; page.Url = "~site/sitepages/pagetest.aspx"; var webPart = new WebPart(); webPart.Column = 1; webPart.Row = 1; webPart.Contents = webpartcontents; webPart.Title = "Script Test"; page.WebParts.Add(webPart); template.Pages.Add(page); using (var ctx = TestCommon.CreateClientContext()) { TokenParser.Initialize(ctx.Web, template); new ObjectPages().ProvisionObjects(ctx.Web, template, new ProvisioningTemplateApplyingInformation()); ctx.Load(ctx.Web, w => w.ServerRelativeUrl); ctx.ExecuteQueryRetry(); var file = ctx.Web.GetFileByServerRelativeUrl(UrlUtility.Combine(ctx.Web.ServerRelativeUrl, "/SitePages/pagetest.aspx")); ctx.Load(file, f => f.Exists); ctx.ExecuteQueryRetry(); Assert.IsTrue(file.Exists); var wps = ctx.Web.GetWebParts(UrlUtility.Combine(ctx.Web.ServerRelativeUrl, "/SitePages/pagetest.aspx")); Assert.IsTrue(wps.Any()); } }
public void CanAddWebPartsToForms() { var template = new ProvisioningTemplate(); FileSystemConnector connector = new FileSystemConnector(resourceFolder + @"\..", ""); template.Connector = connector; var webPart = new WebPart { Column = 1, Row = 1, Contents = webpartcontents, Title = "Script Editor", Order = 0, Zone = "Main" }; var myfile = new Core.Framework.Provisioning.Model.File() { Overwrite = false, Src = "EditForm.aspx", Folder = "SitePages/Forms" }; myfile.WebParts.Add(webPart); template.Files.Add(myfile); using (var ctx = TestCommon.CreateClientContext()) { var parser = new TokenParser(ctx.Web, template); new ObjectFiles().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); ctx.Web.EnsureProperties(w => w.ServerRelativeUrl); var file = ctx.Web.GetFileByServerRelativeUrl( UrlUtility.Combine(ctx.Web.ServerRelativeUrl, UrlUtility.Combine("SitePages/Forms", "EditForm.aspx"))); ctx.Load(file, f => f.Exists); ctx.ExecuteQueryRetry(); // first of all do we even find the form ? Assert.IsTrue(file.Exists); var webParts = file.GetLimitedWebPartManager(PersonalizationScope.Shared).WebParts; ctx.Load(webParts, wp => wp.IncludeWithDefaultProperties(w => w.Id, w => w.WebPart, w => w.WebPart.Title)); ctx.ExecuteQueryRetry(); var webPartsArray = webParts.ToArray(); var webPartExists = false; foreach (var webPartDefinition in webPartsArray) { if (webPartDefinition.WebPart.Title == "Script Editor") { webPartExists = true; // cleanup after ourselves if we can find the webpart... webPartDefinition.DeleteWebPart(); } } ctx.ExecuteQueryRetry(); Assert.IsTrue(webPartExists); } }
public List<ModelWebPart> Retrieve(string pageUrl, TokenParser parser) { if (parser == null) { parser = new TokenParser(this.Web, new Model.ProvisioningTemplate()); } var xml = Web.GetWebPartsXml(pageUrl); var pageContent = Web.GetPageContent(pageUrl); var result = new List<ModelWebPart>(); if (string.IsNullOrEmpty(xml)) return result; var maches = GetWebPartXmlReqex.Matches(xml); var webPartDefinitions = this.GetWebPartDefinitionsWithServiceCall(pageUrl); foreach (var match in maches) { var webPartXml = match.ToString(); var zone = this.GetZone(webPartXml); var wpId = this.GetWebPartId(webPartXml); var definition = webPartDefinitions.FirstOrDefault(d => d.Id == wpId); var webPart = definition.WebPart; webPartXml = this.WrapToV3Format(webPartXml); var pcLower = pageContent.ToLower(); //TODO: refactor getting webpartId2 make separate method, probably use regex or another approach var contentBoxIndex = pcLower.IndexOf("<div id=\"contentbox\""); var indexOfIdStartIndex = contentBoxIndex != -1 ? pcLower.IndexOf(wpId.ToString().ToLower(), contentBoxIndex) : -1; var indexOfId = indexOfIdStartIndex != -1 ? pcLower.IndexOf("webpartid2", indexOfIdStartIndex) : -1; var wpExportId = definition.Id; var wpControlId = GetWebPartControlId(webPartXml); if (indexOfId != -1 && string.IsNullOrEmpty(wpControlId)) { var wpId2 = pageContent.Substring(indexOfId + "webpartid2=\"".Length, 36); wpExportId = Guid.Parse(wpId2); } webPartXml = this.SetWebPartIdToXml(wpExportId, webPartXml); webPartXml = this.TokenizeWebPartXml(webPartXml, parser); var entity = new ModelWebPart { Contents = webPartXml, Order = (uint)webPart.ZoneIndex, Zone = zone, Title = webPart.Title }; result.Add(entity); } return result; }
public void CanAddWebPartsToForms() { var template = new ProvisioningTemplate(); FileSystemConnector connector = new FileSystemConnector(resourceFolder + @"\..", ""); template.Connector = connector; var webPart = new WebPart { Column = 1, Row = 1, Contents = webpartcontents, Title = "Script Editor", Order = 0, Zone = "Main" }; var myfile = new Core.Framework.Provisioning.Model.File() { Overwrite = false, Src = "EditForm.aspx", Folder = "SitePages/Forms" }; myfile.WebParts.Add(webPart); template.Files.Add(myfile); using (var ctx = TestCommon.CreateClientContext()) { var parser = new TokenParser(ctx.Web, template); new ObjectFiles().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); ctx.Web.EnsureProperties(w => w.ServerRelativeUrl); var file = ctx.Web.GetFileByServerRelativeUrl( UrlUtility.Combine(ctx.Web.ServerRelativeUrl, UrlUtility.Combine("SitePages/Forms", "EditForm.aspx"))); ctx.Load(file, f => f.Exists); ctx.ExecuteQueryRetry(); // first of all do we even find the form ? Assert.IsTrue(file.Exists); var webParts = file.GetLimitedWebPartManager(PersonalizationScope.Shared).WebParts; ctx.Load(webParts, wp => wp.IncludeWithDefaultProperties(w=>w.Id, w=>w.WebPart, w=>w.WebPart.Title)); ctx.ExecuteQueryRetry(); var webPartsArray = webParts.ToArray(); var webPartExists = false; foreach (var webPartDefinition in webPartsArray) { if (webPartDefinition.WebPart.Title == "Script Editor") { webPartExists = true; // cleanup after ourselves if we can find the webpart... webPartDefinition.DeleteWebPart(); } } ctx.ExecuteQueryRetry(); Assert.IsTrue(webPartExists); } }
private ProvisioningTemplate GetFileContents(Web web, ProvisioningTemplate template, string pageFullUrl, ProvisioningTemplateCreationInformation creationInfo, string pageUrl) { try { var fullUri = new Uri(UrlUtility.Combine(web.Url, pageUrl)); var folderPath = fullUri.Segments.Take(fullUri.Segments.Count() - 1) .ToArray() .Aggregate((i, x) => i + x) .TrimEnd('/'); var fileName = fullUri.Segments[fullUri.Segments.Count() - 1]; var webParts = web.GetWebParts(pageFullUrl); var file = web.GetFileByServerRelativeUrl(pageFullUrl); var homeFile = new OfficeDevPnP.Core.Framework.Provisioning.Model.File() { Folder = Tokenize(folderPath, web.Url), Src = fileName, Overwrite = true, }; // Add field values to file RetrieveFieldValues(web, file, homeFile); // Add WebParts to file foreach (var webPart in webParts) { var webPartxml = TokenizeWebPartXml(web, web.GetWebPartXml(webPart.Id, pageFullUrl)); OfficeDevPnP.Core.Framework.Provisioning.Model.WebPart newWp = new OfficeDevPnP.Core.Framework. Provisioning.Model.WebPart() { Title = webPart.WebPart.Title, Row = (uint)webPart.WebPart.ZoneIndex, Order = (uint)webPart.WebPart.ZoneIndex, Contents = webPartxml }; #if !SP2016 // As long as we've no CSOM library that has the ZoneID we can't use the version check as things don't compile... if (web.Context.HasMinimalServerLibraryVersion(Constants.MINIMUMZONEIDREQUIREDSERVERVERSION)) { newWp.Zone = webPart.ZoneId; } #endif homeFile.WebParts.Add(newWp); } template.Files.Add(homeFile); // Persist file using connector if (creationInfo.PersistBrandingFiles) { PersistFile(web, creationInfo, folderPath, fileName); } return(template); } catch (Exception ex) { throw ex; } }
private WebPartDefinition AddWebPart(Web web, WebPart webPart, File pageFile) { LimitedWebPartManager limitedWebPartManager = pageFile.GetLimitedWebPartManager(PersonalizationScope.Shared); WebPartDefinition oWebPartDefinition = limitedWebPartManager.ImportWebPart(webPart.Contents); WebPartDefinition wpdNew = limitedWebPartManager.AddWebPart(oWebPartDefinition.WebPart, webPart.Zone, (int)webPart.Order); web.Context.Load(wpdNew, x => x.Id); web.Context.ExecuteQueryRetry(); return wpdNew; }