Pregunta

En mi situación, estoy creando páginas de elementos web con XsltListViewWebParts en ellos. Necesito fijar una vista predefinida en ellos, con la configuración de filtrado personalizado / columnas en CAML. Por lo tanto, he intentado mover el XmlDefinition poco fuera de la pieza de la tela lo que sólo puede hacer referencia a la definición adecuada.

También trató lo siguiente:

  • Guardar el XsltListViewWebPart con la configuración correcta visión como un archivo .webpart, y agregarlo a la galería de elementos Web. Esto funciona muy bien para el sitio en el que se creó la pieza, pero tan pronto como restaurarlo en otra parte; la definición se pone a cero. Tenga en cuenta que cuando la exportación; Me explícitamente elegir la opción de no usar la lista local, pero a / Listas / una lista denominada nombre relativo.

  • Cuando la programación añadir el elemento Web a la página, también es posible (con algunos hacks) para obtener la vista incrustada. Aunque es posible configurar algunas cosas aquí (como las columnas mostradas); esto no es lo ideal. Además, parece que siempre volver a ver BaseTypeId = "0" que no tiene paginación. No he encontrado ninguna opción para cambiar esto.

  • La vista predeterminada muestra (que no quiero) parecía ser la vista predeterminada de la lista en sí. Así que he intentado cambiar eso antes de agregar el elemento Web a la página, pero eso no cambia nada.

  • Por último, hay una opción llamada XmlDefinitionLink. Esto promete cargar una definición de vista personalizada de un archivo XML. Dado que es prácticamente todo lo que necesito, he intentado también. No importa cómo lo configuro, simplemente no funcionará. No entiendo los errores, pero no hay resultados tampoco. Parece que hay 0 recursos disponibles sobre cómo conseguir este trabajo, solamente un artículo de MSDN que me dice que debería ser grande (que es obvio que no lo es).

Si alguien ha reutilizado con éxito el XSLTListViewWebPart con una definición de vista personalizada, por favor, comparta sus conocimientos. No me importa escribir un montón de código o envoltura clases para llegar allí, mientras yo sé realmente lo que puedo llegar allí. Ha tomado mucho tiempo hasta ahora, sin ningún resultado.

¿Fue útil?

Solución

Yo prefiero hacer esto en código en un proveedor personalizado de aprovisionamiento (SPWebProvisioningProvider). El siguiente tipo de código debe hacer el truco:

SPWeb web = SPContext.Current.Web;
SPList list = web.GetList("/sites/thesite/doclib");
SPView view = list.Views["TheView"];

string pageUrl = PublishingWeb.GetPagesListName(web) + "/thepage.aspx";
SPFile pageFile = web.GetFile(pageUrl);
pageFile.CheckOut();            
SPLimitedWebPartManager lwpm = pageFile.GetLimitedWebPartManager(PersonalizationScope.Shared);

XsltListViewWebPart wp = new XsltListViewWebPart();
wp.ListId = list.ID;
wp.Title = "Web Part Title";
wp.ChromeType = PartChromeType.TitleOnly;
wp.ViewGuid = view.ID.ToString();
wp.XmlDefinition = view.GetViewXml();
lwpm.AddWebPart(wp, "Header", 1);

pageFile.CheckIn("", SPCheckinType.MinorCheckIn);
pageFile.Publish("");

Otros consejos

Estoy trabajando sobre la visualización de etiquetas nube de categorías mensajes en un blog. Dado que el contenido de elemento Web consulta no admite los campos LookupMulti, solía XsltListViewWebPart. Estos son los pasos:

  • añadir una vista en "schema.xml" de mensajes con un nuevo "BaseViewID"
  • conjunto "XslLink" a una copia de "blog.xsl"
  • añadir necesario "FieldRef" en "ViewFields"
  • añadir una plantilla que coincida con el "BaseViewID"
  • añadir el elemento Web cuando provisionning la página

    No se puede importar este elemento Web. true Ninguno false ]]>

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
scroll top