Cómo sabéis, SharePoint 2010 permite integra datos de sistemas de negocio en sitios a través de modelar tipos de contenido externo ya sea con SharePoint Designer 2010 (SPD 2010) o Visual Studio. Una inconveniente al que nos podemos enfrentar no tanto en el modelado de estos ECTs, sino en su consumo es el de como tratar a datos de tipo varbinary como puedan ser imágenes o archivos que se hayan guardado en una tabla de base de datos. Por ejemplo, podemos tener una tabla DimProduct en la que almacénenos una foto de cada producto registrado en la misma…la pregunta es: ¿Cómo se tratan esas fotos en una lista externa?
1: INSERT INTO [My_DW].[dbo].[DimProduct]
2: ([ProductAlternateKey]
3: ,[ProductSubcategoryKey]
4: ,[ProductEmployeeKey]
5: ,[ProductName]
6: ,[StandardCost]
7: ,[NewProductFlag]
8: ,[ListPrice]
9: ,[ProductDescription])
10: VALUES
11: ('1'
12: ,1
13: ,1
14: ,'ABRIGO VIVOS POLIPIEL'
15: ,'39.99'
16: ,1
17: ,'59.95'
18: ,'ABRIGO VIVOS POLIPIEL')
19: GO
20:
21: UPDATE [My_DW].[dbo].[DimProduct]
22: SET [ProductPhoto] = (SELECT *
23: FROM OPENROWSET(BULK 'C:\Temp\MyDW_images\abrigo1.JPG',
24: SINGLE_BLOB) AS x)
25: WHERE [ProductAlternateKey] = '1'
Lo primero que veremos es que el modelado del ECT respeta la definición de la columna de tipo varbinary en este caso y la mapea a un tipo byte[] de .NET Framework:
-
En primer lugar, y simplemente a título informativo, si realizamos una consulta T-SQL a la tabla en cuestión veremos que la columna de tipo varbinary muestra un “churro” binario que representa la foto en este caso.
-
Si creamos el ECT en SPD 2010, podremos comprobar que si es capaz de interpretar la columna y por lo tanto incorporarla a su definición
-
Sin embargo, si creamos una lista externa a partir de ese ECT nos encontraremos con qué no hay ni rastro de la citada columna y que no se ha creado a nivel de lista una columna que contenga la imagen…vaya fail.

1: <Parameter Direction="In" Name="@ProductPhoto">
2: <TypeDescriptor TypeName="System.Byte[]" CreatorField="true" Name="ProductPhoto" />
3: </Parameter>
Comparte este post: