0

У меня есть веб-сайт публикации с MOSS 2007, и мне нужно получить программный контент. Я знаю, что я могу использовать WebClient для отправки запроса на страницу, а затем проанализировать текст ответа. Но я хочу сделать это в модели SharePoint, так как масштаб очень тихий.Как программно визуализировать DataFormWebPart?

Веб-часть, которую я хочу визуализировать, - это DataFormWebPart, и они отображаются отлично, если смотреть в браузере. Но я получаю исключения при попытке сделать их программным путем.

Код:

var partMgr = siteCollection.RootWeb.GetLimitedWebPartManager(pageUrl, PersonalizationScope.Shared); 

var sr = new StreamWriter(@"d:\temp\test.txt", false); 
var htr = new HtmlTextWriter(sr); 

foreach (WebPart part in partMgr.WebParts) 
{ 
    if (part.GetType() == new DataFormWebPart().GetType()) 
    { 
     try 
     { 
      htr.WriteLine(""); 
      part.RenderBeginTag(htr); 
      htr.WriteLine(""); 
      part.RenderControl(htr); 
      htr.WriteLine(""); 
      part.RenderEndTag(htr); 
      htr.WriteLine(""); 
     } 
     catch (Exception exc) 
     { 
      htr.WriteLine("Message: " + exc.Message); 
      htr.WriteLine("StackTrace: " + exc.StackTrace); 
      htr.WriteLine("InnerException: " + (exc.InnerException == null).ToString()); 
     } 
    } 
} 
sr.Close(); 
htr.Close(); 

Выход:

<div id="g_1722aa69_d0d7_4804_83fa_c8f4a250080a"> 
    Message: Value cannot be null. Parameter name: page 
    StackTrace: at System.Web.UI.WebControls.WebParts.WebPartManager.GetCurrentWebPartManager(Page page) 
    at Microsoft.SharePoint.WebPartPages.WebPart.Render(HtmlTextWriter writer) 
    at ExtractPageData.Program.Main(String[] args) in D:\DNR-Playground\ExtractPageData\ExtractPageData\Program.cs:line 49 
    InnerException: False 

    <div id="g_1115045e_b0d7_41ce_ad19_15aab0f3871d"> 
     Message: Value cannot be null. Parameter name: page 
     StackTrace: at System.Web.UI.WebControls.WebParts.WebPartManager.GetCurrentWebPartManager(Page page) 
    at Microsoft.SharePoint.WebPartPages.WebPart.Render(HtmlTextWriter writer) 
    at ExtractPageData.Program.Main(String[] args) in D:\DNR-Playground\ExtractPageData\ExtractPageData\Program.cs:line 49 
     InnerException: False 

Как вы можете видеть на выходе, то начинают тег визуализируется, но управление не может быть оказана за счет part.Page является null и это атрибут readonly.

ответ

0

Это не сработает. Веб-части требуют правильного SPContext, который настраивается при обработке запросов HTTP в конвейере ASP.NET. Нетрудно ответить, как его преодолеть. Вам, по существу, нужно будет симулировать HTTP-запрос на страницу, которую нужно визуализировать в памяти.


Кроме того, это выражение part.GetType() == new DataFormWebPart().GetType() далеко от идеала. Скорее используйте part.GetType() == typeof(DataFormWebPart), чтобы предотвратить создание и возможные нежелательные побочные эффекты.