Si encuentras algún error en tu código o proyecto, recuerda probar siempre en un entorno de testing antes aplicar el código al proyecto final.
Solución:
La respuesta simplificada (Anders y Jaap son más inteligentes que yo) es esta:
Cuando crea una columna en una lista, tanto DisplayName como StaticName se establecen en el mismo valor. Sin embargo, StaticName contiene valores convertidos para algunos caracteres, en particular, un espacio ‘ ‘ se convierte en '_x0020_'
. Entonces, si DisplayName es ‘Descripción del producto’, StaticName será 'Product_x0020_Description'
.
Hay otro pequeño bugaboo: el StaticName está limitado a 32 caracteres incluyendo las traducciones de caracteres especiales. Debido a esto, si tiene más de una columna con los mismos primeros 20 caracteres, SharePoint crea StaticNames de la siguiente manera:
'Product Desciption 1' ---> Product_x0020_Description_x0020_
'Product Desciption 2' ---> Product_x0020_Description_x0020_0
'Product Desciption 3' ---> Product_x0020_Description_x0020_1
etc
Claramente, esta nueva numeración también puede ser confusa, por lo que muchas personas crearán sus columnas sin espacios en los nombres (ProductDescription1) y luego cambiarán el DisplayName.
El truco más fácil para ver qué es el StaticName (para mí), ir a Configuración de la lista y luego hacer clic en el nombre de la columna que le interesa. En la página Cambiar columna, la URL terminará en algo como:
/_layouts/FldEdit.aspx?List=%7B37920121%2D19B2%2D4C77%2D92FF%2D8B3E07853114%7D&Campo=Producto%5Fx0020%5FDescripción
StaticName es el valor del parámetro Field en QueryString. Sin embargo, hay más codificación con la que lidiar: los guiones bajos ('_'
) se convierten en ‘%5f’. Entonces Product%5Fx0020%5FDescription
medio Product_x0020_Description
otra vez.
Cada vez que cambia el DisplayName, el StaticName permanece, bueno, static. Esto a menudo da como resultado DisplayNames y StaticNames que no tienen nada que ver entre sí, por lo que mientras crea prototipos, es una buena práctica eliminar columnas y volver a agregarlas si está cambiando su propósito y, por lo tanto, su nombre.
¡Creo que esto se ha convertido en una publicación de blog para mí! (ACTUALIZACIÓN 2009-12-14: De hecho, publiqué una versión editada de esto en mi blog, y los comentarios y la discusión han sido interesantes).
METRO.
Puede usar el Administrador de SharePoint para inspeccionar las propiedades de los campos existentes, incluido el InternalName
En realidad, hay tres cadenas involucradas, como se puede ver fácilmente en el examen del modelo de objetos (o el uso de SharePointExplorer).
-
Nombre para mostrar/Título
-
StaticName
-
InternalName
El StaticName de la columna del sitio se puede actualizar cambiándolo en la característica (“StaticName” attribute) y redespliegue. Luego, si el receptor de funciones obtiene el SPSite.SPField y llama a Actualizar, eso actualizará el StaticName de todas las instancias de la lista.
El InternalName de la columna del sitio se puede actualizar cambiándolo en la función (“Nombre” attribute) y redespliegue.
Sin embargo, la columna del sitio InternalName no se propaga a las instancias de la lista a través de SPField.Update y AFAICT, no se puede cambiar, actualizar ni reparar en absoluto.
Tal vez sea posible jugando con las filas subyacentes en la base de datos, pero eso obviamente no es compatible.