Archivo de la etiqueta: BCS

Acceder a listas externas basadas en SQL Server a traves de BCS en SharePoint 2010

Una de las mejoras de SharePoint 2010 es la de por añadir listas, basadas en tipos de contenido externo. Las posibles fuentes que existen de contenido externo son tres (aunque en este caso únicamente voy a analizar el caso de SQL Server ya que creo que es la mas utilizada y no necesita programación alguna, en otro post analizaré como hacerlo usando un Servicio WCF):

  • Servicio WCF
  • SQL Server
  • Tipo .NET

Para poder crear un BCS (Busines Conectivity Service) basado en un tipo de contenido externo, lo primero que necesitamos tener es SharePoint Designer 2010 (el cual podemos descargar de forma gratuita desde Microsoft). Los pasos a seguir para crear listas externas serian los siguientes:

  • Abrimos SharePoint Designer y accedemos a la secccion “External Content Types” en el menú lateral izquierda

  • En la parte superior de la cinta, pulsamos sobre “New External Content Type”

  • En la siguiente pantalla, completamos todos los datos como nombre, nombre para mostrar, espacio de nombres… y por ultimo pinchamos en “Click here to discover external data sources and define operations”
  • Presionamos el boton “Add Connection” y añadimos una nueva fuente de datos externa de tipo: “SQL Server”
  • Añadimos una nueva conexión a SQL Server, y aquí tenemos que ver que opción de autenticación aplicamos:
    • “Connect with User’s Identity” – Esta opción realizará la conexión utilizando las credenciales del usuario que esta accediendo al BCS
    • “Connect with Impersonated Windows Identity” – Es necesario crear una nueva clave en el Secure Store Service e introducir el “Sercure Storage Application ID”.
    • “Connect with Impersonated Custom Identity” – Es necesario crear una nueva clave en el Secure Store Service e introducir el “Sercure Storage Application ID”.

  • Una vez tenemos nuestro origen de datos creados, debemos crear las acciones necesarias sobre los objetos de SQL Server (tablas, vistas…) que deseemos, como seria el caso de una acción que consulte todos los registros de la tabla/vista “New Read List Operation”, y tambien seria interesante una segunda acción que consulte un único registro de la tabla/vista “New Read Item Operation”.

  • Competas la pantalla que definen la acción: filtro, parámetros de entrada, parámetros de salida…
  • Por ultimo y para crear la lista en base a este nuevo contenido definido, volvemos a acceder desde el menú lateral izquierdo”External Content Types”, seleccionamos el tipo de contenido externo, y con el botón secundario pinchamos en “External list”.

  • Damos un nombre y descripción a la nueva lista y deberíamos poder acceder a ella sin mayor problema.

Nos pueden suceder varios problemas por los que no podamos ver la información. La mayoría de los casos bien sera por el tamaño de numero de registros que este devolviendo la consulta o por tema de permisos del usuario:

  • En el caso que sea un problema con el numero máximo de registros que devuelve el BCS, podéis consultar esta entrada para solucionarlo: Aumentar el numero de filas de BCS en SharePoint 2010.
  • Si por el contrario se trata de un problema de permisos, deberás asegurarte que el usuario, tiene acceso para ello si editas el contenido externo creado, podrás verificar si los usuarios del dominio pueden ejecutarlo

Aumentar el numero de filas del BCS en SharePoint 2010

Después de algún tiempo sin publicar ninguna entrada… he vuelto a sacar un rato para ello. Esta vez, se trata de un error muy común cuando trabajamos con listas externas en SharePoint 2010. Las listas externas están basadas en tipos de contenido externos, los cuales podemos crear a través de BCS (Busines Conectivity Service).

Una vez hemos configurado la nueva cuenta de acceso en el Sercure Storage Service y hemos creado tanto el BCS como la lista basada en el nuevo tipo de contenido externo, accedemos a la lista y vemos el siguiente error:

 

No se puede mostrar este elemento web. Para obtener información sobre
cómo solucionar el problema, abra esta página web en un editor HTML
compatible con Microsoft SharePoint Foundation, como Microsoft SharePoint
Designer. Si el problema persiste, póngase en contacto con el administrador
del servidor web.

Identificador de correlación:9ba64368-5a98-4064-90b8-c9f9681d9e66

Revisando los logs de SharePoint con ese identificador de correlación obtenernos mas información sobre el error:

