Добавление клиентской веб-части (части приложения) на страницу sharepoint программным способом

У меня есть требование добавить клиентскую веб-часть из приложения, размещенного у поставщика, на страницу в хост-сети, на которой он развернут. Я пробовал использовать для этого Limited WebPart Manager клиентской объектной модели, но это работает только для XML-данных, которые являются частью файлов .dwp или .webpart. Я использовал приведенный ниже код. Есть ли обходной путь, чтобы получить файлы частей приложения с сайта и добавить их на страницу Sharepoint?

        ClientContext clientconteext = new ClientContext("My Server URL");
        Microsoft.SharePoint.Client.File page = clientconteext.Web.GetFileByServerRelativeUrl("/sites/MySite/SitePages/Home.aspx");

        clientconteext.Load(clientconteext.Web);
        clientconteext.Load(page);
        clientconteext.ExecuteQuery();
        LimitedWebPartManager lwp= page.GetLimitedWebPartManager(PersonalizationScope.Shared);
        string webpartxml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Elements xmlns=\"http://schemas.microsoft.com/sharepoint/\"><WebPartPages:ClientWebPart runat=\"server\" FeatureId=\"5b1a14dd-8dbe-4963-8612-e7918e7fbc9a\" ProductWebId=\"5b1a14dd-8dbe-4963-8612-e7918e7fbc9a\" WebPartName=\"HomePageAppPart\" Title=\"Home App Part\" Description=\"WebPart Description\" WebPart=\"true\"></WebPartPages:ClientWebPart></Elements>";
        WebPartDefinition wpd = lwp.ImportWebPart(webpartxml);
        lwp.AddWebPart(wpd.WebPart, "Right", 1);
        clientconteext.ExecuteQuery();

person RAHUL    schedule 17.11.2014    source источник


Ответы (1)


Вот шаги, которые вам нужно сделать.

  1. Вам нужно добавить часть своего приложения на любую страницу из браузера
  2. На панели «Свойства веб-части» разверните раздел «Дополнительно», установите для режима экспорта значение «Экспортировать все данные» и нажмите «ОК».

  1. В части приложения щелкните стрелку раскрывающегося списка рядом с заголовком веб-части, а затем выберите «Экспорт».

  1. Скопируйте файл .webpart в проект (например, папка шаблонов).
  2. Добавьте эти методы, чтобы создать страницу публикации и добавить на нее часть приложения.

    /// <summary>
    /// Create a Publising Page
    /// </summary>
    /// <param name="clientContext">Client context</param>
    /// <param name="pageName">Page Name</param>
    /// <param name="pagelayoutname">Page Layout Name</param>
    public static File CreatePublishingPage(ClientContext clientContext, string pageName, string pagelayoutname)
    {
        var publishingPageName = pageName + ".aspx";
    
        Web web = clientContext.Web;
        clientContext.Load(web);
    
        List pages = web.GetListByUrl("/Pages/");
        clientContext.Load(pages.RootFolder, f => f.ServerRelativeUrl);
        clientContext.ExecuteQuery();
    
        Microsoft.SharePoint.Client.File file =
            web.GetFileByServerRelativeUrl(pages.RootFolder.ServerRelativeUrl + "/" + pageName + ".aspx");
        clientContext.Load(file, f => f.Exists);
        clientContext.ExecuteQuery();
        if (file.Exists)
        {
            file.DeleteObject();
            clientContext.ExecuteQuery();
        }
        PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(clientContext, web);
        clientContext.Load(publishingWeb);
    
        if (publishingWeb != null)
        {
            List publishingLayouts = clientContext.Site.RootWeb.GetListByUrl("/_catalogs/masterpage/");
    
            ListItemCollection allItems = publishingLayouts.GetItems(CamlQuery.CreateAllItemsQuery());
            clientContext.Load(allItems, items => items.Include(item => item.DisplayName).Where(obj => obj.DisplayName == pagelayoutname));
            clientContext.ExecuteQuery();
    
            ListItem layout = allItems.Where(x => x.DisplayName == pagelayoutname).FirstOrDefault();
            clientContext.Load(layout);
    
            PublishingPageInformation publishingpageInfo = new PublishingPageInformation()
            {
                Name = publishingPageName,
                PageLayoutListItem = layout,
            };
    
            PublishingPage publishingPage = publishingWeb.AddPublishingPage(publishingpageInfo);
            publishingPage.ListItem.File.CheckIn(string.Empty, CheckinType.MajorCheckIn);
            publishingPage.ListItem.File.Publish(string.Empty);
            clientContext.Load(publishingPage);
            clientContext.ExecuteQuery();
            return publishingPage.ListItem.File;
        }
        return null;
    }
    
    /// <summary>
    /// Adds the Web Part to the page
    /// </summary>
    /// <param name="clientContext">Client Context</param>
    /// <param name="newWeb">New Web</param>
    public static void AddWebpartToWebPartPage(ClientContext clientContext, File file)
    {
        file.CheckOut();
    
        //Get webparts xml
        string webpart = System.IO.File.ReadAllText(System.Web.Hosting.HostingEnvironment.MapPath(string.Format("~/{0}", "Template/RegistroDeSolicitudes.webpart")));
    
        // Requires Full Control permissions on the Web
        LimitedWebPartManager wpmgr = file.GetLimitedWebPartManager(PersonalizationScope.Shared);
        WebPartDefinition wpd = wpmgr.ImportWebPart(webpart);
        wpmgr.AddWebPart(wpd.WebPart, "Header", 0);
        file.CheckIn(String.Empty, CheckinType.MajorCheckIn);
        file.Publish(string.Empty);
        clientContext.ExecuteQuery();
    }
    

И вызовем методы:

Microsoft.SharePoint.Client.File publishingPage = Helpers.CreatePublishingPage(cc, "Solicitudes", "BlankWebPartPage");
Helpers.AddRegistroDeSolicitudesWebpartToWebPartPage(cc, publishingPage);
person Sebastián A    schedule 15.04.2015