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 -.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top