Error while executing web part: Microsoft.BusinessData.Runtime.ExceededLimitException:
El conector de bases de datos limitó la respuesta. La respuesta de la base de datos
contiene más de '2000' filas. La cantidad máxima de filas que se pueden leer a través
del conector de base de datos es '2000'. El límite puede cambiarse mediante el cmdlet
'Set-SPBusinessDataCatalogThrottleConfig'...

Lo que nos quiere decir este error es que se ha superado el límite de filas por defecto (2000) que se pueden obtener en una consulta, mediante el BCS.

Para solucionar este error, debemos recurrir al PowerShell para aumentar dicho limite…

#Define el Proxy BCS
$bdcAppProxy = Get-SPServiceApplicationProxy | where {$_ -match "BDC_*"}
$throttleDatabaseItems = Get-SPBusinessDataCatalogThrottleConfig -Scope Database -ThrottleType Items -ServiceApplicationProxy $bdcAppProxy
#Muestra los items antes de la modificacion
$throttleDatabaseItems
#Modifica el numero de elementos en base de datos
Set-SPBusinessDataCatalogThrottleConfig -Identity $throttleDatabaseItems -Maximum 1000000 -Default 5000
#Muestra los items despues de la modificacion
$throttleDatabaseItems

 

Error “There are no addresses available for this application” al configurar el Servicio BDC

Cuando configuras por primera vez la aplicación de servicio BDC (Business Data Connectivity) en un entorno de SharePoint 2010, cuando intentas acceder a sus propiedades o bien por modelo BDC, sistemas externos y tipos de contenido externo, recibes el siguiente error:

There are no addresses available for this application

Para solucionar este problema, debes de asegurarte que el servicio esta arrancado, para ello accedes a:

Central Administration -> System Settings -> Manage services on server

y te aseguras que el servicio Business Data Connectivity Service esta arrancado o Started.

Una vez los has arrancado solo tienes que reiniciar el servicio IIS (Internet Information Services) a través del comando “iisreset” desde una aplicación de consola.

Aquí tienes una captura de pantalla, para que veas que servicio debe estar arrancado:

 

BCS Throttle Management en SharePoint 2010

Estoy creando un BDC que consume de un WCF para enriquecer el perfil de usuario en SharePoint 2010. Una vez creado y configurado el BDC, creo una nueva lista basado en este nuevo tipo de contenido externo y al recuperar los datos, obtengo el siguiente error, debido a la gran cantidad de informacion que consulto:

  • WCF Service Connector has throttled the response. The response from the WCF service contains more than ‘3000000’ bytes. The maximum amount of data that can be read through WCF Service Connector is ‘3000000’ bytes. The limit can be changed via the ‘Set-SPBusinessDataCatalogThrottleConfig’ cmdlet.

Este error radica en las limitaciones que tiene el BCS en SharePoint 2010 por defecto:

TYPE

DESCRIPTION

SCOPE

DEFAULT

MAXIMUM

Connections Total number of connections allowed to External Systems Global

100

500

Items Number of rows returned from a database query Database

2000

25000

Timeout Database connection timeout Database

60 sec.

600 sec.

Size Size of returned data WCF

3 MB

150 MB

Timeout Web service connection timeout WCF

60 sec.

600 sec.

Para poder modificar estos parametros o limites, es posible utilizar un sencillo script de PowerShell, gracias al comando Get-SPBusinessDataCatalogThrottleConfig:

#Define el Proxy BCS
$bdcAppProxy = Get-SPServiceApplicationProxy | where {$_ -match "Business Data *"}

#Modifica el numero maximo de bytes
$throttleWCF = Get-SPBusinessDataCatalogThrottleConfig -Scope WCF -ThrottleType Size -ServiceApplicationProxy $bdcAppProxy
Set-SPBusinessDataCatalogThrottleConfig -Identity $throttleWCF -maximum 2147483647 -default 2147483647
$throttleWCF

#Modifica el tiempo maximo de la petición
$throttleWCF = Get-SPBusinessDataCatalogThrottleConfig -Scope WCF -ThrottleType Timeout -ServiceApplicationProxy $bdcAppProxy
Set-SPBusinessDataCatalogThrottleConfig -Identity $throttleWCF -maximum 2147483647 -default 2147483647
$throttleWCF