Trabajar con tipos de datos complejos

Última modificación: viernes, 16 de abril de 2010

Hace referencia a: SharePoint Server 2010

En este artículo
Información general sobre los tipos complejos en BCS
Formato complejo en los tipos de contenido externo de BCS mediante el formato de cadena
Capa de servicio compatible con SharePoint
Ensamblados de conectividad .NET
Ampliación del sistema de tipos de lista externa mediante tipos de campos personalizados
Personalización de formularios de lista de SharePoint
Personalización de formularios de InfoPath

Al usar Servicios de conectividad empresarial (BCS) de Microsoft, puede mostrar tipos de datos complejos en las listas externas de distintas maneras. Los tipos complejos son tipos de datos que contienen otros subtipos, como una dirección compuesta por los campos de calle, ciudad, estado y código postal. Aunque el esquema de tipos de contenido externo admite los tipos complejos, éstos no se muestran de forma predeterminada en la capa de presentación de Microsoft SharePoint 2010 y Microsoft Office 2010. Por este motivo, deberá llevar a cabo algunos pasos más para habilitar la visualización de estos tipos complejos. En este tema se proporciona información general sobre los tipos complejos en Servicios de conectividad empresarial y se ofrecen diversas soluciones para que se muestren en la interfaz de usuario.

Información general sobre los tipos complejos en BCS

Los datos en los sistemas externos suelen exponerse a través de servicios web pormenorizados con estructuras de mensaje complejas. Si bien el esquema de tipos de contenido externo admite las estructuras de datos de parámetros de prácticamente cualquier grado de complejidad, los tipos complejos pueden generar incompatibilidades con las tecnologías de presentación de SharePoint y Microsoft Office.

Los tipos de contenido externo definen operaciones estereotipo, muchas de las cuales requieren una estructura de parámetros técnicamente compleja. Un buscador específico (también conocido como elemento de lectura en SharePoint Designer) debe devolver un solo tipo complejo que contenga el conjunto de campos de un tipo de contenido externo, por ejemplo, un tipo "Customer" con los campos "CustomerID", "Name" y "PhoneNumber". Los elementos secundarios de esta estructura se asignan a las columnas de una lista externa. La mayor parte de los tipos de contenido externo contiene un método de búsqueda que devuelve una colección del mismo tipo que el buscador específico. Los problemas surgen cuando uno de los campos contiene elementos secundarios o cuando un campo es de un tipo que no es compatible con las tecnologías de presentación; por ejemplo, cuando se agrega un campo "CustomerAddress" a la estructura del cliente que, a su vez, contiene elementos secundarios que definen aspectos como "calle", "ciudad", "estado" y "código postal".

Uno de los principales componentes de la interfaz de usuario para mostrar los datos externos en SharePoint es la lista externa. Por diseño, una lista externa es una representación de datos plana basada en filas. Sin el trabajo adicional de un desarrollador, los tipos complejos y los tipos simples que no son compatibles con el sistema de tipos de listas de SharePoint se omiten de la vista de lista.

El esquema de tipo de contenido externo de Servicios de conectividad empresarial admite el concepto de formato complejo en escenarios de solo lectura si el tipo complejo se puede convertir en una cadena simple mediante una cadena de formato Microsoft .NET Framework (vea Formato complejo en los tipos de contenido externo de BCS mediante el formato de cadena más adelante en este tema). Si la compatibilidad de solo lectura no es suficiente o si el tipo complejo no se puede convertir con este método, SharePoint 2010 ofrece la posibilidad de crear tipos de campos personalizados que otorguen control sobre el comportamiento de edición y representación en las listas externas y los formularios de elementos de lista.

Los formularios son la interfaz de usuario principal de los elementos de lista externa. Los tipos complejos suponen un desafío a la hora de generar formularios, ya que es difícil diseñarlos automáticamente y, al mismo tiempo, mantener un nivel mínimo de atractivo visual. Las listas externas se pueden asociar con formularios de lista de SharePoint (basados en ASP.NET) o formularios de Microsoft InfoPath 2010. Las secciones Personalización de formularios de lista de SharePoint y Personalización de formularios de InfoPath de este tema describen la forma de mostrar tipos complejos en estos formularios.

