> # Estructura XML

> Características están constituidas por un archivo "Feature.xml" que define sus propiedades, un numero de archivos xml que definen los elementos que forman parte de la característica y todos los otros archivos que sean necesarios para su funcionamiento, como por ejemplo paginas aspx y archivos de recursos (imágenes, configuraciones, etc.).

> El archivo "Feature.xml" define la característica y especifica la localización de ensamblados, archivos, elementos y dependencias que forman parte de ella. La estructura xml del archivo es:

>     	Feature
>     		ActivationDependencies
>     			ActivationDependency
>     		ElementManifests
>     			ElementFile
>     			ElementManifest

> Los Atributos que se pueden utilizar en la definición de la Característica se enumeran en la siguiente tabla:

> Nombre | Tipo | Descripción
> Atributos de Característica
> Id | Guid | Un identificador único
> Title | Texto | Máximo 255 caracteres con el titulo de la Característica
> Scope | Texto | Alcance de la Característica: "Site", "Web" o "Server"
> DefaultResouceFile | Texto | Opcional. Ruta relativa al archivo con los recursos
> Description | Texto | Descripción de la Característica
> Version | Versión | Versión de la Característica: 4 números delimitados por puntos
> ReceiverAssembly | Texto | Opcional. Ensamblado para manejar eventos
> ReceiverClass | Texto | Opcional. Clase que implementa el proceso de eventos
> Atributos de ActivationDependency
> FeatureId | Guid | El identificador de la Característica de la que se depende
> Title | Texto | Opcional. Titulo de la Característica de la que se depende
> Description Texto | Opcional | Descripción de la Característica de la que se depende
> Url Texto | Opcional | Dirección de una pagina con información sobre la Característica de la que se depende
> Atributos de ElementFile
> Location | Texto | Ruta relativa al archivo de la raíz del elemento
> Atributos de ElementManifest
> Location | Texto | Ruta relativa al archivo de la raíz del elemento

> Un ejemplo de una definición de Características podría tener la siguiente forma:

>     <Feature
>         Id="12345678-ABCDE-12345-ABCDE"
>         Title="Caracteristica de Prueba"
>         Description="Caracteristica que contiene Listas y algunos datos para Personalizarlas."
>         Scope="Web">
>         <InstallationDependencies>
>              <InstallationDependency
>                  Id="98765432-EDCBA-54321-EDCBA"
>                  Title="Busqueda en el Portal"
>                  Description="Caracteristica con funcionalidad de Busqueda "
>                  Url="http://www.microsoft.com/sharepoint">
>              </InstallationDependency>
>         </InstallationDependencies>
>         <PropertySchema>
>              <Fields>
>                  <Field
>                      Type="Text"
>                       Name="NombreProyecto"
>                       DisplayName="Nombre del Proyecto">
>                  </Field>
>              </Fields>
>         </PropertySchema>
>         <ElementManifests>
>              <ElementManifest Location="PruebaCaracteristica\Elementos.xml"/>
>              <ElementManifest Location="OtroArchivo\ListaPersonalizada.xml"/>
>              <ElementFile Location="prueba.aspx"/>
>         </ElementManifests>
>     </Feature>

> Esta es una Característica llamada "Característica de Prueba" que será visible a través de todo el Portal (Scope="Web"), que tiene una dependencia con otra Característica llamada "Búsqueda en el Portal" y define un nuevo campo ("Nombre del Proyecto") en la Lista que será instalada conjuntamente (definida en el archivo de Elementos "ListaPersonalizada.xml").

> El Alcance ("Scope") de la Característica indica el nivel en el que será visible y posible de aplicar. Hay tres niveles posibles:

> - "Site" (visible y utilizable solamente en un sitio)
> - "Web" (alcance de todo el Portal)
> - "Server" (alcance a lo largo de todos los sitios en todos los Portales de la granja de servidores).

>   Los archivos xml que definen los elementos ("ElementManifest") son completamente dependientes de la función que el elemento debe realizar, y por lo tanto siguen la sintaxis propia de la funcionalidad. En general se puede decir que una definición de elemento es basada en código CAML (Colaborative Application Markup Language), que es el lenguaje utilizado para definir las plantillas de SharePoint. Un ejemplo de una definición de un elemento:

>       <CustomAction
>       	Id="CaracteristicaMSDN.SiteSettings"
>       	Location="Microsoft.SharePoint.SiteSettings"
>       	GroupId="Customization"
>       	Sequence="106"
>       	Title="Vaya a mi Pagina">
>       	<UrlAction Url="~site/miPagina.aspx"/>
>       </CustomAction>

>       <Module Name="miPagina" Path="" Url="">
>       	<File Url="miPagina.aspx" IgnoreIfAlreadyExists="FALSE">
>       </Module>

>   Este elemento define un nuevo vinculo en el menú de Configuración del sitio ("SiteSettings"), que tendrá como titulo "Vaya a mi Pagina", y define la localización de la pagina aspx a donde el vinculo hará la redirección ("UrlAction"). La pagina aspx también esta definida en el archivo xml, bajo la sección "Module".

>   ## Video

>   Una demostración sobre la creación de Características desde Visual Studio, creación de los archivos necesarios, su instalación y la activación en el sitio es mostrada en el siguiente video.
>   Duración: 12:05 minutos