Reglas de generación de código SPMetal predeterminado
Última modificación: lunes, 28 de marzo de 2011
Hace referencia a: SharePoint Foundation 2010
En este artículo
Clase que representa el sitio web
Propiedades que representan listas
Clases que representan tipos de contenido
Propiedades que representan columnas de lista
Enumeraciones y clases que representan las opciones de un campo de una o varias opciones
Campos EntityRef<T>, EntitySet<T> y LookupList<T> que representan relaciones entre listas de búsqueda
En este tema se especifican las reglas predeterminadas que sigue SPMetal cuando genera código. Parte de este comportamiento se puede cambiar creando un archivo de parámetros de SPMetal y agregando una opción /parameters a la línea de comandos de SPMetal. Para obtener más información acerca de este tipo de personalización, vea Invalidación de valores predeterminados de SPMetal con un archivo XML de parámetros y SPMetal.
En las siguientes secciones, las reglas que están marcadas con asterisco (*) no se pueden invalidar.
Todas las reglas que se pueden invalidar aparecen seguidas de una indicación del marcado XML que las invalida.
Clase que representa el sitio web
*Se genera una clase que procede de la clase DataContext para representar los datos del sitio web como un todo.
*La clase está marcada como partial (Partial en Microsoft Visual Basic).
La clase está marcada como public (Public en Visual Basic). (Invalide con el atributo AccessModifier del elemento <Web>).
La clase se denomina nombreDeArchivoDataContext, donde nombreDeArchivo es el nombre del archivo (exclusivo de la extensión de nombre de archivo) que la opción /code especifica en la línea de comandos de SPMetal. Por ejemplo, si "/code:Personnel.vb" está en la línea de comandos, la clase se denomina PersonnelDataContext. (Invalide con el atributo Class del elemento <Web>).
Propiedades que representan listas
Se genera una propiedad (en la clase derivada de DataContext) para todas las listas no ocultas en el sitio web. (Invalide con los elementos <ExcludeList> o <ExcludeOtherLists>).
*El tipo de la propiedad es EntityList<TEntity>.
*La propiedad está marcada como public (Public en Visual Basic).
No se genera ninguna propiedad para las listas ocultas. (Invalide con un elemento <IncludeHiddenLists> o un elemento <List> cuyo atributo Name esté asignado a una lista oculta).
Una propiedad que representa una lista tiene el mismo nombre que la lista, con las siguientes excepciones:
Si hay espacios en el nombre de la lista, se quitan del nombre de la propiedad.
Si la primera letra del nombre de la lista está en minúsculas, se pasa a mayúsculas en el nombre de la propiedad.
Nombre de lista
Nombre de propiedad
Announcements
Announcements
Team Members
TeamMembers
lentils
Lentils
(Invalide con el atributo Member del elemento <List>).
TEntity, el parámetro de tipo de la propiedad EntityList<TEntity> es la clase de tipo de contenido que se genera para la lista. Vea Clases que representan tipos de contenido más adelante en este artículo. En general, si hay más de un tipo de contenido asociado a la lista, TEntity es el tipo de contenido de común denominador. A menudo, la clase de común denominador es simplemente el tipo de contenido básico Item de Microsoft SharePoint Foundation. (Invalide con el atributo Type del elemento <List>).
Importante Hay una sola excepción a la regla habitual según la cual se usa un tipo de contenido de común denominador cuando la lista tiene más de un tipo de contenido. SharePoint Foundation agrega un tipo de contenido básico Folder a todas las listas (además del tipo de contenido básico Item). No obstante, de manera predeterminada, SPMetal no cuenta el tipo de contenido básico Folder a la hora de determinar si las listas tienen más de un tipo de contenido. Por lo tanto, si el tipo de contenido Folder es el único tipo de contenido adicional, el TEntity de la propiedad EntityList<TEntity> será el tipo de contenido absolutamente específico para la lista, como Announcement para la lista Announcements y CalendarEvent para la lista Calendar. Este comportamiento predeterminado se puede invalidar.
Clases que representan tipos de contenido
Se genera una clase de tipo de contenido para representar el tipo de contenido básico Item de SharePoint Foundation. (Invalide con un elemento <ExcludeContentType> para el tipo de contenido y para cada clase de tipo de contenido que proceda de él).
Para las listas (que no se han excluido de la generación de código) se genera una clase de tipo de contenido por cada tipo de contenido definido asignado a la lista. (Invalide con los elementos <ExcludeContentType> o <ExcludeOtherContentTypes>).
Para los tipos de contenido definidos, incluido el tipo de contenido básico Item, la clase generada tiene el mismo nombre que el tipo de contenido. (Invalide con el atributo Class de un elemento <ContentType>).
*Para las listas que no usan un tipo de contenido definido (y que no se han excluido de la generación de código), pero que tienen una o más columnas agregadas, se genera una clase para representar el tipo de contenido implícito.
La clase que representa un tipo de contenido implícito se denomina ProcessedListNameBaseContentType, donde ProcessedListName es el mismo nombre que se genera para la propiedad que representa la lista (vea la sección Propiedades que representan listas arriba). BaseContentType es el nombre del tipo de contenido definido del cual deriva el tipo de contenido implícito. Este suele ser "Item", pero en algunos casos es el nombre de algún otro tipo de contenido definido. Por ejemplo, si el tipo de contenido definido Issue se agrega a la lista denominada Tasks y, a continuación, se elimina de la lista una columna de ese tipo de contenido, la clase que representa este nuevo tipo de contenido implícito se denominará TasksIssue. (Invalide con el atributo Class de un elemento <ContentType>).
Importante El tipo de contenido implícito todavía no tiene nombre cuando se lee el archivo parameter.xml, por lo que no se puede usar "ProcessedListNameBaseContentType" como valor de un atributo de algún elemento en el archivo parameters.xml. Por ejemplo, no puede hacer que SPMetal defina la propiedad EntityList<TEntity><T> que representa una lista Team Members como EntityList<TeamMembersItem> (donde TeamMembersList es el tipo de contenido implícito de la lista) creando un elemento <List> para la lista y estableciendo su parámetro Type en "TeamMembersItem". Esto produciría un error de SPMetal porque aún no ha generado el nombre "TeamMembersItem" en el momento de leer el archivo XML de parámetros. Si necesita tratar los miembros de una lista como objetos del tipo implícito, puede usar el método Cast<TResult>(IQueryable) en la llamada a GetList<T>(String) y hacer que devuelva un tipo anónimo, por ejemplo, var teamMembers = teamWebSite.GetList<Item>("TeamMembers").Cast<TeamMembersItem>();.
*Si un tipo de contenido procede de otro tipo de contenido, la clase generada que representa al primero procederá de la clase que representa al segundo.
*Las clases de tipo de contenido se marcan como partial (Partial en Visual Basic).
Las clases de tipo de contenido están marcadas como public (Public en Visual Basic). (Invalide con el atributo AccessModifier de un elemento <ContentType>).
No se genera ninguna clase para los tipos de contenido ocultos. (Invalide con un elemento <IncludeHiddenContentTypes> o un elemento <ContentType> cuyo atributo Name esté asignado a un tipo de contenido oculto).
*La clase que representa el tipo de contenido básico Item implementa ITrackEntityState, ITrackOriginalValues, INotifyPropertyChanged y INotifyPropertyChanging.
Propiedades que representan columnas de lista
Se genera una propiedad (en una clase de tipo de contenido) por cada campo no oculto (columna) en el tipo de contenido. (Invalide con los elementos <ExcludeColumn> o <ExcludeOtherColumns>).
*La propiedad está marcada como public (Public en Visual Basic).
La propiedad tiene el mismo nombre que la columna que representa. (Invalide con el atributo Member de un elemento <Column>).
*Los espacios en el nombre de columna se eliminan.
*Si la primera palabra del nombre de columna está en minúsculas, se pasa a mayúsculas en el nombre de la propiedad.
El tipo de una propiedad de columna se determina a partir de la propiedad del campo de acuerdo con la asignación presentada en Asignación de tipo: Desde proveedor LINQ a SharePoint hasta .NET. (Invalide con el atributo Type de un elemento <Column>).
No se genera ninguna propiedad para las columnas que están en la lista, pero que no están en el tipo de contenido. (Invalide con el atributo Name de un elemento <Column>).
No se genera ninguna propiedad para las columnas ocultas, a excepción de las columnas ocultas "Id" y "Version". (Invalide con el elemento <IncludeHiddenColumns>).
Enumeraciones y clases que representan las opciones de un campo de una o varias opciones
Para cada campo de opción que no permite rellenar, se genera una clase enumerada. (Invalide con el atributo Type de un elemento <Column>).
Para cada campo de varias opciones que no permite rellenar y que tiene menos de 31 opciones, se genera una clase enumerada decorada con el atributo [Flags]. (Invalide con el atributo Type de un elemento <Column>).
*"Invalid" y "None" se agregan como posibles valores a las enumeraciones, en las dos.
*Para cada campo de opción o de varias opciones que sí permite rellenar, se genera una clase sellada con una constante String para cada valor definido.
Campos EntityRef<T>, EntitySet<T> y LookupList<T> que representan relaciones entre listas de búsqueda
*Para cada columna que es una búsqueda de un campo en otra lista y que no permite valores múltiples, la propiedad que representa la columna ajusta un campo privado de tipo EntityRef<TEntity>, donde TEntity es el tipo de contenido de la lista de búsqueda.
*Para cada columna que es una búsqueda de un campo en otra lista, que sí permiten valores múltiples y que busca una lista representada por código generado por SPMetal, la propiedad que representa la columna ajusta un campo privado de tipo EntitySet<TEntity>, donde TEntity es el tipo de contenido de la lista de búsqueda.
*Para cada columna que es una búsqueda de un campo en otra lista, que sí permite valores múltiples y que busca una lista no representada por código generado por SPMetal (como una lista de destino oculta o excluida de la generación de código por el archivo de configuración de SPMetal), se generan dos campos LookupList<T> privados. Uno contiene los valores actuales del campo de búsqueda (que son un subconjunto de la columna de destino), mientras que el otro incluye los identificadores de los elementos de lista de los que se toman los valores actuales. Una propiedad pública de tipo IList<T> ajusta estos dos campos privados.
Vea también
Referencia
Microsoft.SharePoint.Linq.CodeGeneration
Conceptos
Asignación de tipo: Desde proveedor LINQ a SharePoint hasta .NET
Invalidación de valores predeterminados de SPMetal con un archivo XML de parámetros