Pregunta

Tengo una página de aplicación de SharePoint personalizada implementada en la carpeta _layouts.Es un "nuevo formulario" personalizado para un tipo de contenido personalizado.Durante mis interacciones con esta página, necesitaré agregar un elemento a mi lista.Cuando la página se carga por primera vez, puedo usar SPContext.Current.List para ver la lista actual con la que estoy trabajando.Pero después de completar mi formulario y el formulario vuelve a publicarse sobre sí mismo y IsPostBack es verdadero, entonces SPContext.Current.List es nulo, por lo que no puedo encontrar la lista a la que necesito agregar mis cosas.

¿Se espera esto?

¿Cómo debo conservar información sobre mi lista de contexto en la devolución de datos?¿Debería simplemente completar algún control asp:hidden con el guid de mi lista y luego simplemente retirarlo de allí en la devolución de datos?Eso parece seguro, supongo.

FWIW, esta es la versión estándar de MOSS 2007.

¿Fue útil?

Solución

En términos generales, intento copiar cualquier enfoque que haya adoptado el grupo de productos cuando busco agregar mi propia funcionalidad.En este caso, agregan sus propias páginas de edición/ver/agregar a través de la definición de la lista.

Creé una solución que también necesitaba su propio formulario "Nuevo" personalizado, desafortunadamente no es de código abierto, aunque si está interesado puede descargarlo, se llama "Enlaces etiquetados" (marcadores sociales para SharePoint) y puede encontrar algunos enlaces en mi Blog.

Para darle algunos consejos y sugerencias, lo siguiente debería orientarlo en la dirección correcta:

  1. Creó una nueva definición de lista.
  2. Creó un nuevo tipo de contenido En el tipo de contenido, puede definir sus propias "Plantillas de formulario" que hacen referencia a una Plantilla de representación que determina lo que se muestra en el bit "Medio" de esos formularios.
  3. Copió la plantilla de renderizado estándar, pero luego realizó los cambios que necesitaba.
  4. Lo envolví todo en una solución y lo implementé.

Mi plantilla de renderizado en realidad incluía un botón "Guardar" anulado donde hice gran parte del trabajo adicional que necesitaba hacer durante el guardado.

De todos modos, en mi opinión es demasiado trabajo, pero creo que se acerca más al enfoque estándar adoptado por los desarrolladores de productos.Avíseme si necesita más detalles y veré si puedo preparar una publicación de blog paso a paso, pero espero que esto lo lleve en la dirección correcta.

Otros consejos

Me sorprendería que pudieras hacer algo en un archivo _Layouts que no puedes hacer en una plantilla de formularios.Tienes prácticamente las mismas tecnologías a tu disposición.

Al observar la forma en que SharePoint funciona con las páginas ListItems y Layouts (por ejemplo, "Administrar permisos" en un elemento de la lista), puedo ver que pasan algunas variables a través de cadenas de consulta:?obj={76113B3A-FABA-4389-BC85-4BB2CC5AB423},6,LISTITEM&List={76113B3A-FABA-4389-BC85-4BB2CC5AB423}

Quizás recuperan el contexto cada vez mediante programación utilizando estos valores.

No estoy usando un "nuevo formulario" personalizado, por lo que es posible que esto no se aplique.Agregué un receptor de eventos a mi tipo de contenido personalizado y luego hice mi código personalizado en los eventos ItemAdded o ItemAdding.Este código se activa cuando el evento se agrega a una lista.Puede utilizar las propiedades del receptor de eventos para acceder a la Lista, Web y Sitio principales.

Me gustaría pensar que mi problema es "especial" aquí, ya que estoy usando un formulario personalizado.Elegí usar un formulario personalizado en lugar de un FormTemplate personalizado simplemente porque estoy haciendo muchas cosas que no se parecen mucho a una lista de SharePoint (realizar llamadas ajax para obtener información de una aplicación de terceros y luego generar algunos elementos de formulario dinámicos basados ​​en ese resultado ajax, luego el procesamiento posterior de esos datos en la devolución).Pensé que sería una pesadilla probar esto dentro del mecanismo habitual de plantilla de renderizado personalizado.

Tampoco creo que pueda proporcionar las declaraciones de formulario personalizado en la definición de la lista en sí, porque tengo varios tipos de contenido asociados con esta lista y cada tipo de contenido tiene su propio formulario personalizado (afortunadamente, el otro tipo es mucho más simple).

En realidad, mi forma sencilla de mantener la lista guid en mi campo oculto fue una forma de muy bajo impacto para abordar este problema específico.Mi principal preocupación es que no estoy seguro de por qué SPContext simplemente pierde toda su utilidad cuando envío una respuesta aquí, lo que me hace pensar que estoy haciendo algo mal.

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