SharePoint: Como automatizar la carga de modelos de BCS con PowerShell (I)!

Automatizar el despliegue de modelos de BCS (Business Connectivity Services) que se hayan creado fuera del entorno proporcionado por Visual Studio (por ejemplo con SharePoint Designer) se puede conseguir gracias a la potencia que nos proporciona PowerShell. En este primer post os voy a enseñar como cargar en el catálogo de datos profesionales los modelos de BCS (archivos .bdcm) por medio de PowerShell:

  • El script qué se muestra a continuación es el que permite cargar los archivos .bdcm disponibles en un cierto directorio. Para su ejecución os recomiendo que hagáis uso de PowerShell ISE (Integrated ShellScript Environment). En cuanto al script, como veis lo que hace es lo siguiente:
    • En primer lugar, se definen una serie de variables auxiliares que permiten obtener tanto el path actual como los archivos de tipo ,bdcm.
    • En un bucle foreach por cada archivo .bdcm encontrado se llama a la función Import-BCMs que se encarga de acceder al catálogo de metadatos haciendo uso de Get-SPBusinessDataCatalogMetadaObject y luego importar cada archivo mediante Import-SPBusinessDataCatalogModel
   1: If ((Get-PSSnapIn -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) 

   2: { Add-PSSnapIn -Name Microsoft.SharePoint.PowerShell }

   3:  

   4: #Hacemos un buen uso de PowerShell par ano penalizar el rendimiento

   5: $host.Runspace.ThreadOptions = "ReuseThread"

   6:  

   7: #Función que permite importar los modelos de BCS

   8: function Import-BCMs

   9: {

  10:     

  11:     #Carga del modelo

  12:     $BDCfileName="$PSScriptRoot\$fileName"

  13:     $metadataStore = Get-SPBusinessDataCatalogMetadataObject -BdcObjectType "Catalog" -ServiceContext $ServiceUrl

  14:     Import-SPBusinessDataCatalogModel -Path $BDCfileName -Identity $metadataStore -Force 

  15:  

  16: }

  17:  

  18: Start-SPAssignment –Global

  19: $ServiceUrl="http://<Url_SharePoint>"

  20: $PSScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition

  21: $fileEntries = get-childitem $PSScriptRoot -recurse

  22: $BDCMFiles = $fileEntries | where {$_.extension -eq ".bdcm"}

  23:     

  24: foreach($fileName in $BDCMFiles) 

  25: {    

  26:     Import-BCMs

  27: }      

  28: Stop-SPAssignment –Global    

  • El resultado de la ejecución del script es qué los correspondientes tipos de contenido y conexiones a sistemas externos están disponibles de manera que podemos proceder a crear listas externas.

image

En los próximos posts veremos como podemos ir más allá en la automatización de la carga de modelos de BCS en aspectos como dar permisos en el almacén de metadatos, crear listas externas, etc.

Referencia: