El monstruito no soy yo, es el SharePoint

El Blog de Luis Mañez, dedicado a tecnologías MS, principalmente SharePoint y Office 365

Office 365: Parámetros de QueryString reservados por SharePoint

Hoy os dejo un pequeño tip, de un problema que me he encontrado recientemente en SharePoint on-premise, y que me he decidido a probar en SharePoint Online, para ver si se sucede lo mismo, y, como era de esperar, sucede lo mismo.

Muy resumido, SharePoint utiliza internamente algunos parámetros de QueryString, para, por ejemplo, cargar el contexto en determinadas ocasiones. Por ejemplo, si ha cualquier página de SharePoint, le añades como QueryString el parámetro ID, y empiezas a darle valores aleatorios, seguramente más pronto que tarde, te encontrarás un pantallazo de error como el siguiente:

image

Nota: El pantallazo ya es del sitio de grupo de Office 365.

En este link de Stefan Gobner está algo más detallado, además de un listado con todos los parámetros “reservados”, y que por lo tanto no debemos utilizar en nuestros desarrollos:

http://blogs.technet.com/b/stefan_gossner/archive/2009/01/30/querystring-parameters-you-should-not-use-in-your-sharepoint-application.aspx

Copio los parámetros porque me fío más del servidor de Geeks, que de los de MS Lengua fuera

  • FeatureId
  • ListTemplate
  • List
  • ID
  • VersionNo
  • ContentTypeId
  • RootFolder
  • View
  • FolderCTID
  • Mode
  • Type
  • PageVersion
  • IsDlg
  • Title
  • _V3List_

Como buena práctica, convendría que antes de iniciar el desarrollo, el equipo fije algún tipo de “prefijo” para los parámetros a utilizar por query string.

Espero que os sirva.

Saludos!!

Posted: 15/12/2011 15:30 por Luis Mañez | con 2 comment(s)
Comparte este post:

Comentarios

Luis Ruiz Pavón ha opinado:

# December 16, 2011 1:49 PM

Luis Mañez ha opinado:

Hombre tocayo! q alegría leerte x aquí.

Pues sí, eso mismo que te pasó a ti, es por esto. De hecho, si miramos el campo Item del SPContext con Reflector, no tardamos en ver que usa el "ID" del querystring, y si no es nulo, intenta cargarlo de la lista actual (o algo asi). Pego un cacho, aunq no sé q tal se leerá (y si miramos algo más el SPContext, tampoco tardaremos en encontrarnos algunos de los otros params que están reservados). Ah, y yo, probando IDs, he llegado a mover Webparts a otra zona de webparts de la página, jajaja.

Saludos!

public SPItem Item

{

   get

   {

       if ((this.m_item == null) && (this.List != null))

       {

           bool flag = ((this.FormContext.FormMode == SPControlMode.New) || (this.m_isDesignTime && (this.ItemId == 0))) || ((this.FormContext.FormMode != SPControlMode.Invalid) && (this.ItemId == 0));

           if (this.List.HasExternalDataSource)

           {

               string str = this.m_context.Request.QueryString["ID"];

               if (!string.IsNullOrEmpty(str))

               {

                   str = SPHttpUtility.UrlKeyValueDecode(str);

                   SPListItemCollection itemcoll = this.List.GetItems(SPQuery.TrivialQueryExternalList);

                   SPListItem listItemByBdcIdentity = this.List.DataSource.GetListItemByBdcIdentity(itemcoll, str);

                   this.m_item = listItemByBdcIdentity;

               }

# December 19, 2011 12:14 AM