Cómo representar mediante programación DataFormWebPart?
-
27-10-2019 - |
Pregunta
Tengo una publicación en la página web de construir con MOSS 2007 y necesito sacar el contenido de la página mediante programación.Sé que se puede utilizar WebClient para envió una solicitud a la página y, a continuación, analizar el texto de respuesta.Pero quiero hacerlo en SharePoint modelo ya que la escala es tranquilo grandes.
La web parta quiero render son DataFormWebPart y pantalla bien si se visualiza en un navegador.Pero me estoy poniendo las excepciones al intentar representar mediante programación.
El código:
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();
El resultado:
<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
Como se puede ver en la salida, el comienzo de la etiqueta se representa, pero el control no pueden ser prestados debido a part.Page
es null
y es un atributo de sólo lectura -.
Solución
Esto simplemente no funciona.Web de piezas que requieren de SPContext
que es la instalación durante la petición HTTP en el manejo de los ASP.NET pipeline.No existe una respuesta fácil cómo superarlo.A usted le tienen esencialmente para simular una solicitud HTTP a la página que usted necesita para el procesamiento en memoria.
Además, esta expresión part.GetType() == new DataFormWebPart().GetType()
está lejos de ser ideal.En lugar de utilizar part.GetType() == typeof(DataFormWebPart)
para evitar la creación de instancias y de los posibles efectos secundarios no deseados.