Formato complejo en los tipos de contenido externo de BCS mediante el formato de cadena

En los escenarios donde el tipo complejo es de solo lectura en la lista externa y se puede convertir en una cadena, Servicios de conectividad empresarial admite el concepto de una cadena de formato en el descriptor de tipos para representar el tipo complejo como una cadena en una lista externa o un formulario de elementos. A continuación se muestra un ejemplo del uso del formato de cadena para convertir el tipo complejo Customer mencionado anteriormente.

<TypeDescriptor TypeName="CustomerAddress" IsCollection="false" Name="CustomerAddresses" > 
   <TypeDescriptors> 
      <TypeDescriptor TypeName=" CustomerAddress " Name="CustomerAddress" > 
         <Properties> 
            <Property Name="ComplexFormatting" Type="System.String" /> 
            <Property Name="FormatString" Type="System.String">{0}, {1}, {2} {3}</Property> 
         </Properties> 
         <TypeDescriptors> 
            <TypeDescriptor TypeName="System.String" Name="Street"/> 
            <TypeDescriptor TypeName="System.String" Name="City" /> 
            <TypeDescriptor TypeName="System.String" Name="StateProvince" /> 
            <TypeDescriptor TypeName="System.String" Name="PostalCode" /> 
         </TypeDescriptors> 
     </TypeDescriptor> 
   </TypeDescriptors> 
</TypeDescriptor>

Capa de servicio compatible con SharePoint

En relación con la arquitectura, el mejor enfoque para trabajar con un tipo de datos complejo es crear una capa de servicio con una estructura de parámetros plana que exista dentro de las limitaciones de las capas de presentación. Continuando con el ejemplo de la sección anterior, si el servicio web devuelve todos los campos que representan a los clientes en el mismo nivel, SharePoint puede representar y editar los elementos de cliente sin ninguna modificación.

Sin embargo, es necesario ponderar este enfoque y la sobrecarga que supone la escritura, hospedaje y mantenimiento de los códigos personalizados en relación con la sobrecarga que se deriva de administrar los tipos complejos en las capas de presentación para cada aplicación mediante un servicio complejo. En muchas implementaciones empresariales ya existe una capa de servicio, especialmente para las entidades empresariales como Customer o Product, que se usan en muchas aplicaciones de forma profusa. El costo que implica agregar métodos para su uso con SharePoint 2010 puede ser menor que el costo que conlleva administrar la complejidad de tipos en cada aplicación.

Ensamblados de conectividad .NET

Si no es posible agregar o ampliar una capa de servicio, SharePoint 2010 proporciona una forma de empaquetar la definición del tipo de contenido externo con una clase que engloba la lógica de negocios que hay tras una operación de tipo de contenido externo. Puede definir la interfaz plana del tipo de contenido externo con Business Data Connectivity Designer de Visual Studio 2010 e implementar cualquier lógica de conversión de tipos y agregación necesaria en los códigos auxiliares que la herramienta genera. Una vez finalizada la implementación, puede usar Visual Studio para generar un paquete de solución (archivo .wsp) que contenga la definición del tipo de contenido externo y el ensamblado que se puede importar a SharePoint 2010.

Nota

Para importar este tipo de paquete, se requieren privilegios de administrador del conjunto o granja de servidores, ya que el código detrás del tipo de contenido externo se ejecuta en modo de plena confianza. Para obtener información sobre la creación de ensamblados del conector .NET, vea el tema sobre el uso de Business Data Connectivity Designer de SharePoint en Visual Studio 2010 de Boris Scholl.

Dado que modificar el comportamiento de los servicios back-end no siempre es posible, SharePoint 2010 también ofrece varias maneras de ampliar la capa de presentación para administrar tipos complejos.

Ampliación del sistema de tipos de lista externa mediante tipos de campos personalizados

