public SPOWebPartDefinition AddWebPartToWebPartPage(string webPartXml, string zone, int index, string title) { LimitedWebPartManager limitedWebPartManager = File.GetLimitedWebPartManager(PersonalizationScope.Shared); WebPartDefinition webPartDefinition = limitedWebPartManager.ImportWebPart(webPartXml); var wpd = limitedWebPartManager.AddWebPart(webPartDefinition.WebPart, zone, index); File.Context.Load(wpd, w => w.Id, w => w.WebPart); File.Context.ExecuteQuery(); var spowpd = new SPOWebPartDefinition(wpd); if (spowpd.WebPart.Title != title) { spowpd.WebPart.Title = title; spowpd.SaveWebPartChanges(); } return(spowpd); }
public SPOWebPartDefinition AddWebPartToWikiPage(string webPartXml, string title, int row, int col, bool addSpace) { string wikiField = (string)ListItemAllFields["WikiField"]; XmlDocument xd = new XmlDocument(); xd.PreserveWhitespace = true; xd.LoadXml(wikiField); // Sometimes the wikifield content seems to be surrounded by an additional div? XmlElement layoutsTable = xd.SelectSingleNode("div/div/table") as XmlElement; if (layoutsTable == null) { layoutsTable = xd.SelectSingleNode("div/table") as XmlElement; } XmlElement layoutsZoneInner = layoutsTable.SelectSingleNode(string.Format("tbody/tr[{0}]/td[{1}]/div/div", row, col)) as XmlElement; if (layoutsZoneInner == null) { throw new ArgumentException("Unable to locate row and/or column to insert HTML into."); } LimitedWebPartManager limitedWebPartManager = File.GetLimitedWebPartManager(PersonalizationScope.Shared); WebPartDefinition webPartDefinition = limitedWebPartManager.ImportWebPart(webPartXml); var wpdNew = limitedWebPartManager.AddWebPart(webPartDefinition.WebPart, "wpz", 0); File.Context.Load(wpdNew, w => w.Id, w => w.WebPart); File.Context.ExecuteQuery(); // - space element XmlElement space = xd.CreateElement("p"); XmlText text = xd.CreateTextNode(" "); space.AppendChild(text); // - wpBoxDiv XmlElement wpBoxDiv = xd.CreateElement("div"); layoutsZoneInner.AppendChild(wpBoxDiv); if (addSpace) { layoutsZoneInner.AppendChild(space); } XmlAttribute attribute = xd.CreateAttribute("class"); wpBoxDiv.Attributes.Append(attribute); attribute.Value = "ms-rtestate-read ms-rte-wpbox"; attribute = xd.CreateAttribute("contentEditable"); wpBoxDiv.Attributes.Append(attribute); attribute.Value = "false"; // - div1 XmlElement div1 = xd.CreateElement("div"); wpBoxDiv.AppendChild(div1); div1.IsEmpty = false; attribute = xd.CreateAttribute("class"); div1.Attributes.Append(attribute); attribute.Value = "ms-rtestate-read " + wpdNew.Id.ToString("D"); attribute = xd.CreateAttribute("id"); div1.Attributes.Append(attribute); attribute.Value = "div_" + wpdNew.Id.ToString("D"); // - div2 XmlElement div2 = xd.CreateElement("div"); wpBoxDiv.AppendChild(div2); div2.IsEmpty = false; attribute = xd.CreateAttribute("style"); div2.Attributes.Append(attribute); attribute.Value = "display:none"; attribute = xd.CreateAttribute("id"); div2.Attributes.Append(attribute); attribute.Value = "vid_" + wpdNew.Id.ToString("D"); var listItem = ListItemAllFields; listItem["WikiField"] = xd.OuterXml; listItem.Update(); var spowpd = new SPOWebPartDefinition(wpdNew); if (spowpd.WebPart.Title != title) { spowpd.WebPart.Title = title; spowpd.SaveWebPartChanges(); } return(spowpd); }