Archivo de la categoría: SharePoint 2013

SharePoint 2013 – Script de aprovisionamiento de Business Data Connectivity

powershellLa aplicación de servicio de Conectividad a datos empresariales (o Business Data Connectivity) permite cargar archivos de definición de aplicaciones que describen las interfaces de los sistemas de la línea de negocio de una organización y la forma de acceder a los datos que almacenan en SharePoint 2013.

Para crear este servicio en SharePoint 2013, aquí tenéis un script de PowerShell que os puede ser de utilidad, si estáis montando nuevos entornos:

#####################################################################################
## Create Business Data Connectivity Service ##
#####################################################################################
# SQL Server name and apppool
$DB = "DES-SP2013"
$AppPool = "SharePoint Web Services"
# Service name and database
$BDCSName = "Business Data Connectivity Service"
$BDCSDB = "SP2013_BDC"
#####################################################################################
## Administrative Privileges Check ##
#####################################################################################
function Use-RunAs 
{    
    # Check if script is running as Adminstrator and if not use RunAs 
    # Use Check Switch to check if admin 
    param([Switch]$Check) 
	$IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") 
    if ($Check) { return $IsAdmin }     
    if ($MyInvocation.ScriptName -ne "") 
    {  
        if (-not $IsAdmin)  
        {  
            try 
            {  
                $arg = "-file $($MyInvocation.ScriptName)" 
                Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction "stop"  
            } 
            catch 
            { 
                Write-Warning "Error - Failed to restart script with runas"  
                break
            } 
            exit # Quit this session of powershell 
        }  
    }  
    else
    {  
        Write-Warning "Error - Script must be saved as a .ps1 file first"  
        break  
    }  
} 
Use-RunAs
#####################################################################################
## Add Powershell SharePoint Snapin
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
#####################################################################################
try
{
	Write-Host "Creating Business Data Connectivity Service"
	$ServiceApplication = New-SPBusinessDataCatalogServiceApplication –ApplicationPool $AppPool –DatabaseName $BDCSDB –DatabaseServer $DB –Name $BDCSName > $null
	New-SPBusinessDataCatalogServiceApplicationProxy -Name "$BDCSName Proxy" -DefaultProxyGroup -ServiceApplication $BDCSName > $null
	Get-SPServiceInstance | where-object {$_.TypeName -like "*Managed Metadata*"} | Start-SPServiceInstance > $null
	Write-Host "Service created correctly"
} 
catch 
{ 
	Write-Output $_  
}

 

Referencias: New-SPBusinessDataCatalogServiceApplication y New-SPBusinessDataCatalogServiceApplicationProxy

SharePoint 2013 – Script de aprovisionamiento de Usage and State Service Applications

powershellLa aplicación de Servicio de estado (o State Service) proporciona almacenamiento temporal de los datos de usuario para los componentes de SharePoint 2013.

Para crear este servicio en SharePoint 2013, aquí tenéis un script de PowerShell que os puede ser de utilidad, si estáis montando nuevos entornos:

#####################################################################################
## Create Usage and State Service Applications ##
#####################################################################################
$DB = "DES-SP2013"

$DataDrive = "C:\\SPLogs"
$USName = "Usage and Health Data Collection Service"
$USDB = "SP2013_Usage"

$SSName = "State Service"
$SSDB = "SP2013_State"
#####################################################################################
## Administrative Privileges Check ##
#####################################################################################
function Use-RunAs 
{    
    # Check if script is running as Adminstrator and if not use RunAs 
    # Use Check Switch to check if admin 
    param([Switch]$Check) 
	$IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") 
    if ($Check) { return $IsAdmin }     
    if ($MyInvocation.ScriptName -ne "") 
    {  
        if (-not $IsAdmin)  
        {  
            try 
            {  
                $arg = "-file $($MyInvocation.ScriptName)" 
                Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction "stop"  
            } 
            catch 
            { 
                Write-Warning "Error - Failed to restart script with runas"  
                break
            } 
            exit # Quit this session of powershell 
        }  
    }  
    else
    {  
        Write-Warning "Error - Script must be saved as a .ps1 file first"  
        break  
    }  
} 
Use-RunAs
#####################################################################################
## Add Powershell SharePoint Snapin
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
#####################################################################################
try
{
	Write-Host "Creating Usage and Health Data Collection Service"
	Set-SPUsageService -LoggingEnabled 1 -UsageLogLocation "$DataDrive" -UsageLogMaxSpaceGB 2
	$serviceInstance = Get-SPUsageService
	New-SPUsageApplication -Name $USName -DatabaseServer $DB -DatabaseName $USDB -UsageService $serviceInstance > $null
	Write-Host "Service created correctly"

	Write-Host "Creating State Service and Proxy…"
	$stateServiceDatabase = New-SPStateServiceDatabase -Name $SSDB
	$stateSA = New-SPStateServiceApplication -Name $SSName -Database $stateServiceDatabase
	New-SPStateServiceApplicationProxy -ServiceApplication $stateSA -Name "$SSName Proxy" -DefaultProxyGroup
	Write-Host "Service created correctly"
} 
catch 
{ 
	Write-Output $_  
} 

 

