lunes, 28 de febrero de 2011

Deshabilitar vista explorador con Excel Services

Excel Services consiste en un servicio de SharePoint 2010 que permite manejar ficheros Excel desde un entorno Web. Su principal objetivo es el de proveer de la potencia de cálculo de Excel mediante SharePoint.

Otra de sus cualidades es que se puede compartir gráficos, tablas dinámicas, … pero sin llegar a compartir las fórmulas y los datos de los que se obtienen.

image

Desde el post MOSS: Guías paso a paso de Excel Services y otros recursos! encontraréis una serie de artículos adicionales sobre cómo habilitar y configurar este servicio.

Uno de los problemas que encontraremos al habilitar Excel services es que todos los documentos con extensión .XLSX de la colección de sitios se abrirán por defecto en modo explorador aunque tengamos marcado que se muestre en modo cliente desde la biblioteca de documentos.

image

Para forzar que se abran los ficheros Office en modo cliente habilitaremos la feature “OpenInClient”, para éllo abriremos una consola de PowerShell:

$defaultOpenBehaviorFeatureId = $(Get-SPFeature -limit all | where {$_.displayname -eq "OpenInClient"}).Id

Con el Cmdlet Get-SPFeature devuelve un listado de las features disponibles, y mediante “where” aplicamos un filtro para obtener la feature cuya propiedad DisplayName sea igual a “OpenInClient”. Una vez obtenido el id de la feature y activaremos la feature.

Get-SPSite http://c8191497276/sitios/excelservices/ -limit ALL |foreach{ Ensable-SPFeature $defaultOpenBehaviorFeatureId -url $_.URL }

iisreset

image

image

 

Desde el post Configure the default open behavior for browser-enabled documents (Office Web Apps) encontrareis más información sobre como activar desactivar la funcionalidad browser-enabled.

lunes, 14 de febrero de 2011

Envío de alertas con Task Scheduler

I Love PowerShell, como hoy es el día de los enamorados quería tener un pequeño detalle con una herramienta a la que cada vez estoy cogiendo más aprecio, aunque muchos piensan que es solo para los administradores de sistemas, están muy equivocados, también es una herramienta para los desarrolladores. En esta ocasión he podido implementar una funcionalidad de monitorización con PowerShell y el TaskScheduler de Winwdows.

Mediante el programador de tareas de Windows 2008 podemos planificar tareas en base a un evento de sistema e incluso podemos añadirle ciertas condiciones. Para mí una de las funcionalidades más interesantes es la de poder notificar vía mail al producirse un error crítico en nuestro aplicativo. En concreto lo estoy utilizando para notificar errores de mis componentes de SharePoint, mediante el servicio SPDiagnosticsService podemos realizar una entrada en el log de sucesos windows con nuestro propio código con un código similar al siguiente:

SPDiagnosticsService diagSvc = SPDiagnosticsService.Local; 
WriteEvent(MiCodigoDeError, new SPDiagnosticsCategory(CATEGORIA, TraceSeverity.VerboseEx, EventSeverity.Error), Microsoft.SharePoint.Administration.EventSeverity.ErrorCritical, "Exception: {0} {1}”, new object[] { ex.Message, ex.StackTrace});



Una vez dispongamos de una entrada en el log de windows podemos asociarle una tarea seleccionando el evento y pulsando en “Attach task to this Event…”, se iniciará entonces un asistente para definir la tarea asociada al evento pudiendo seleccionar entre tres tipos de acciones: lanzar un programa, enviar un mail y mostrar un mensaje. Aunque lo ideal sería seleccionar la acción de “Enviar un mail” lo cierto es que esta acción solo envía un mail estático por lo que no podremos utilizarla si deseamos que nos indique en el mail el mensaje del evento que lanzó la acción.



Aquí es donde llega nuestro amigo PowerShell, con el que obtendremos el mensaje del último evento producido y enviáremos un mail con el formato que deseemos Sonrisa



imageimage



 



Lo primero será obtener el mensaje del evento que lanzó la tarea programada, para ello dispondremos del cmdlet Get-WinEvent. Con el siguiente script podremos por ejemplo obtener un listado con todas las entradas en el log de windows con el código 4664: 



Get-WinEvent -LogName "Application" | where {$_.Id -eq 4664} 



image



Para obtener el último mensaje limitaremos los resultados a 1 elemento y poder manejar una instancia de la clase :



$event = Get-WinEvent -LogName "Application" -MaxEvents 1 | where {$_.Id -eq 4664} 

$event.Message



image



Ahora solo quedaría componer el mail de la siguiente forma:







$emailFrom = "mailorigen" 
$emailTo = "maildestino"
$subject = "Error portal"
$body = $event.MachineName + " " + $event.Message

$smtpServer = "DirecciónSMTP"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($emailFrom, $emailTo, $subject, $body)



Una vez tengamos el script completo lo guardaremos en un fichero con extensión “.ps1” e indicaremos en la acción que ejecute nuestro ps1 con una expresión similar a la siguiente:



%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe –Noninteractive C:\Windows\System32\TaskSendMail.ps1


image

jueves, 3 de febrero de 2011

[Tips SharePoint 2010] Qué bases de datos estoy utilizando?

En SharePoint 2010 las bases de datos se reproducen como champiñones, el problema lo podemos tener cuando tenemos varias aplicaciones web utilizando el asistente o queremos realizar un plan de mantenimiento desde SqlServer. Para saber las bases de datos que estamos utilizando podemos verlo desde la Administración central > Upgrade and migration > Review database status

Si preferimos utiliza PowerShell para obtener el listado de bases de datos:

Get-SPDatabase | Format-Table DisplayName, Name, Server –auto

o también:

Get-SPDatabase | foreach {$_.DisplayName, $_.Name, $_.Server}

 

image image