La infraestructura de listas de SharePoint 2010 admite un conjunto de tipos de datos genéricos, que son suficientes para abordar los escenarios más comunes de entrada de datos. Para representar elementos de datos empresariales complejos como las direcciones, SharePoint 2010 proporciona una forma para definir los tipos de campos personalizados que pueden estar disponibles en todos los sitios de una granja de servidores de SharePoint. El archivo de definición de tipo de campo personalizado es fundamental para obtener un tipo de campo personalizado, ya que con él se define la forma en que un campo se va a representar en las vistas de lista y elemento. También define las propiedades de las variables y una referencia al ensamblado que implementa el tipo de campo. La clase de campo hereda de SPField y representa campos específicos según el tipo de campo personalizado. La clase de campo define las funciones (como la ordenación) de una columna en función del campo personalizado y define el comportamiento de una celda dentro de una lista y la base de datos de contenido. Además, puede implementar una lógica de validación personalizada.

La mayor parte de los tipos de campos personalizados complejos también requiere una clase de control de representación, una plantilla de representación o una clase de valor personalizado. Para obtener más información acerca de los tipos de campos personalizados, vea Tipos de campos personalizados y Tutorial: Crear un tipo de campo personalizado.

Después de definir el tipo personalizado, puede hacer referencia a él mediante descriptores de tipos en la definición del tipo de contenido externo, como se muestra en el siguiente ejemplo.

<TypeDescriptor TypeName="Customer.Address” Name="CustomerAddress" DefaultDisplayName="Customer Address"> 
   <Properties> 
       <Property Name="SPCustomFieldType" Type="Customer.Address">Customer Address</Property> 
   </Properties> 
</TypeDescriptor> 

Con esa definición de los descriptores de tipos, una lista externa basada en el tipo de contenido externo puede determinar que el descriptor "CustomerAddress" haga referencia a un tipo de campo personalizado y lo represente adecuadamente.

Personalización de formularios de lista de SharePoint

Al crear una lista externa nueva, SharePoint 2010 genera automáticamente formularios para permitir la creación, edición y visualización de los elementos de la lista. Los formularios de SharePoint se basan en controles .NET Framework y comparten sus capacidades de extensibilidad, que se pueden usar para representar los tipos complejos correctamente. Los tipos de campos personalizados que se describen en este tema constituyen el mecanismo de extensibilidad que se usa con más frecuencia para los tipos complejos. En los casos más simples, es posible que pueda ampliar un campo de SharePoint Foundation nativo. Para obtener más información acerca de la personalización de los formularios de lista, vea Formularios de lista.

Personalización de formularios de InfoPath

SharePoint 2010 también admite el uso de formularios de InfoPath para ver y editar elementos de lista. InfoPath incluye características con las que los usuarios que no son desarrolladores pueden crear formularios atractivos con un formato condicional y una validación eficaz. Otra ventaja que los formularios de InfoPath tienen sobre los formularios de lista estándar es su capacidad para funcionar en el explorador o como formularios independientes, así como en clientes enriquecidos. Los formularios de InfoPath son la tecnología de formularios que se usa para trabajar con los datos de las listas externas sin conexión en Microsoft SharePoint Workspace 2010. En SharePoint 2010, no puede comenzar a crear formularios de InfoPath para listas externas en InfoPath Designer; en su lugar, puede generar formularios de InfoPath en SharePoint Designer desde los diseñadores de tipos de contenido externo o listas externas. Una vez generados los formularios, puede personalizarlos en InfoPath Designer.

Para los tipos de contenido externo que contienen tipos complejos, resulta difícil generar un diseño atractivo visualmente de forma predeterminada. Por lo tanto, el generador de formularios genera un formulario en blanco. Sin embargo, como InfoPath admite los tipos complejos en el diseñador, después de generar un formulario, puede abrirlo en InfoPath Designer desde el diseñador de listas externas de SharePoint Designer. Los tipos personalizados se encuentran disponibles en la lista de campos (vea la figura 1) y pueden diseñarse manualmente.

Figura 1. Lista de campos en InfoPath Designer

Lista de campos en InfoPath Designer

Una vez finalizadas las personalizaciones, deberá volver a publicar el formulario actualizado en la lista externa con el botón Publicación rápida del menú Archivo.

Figura 2. Botón Publicación rápida en InfoPath Designer

Botón Publicación rápida en InfoPath Designer