Referencias: New-SPUsageApplication, New-SPStateServiceDatabase y New-SPStateServiceApplicationProxy

SharePoint 2013 – Script de aprovisionamiento de Machine Translation Service

powershellLa aplicación de servicio Traducción Automática (o Machine Translation) es una nueva aplicación de servicio en SharePoint 2013 que proporciona la traducción automática de archivos y los sitios. Cuando la aplicación de servicio de traducción automática procesa una solicitud de traducción, la reenvía al servicio de Microsoft Translator , el cual realiza el trabajo real de traducción.

Para crear este servicio en SharePoint 2013, aquí tenéis un script de PowerShell que os puede ser de utilidad, si estáis montando nuevos entornos:

#####################################################################################
## Create Machine Translation Service ##
#####################################################################################
$AppPool = "SharePoint Web Services"

$MTSInst = "Machine Translation Service"
$MTSName = "Translation Service"
$MTSDB = "SP2013_MachineTranslation"
#####################################################################################
## Administrative Privileges Check ##
#####################################################################################
function Use-RunAs 
{    
    # Check if script is running as Adminstrator and if not use RunAs 
    # Use Check Switch to check if admin 
    param([Switch]$Check) 
	$IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") 
    if ($Check) { return $IsAdmin }     
    if ($MyInvocation.ScriptName -ne "") 
    {  
        if (-not $IsAdmin)  
        {  
            try 
            {  
                $arg = "-file $($MyInvocation.ScriptName)" 
                Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction "stop"  
            } 
            catch 
            { 
                Write-Warning "Error - Failed to restart script with runas"  
                break
            } 
            exit # Quit this session of powershell 
        }  
    }  
    else
    {  
        Write-Warning "Error - Script must be saved as a .ps1 file first"  
        break  
    }  
} 
Use-RunAs
#####################################################################################
## Add Powershell SharePoint Snapin
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
#####################################################################################
try
{
	Write-Host "Creating Machine Translation Service and Proxy…"
	$AppPoolName = Get-SPServiceApplicationPool $AppPool
	Get-SPServiceInstance | ? {$_.GetType().Name -eq $MTSInst} | Start-SPServiceInstance
	$MTS = New-SPTranslationServiceApplication -Name $MTSName -ApplicationPool $AppPoolName -DatabaseName $MTSDB
	$MTSProxy = New-SPTranslationServiceApplicationProxy –Name "$MTSName Proxy" –ServiceApplication $MTS –DefaultProxyGroup
	Write-Host "Service created correctly"
} 
catch 
{ 
	Write-Output $_  
}

 

Referencias: New-SPTranslationServiceApplication y New-SPTranslationServiceApplicationProxy

Script de PowerShell para rellenar una lista de SharePoint con elementos

powershell Este ejemplo es válido tanto para plataformas SharePoint 2010 como SharePoint 2013. Viene motivado por la necesidad de probar los limites del producto en cuanto a vistas de listas se refiere.

Tanto la versión 2010 como 2013 tienen los mismos limites en cuanto a listas/bibliotecas se refiere en cuanto a:

  • Numero de elementos por lista: 30.000.000
  • Limitación de vista de lista: 5000 elementos
  • Tamaño de filas de lista: 8.000 bytes por fila

Viendo estas limitaciones, aquí tenéis un script de PowerShell con el que podréis añadir de forma automática miles de elementos en una lista:

[System.Reflection.Assembly]::LoadWithPartialName(”Microsoft.SharePoint”)
function PopulateList
{
    param ($ListURL, $count)
    $mySite = new-object Microsoft.SharePoint.SPSite($ListURL)
    $myWeb = $mySite.OpenWeb()
    $mySrcList = $myWeb.GetList($ListURL)
    $itemCount=0
    write-host "Preparando la lista para la carga de datos: " $ListURL
    write-host "-----------------------------------------------------------------"
    while ($itemCount -lt $count)
    {
        $itemCount=$itemCount+1
        write-host "Creando elemento:" $itemCount
        $listItem = $mySrcList.Items.Add()
        $title="Titulo del elemento " + $itemCount
        $listItem["Title"]=$title
        $listItem.Update()
    }
    $myweb.Dispose()
    $mySite.Dispose()
}
#---------------------------------------------------------------
#Para usar este función solo tienes que llamarla pasando como parámetro la lista y el numero de elementos a crear
$sitecollection="http://intranet/sitio/Lists/listaPrueba/"
PopulateList $sitecollection 6000
#---------------------------------------------------------------

 

Hay que destacar, que la lista (como requisito) unicamente ha de tener el campo “Titulo” (campo por defecto en listas que hereden del tipo de contenido “Elemento”), único campo que rellena el script.

 

Error en el paso de implementación ‘Desinstalar aplicación para SharePoint’: No se puede conectar con el sitio de SharePoint.

sharepoint2013 Antes de nada, indicar que este error: “Error en el paso de implementación ‘Desinstalar aplicación para SharePoint’: No se puede conectar con el sitio de SharePoint” o en inglés “Error occurred in deployment step ‘Uninstall app for SharePoint’: Cannot contact site at the specified URL” se produce cuando hemos desarrollado una solución y queremos implementarla en SharePoint 2013/Office 365 desde el Visual Studio 2012/2013 (en mi caso es una solución de una App para SharePoint 2013 auto-hospedada, que un compañero me ha pasado) .

El motivo de este error, puede producirse por varios motivos (básicamente es porque no tienes permisos en el sitio y base de datos), pero muchas veces se nos pasa por alto verificar una cosa tan simple, como que la propiedad “URL del sitio”, que debe de tener la url de nuestra colección de sitio, creada con la plantilla de “Sitio del desarrollador”.

Para verificar esto, en Visual Studio debemos abrir la ventana de propiedades del proyecto que utilizamos para empaquetar la solucion de SharePoint (normalemente puedes acceder a ella pulsando la tecla: F4) y ver si la propiedad “URL del sitio” esta correctamente rellena:

SiteUrlEmpty

En caso que no sea así, introducir un valor correcto y volver a implementar la solución…

 

Service Pack 1 para Office 2013 y SharePoint 2013

sharepoint2013Hoy día 25 de Frebrero, Microsoft ha anunciado la salida del Service Pack 1 para Office 2013 y SharePoint 2013.

Esta nueva versión del Service Pack 1, proporciona correcciones para mejorar: la estabilidad general, funcionalidad y seguridad en Office, SharePoint Server y productos relacionados. Entre las mejoras en la funcionalidad, destaca:

  • Correcciones de compatibilidad para Windows 8.1 e Internet Explorer 11.
  • Mejor soporte para hardware moderno, como dispositivos de alto DPI y la precisión la precisión del touchpad.
  • Nuevas capacidades para Apps de Office y APIs para desarrolladores :).
  • Power Map para Excel, una herramienta de visualización 3D para la cartografía, la exploración y la interacción con los datos geográficos y temporales en Excel (ya está disponible para clientes de Office 365 con  suscripción ProPlus).
  • Mejoras en la tecnología de virtualización Click-to-Run que instala y actualiza aplicaciones de Office 365 de escritorio.
  • SkyDrive Pro es ahora OneDrive for Business (únicamente ha habido un cambio de nombre del producto).

Para mas información, puedes visitar los siguientes KBs para más información sobre las actualizaciones del  Service Pack 1 de los siguientes productos:

Update KB Article
Office 2013 SP1. Covers these applications:

  • Access
  • Excel
  • InfoPath
  • Lync
  • OneDrive for Business
  • OneNote
  • Outlook
  • PowerPoint
  • Publisher
  • Word

 

2817430
Project 2013 SP1 2817433
Visio 2013 SP1 2817443
SharePoint Designer 2013 SP1 2817441
SharePoint Server 2013 SP1 2817429
Project Server 2013 SP1 2817434
Office Web Apps Server 2013 SP1 2817431
All other desktop products and language packs 2850036
All other server products and language packs 2850035

 

IMPORTANTE: Siempre es bueno probar cualquier Service Pack en un entorno no productivo, para detectar y corregir posibles problemas, y así evitar males mayores.

Para mas información: http://support.microsoft.com/kb/2817429

 

Como lanzar un Workflow programaticamente en SharePoint

Tras un periodo de inactividad, vuelvo con un nuevo post… Esta vez se trata, de la necesidad de lanzar un nuevo Workflow a nivel de listas o biblioteca en todos los ítems, previamente creados. Si el Workflow se configura para que se lance a la creación o modificación del ítem, puede que haya muchos ítems, que por antigüedad, no se modifiquen y no se lance el Workflow asociado.

Para realizar esto desde el API de SharePoint, la forma mas sencilla es la siguiente:

static private void LanzarWorkflow()
{
  //definición de variables necesarias para la ejecución
  string SP_URL = "http://mi_sharepoint";
  string LIST_NAME = "Pages";
  //este es el GUID del BaseID del Workflow que queremos ejecutar
  Guid wfBaseId = new Guid("b81abdd8-faf4-4bed-86ca-a49d9cc9913e");
  //se ejecuta con privilegios elevados
  SPSecurity.RunWithElevatedPrivileges(delegate
  {
	try
	{
	  using (SPSite site = new SPSite(SP_URL))
	  {
		using (SPWeb web = site.OpenWeb())
		{
		  SPList list = web.Lists[LIST_NAME];
		  SPListItemCollection items = list.Items;
		  for (int i = 0; i < items.Count; i++)
		  {
			web.AllowUnsafeUpdates = true;  
			//selecciona el item actual
			SPListItem item = items[i];
			Console.WriteLine(string.Format("[Item] Lanzando workflow para el item Id: {0} ", item.ID));
			//obtiene el objeto plantilla de WF asociado a la lista que queremos
			SPWorkflowAssociation associationTemplate = list.WorkflowAssociations.GetAssociationByBaseID(wfBaseId);
			//lanzar el WF a nivel del item
			web.Site.WorkflowManager.StartWorkflow(item, associationTemplate, associationTemplate.AssociationData);
			web.AllowUnsafeUpdates = false; //bloquea cambios por codigo
		  }
		}
	  }
	}
	catch (Exception ex) { Console.WriteLine(string.Format("***ERROR*** {0}", ex.ToString())); }
  });
}

Los únicos parámetros que necesita esta función son:

  • SP_URL: Url del sitio de SharePoint donde se encuentra la lista que tiene asociada el Workflow que deseamos lanzar
  • LIST_NAME: Nombre de la lista o biblioteca que tiene el Workflow
  • wfBaseId: por ultimo el Base ID del Workflow (este GUID lo puedes ver, por ejemplo, desde SharePoint Designer, editando el archivo XML de configuración del propio Workflow)

 

Editar plantillas de SharePoint (archivos stp) de una forma cómoda y sencilla

sharepoint2010Es posible que te hayas visto en la necesidad de tener que editar plantillas de listas de SharePoint, para pasarlas a una granja diferente o similar… Una cosa que suele ser común es que en tu servidor de pruebas no tengas todos los Language Packs instalados, y cuando quieras usar dichas plantillas de lista, no puedas hacerlo.

Para poder realizar esto, es necesitar editar el manifiesto de la planilla y ponerle el idioma, que tengas instalado en tu entorno. Para editar un archivo stp existen varios métodos que comento a continuación:

1) Existe una forma manual de poder editarlos, cuyos pasos serian:

  1. Copia y renombra la extensión del archivo .stp por .cab
  2. Extrae el contenido del archivo (yo suelo usar WinRar)
  3. Abre el archivo manifest.xml en un editor de texto (Visual Studio, Notepad, Dreamweaver, etc.)
  4. Modifica el archivo manifest.xml
  5. Usando la linea de comando,  sitúate en el directorio/carpeta que contenga el manifiesto ya editado
  6. Teclea el siguiente comando, sustituyendo el <nombre_plantilla> por el deseado: makecab.exe manifest.xml <nombre_plantilla>.cab
  7. Esto generará un archivo .cab que deberemos renombrar de extensión a .stp
  8. Ya tenemos listo la plantilla modificada, preparada para subir a SharePoint

makecab01

2) Existe otra forma mucho mas sencilla, cuyos pasos serian:

  1. Copia y renombra la extensión del archivo .stp por .cab
  2. Extrae el contenido del archivo (yo suelo usar WinRar)
  3. Abre el archivo manifest.xml en un editor de texto (Visual Studio, Notepad, Dreamweaver, etc.)
  4. Modifica el archivo manifest.xml
  5. Buscar la aplicación iexpress.exe y ejecutala
  6. Sigue los pasos del wizard
  7. Esto generará un archivo .cab que deberemos renombrar de extensión a .stp
  8. Ya tenemos listo la plantilla modificada, preparada para subir a SharePoint

IEXPRESS02

Este segundo paso es mucho mas cómodo si tu plantilla, contiene mas de un archivo (es decir a aparte del manifest.xml) ya que no tienes que generar ningún script para que te haga el empaquetado usando makecab.

Para más información sobre IExpress Wizard, puedes consultar esta pagina de Microsoft.