martes, 24 de febrero de 2009

El problema no es empezar, es continuar!!

Los blogs forman parte de lo que se llama la Web 2.0, los blogs están de moda, tener uno “mola”, cuentas tu vida, tus historias e incluso la cosas de otros. Los blogs tecnológicos se han convertido en una herramienta imprescindible en poco tiempo. Aportan la información y experiencia que no encontramos de los fabricantes y especificaciones. Los blogs están abriendo el conocimiento y la experiencia “seguro que hay alguien que ya le ha pasado antes o lo ha hecho antes”.

Microsoft por ejemplo se dio cuenta que las comunidades eran imprescindibles para conseguir el soporte que no eran capaces de prestar y otros ya habían conseguido hace tiempo “había que estar ahí”. Las comunidades relacionadas con tecnología Microsoft se han multiplicado, los MVP’s y los evangelistas están haciendo una tarea didáctica muy importante, y están teniendo éxito porque no se guardan información e intentan que todo el mundo participe.

Últimamente se están estilando los blogs corporativos, consisten en blogs promocionados por las empresas para publicitar a sus profesionales (y así misma). El problema viene cuando escribir se convierte en una obligación. Un blog es difícil de mantener, es necesario dedicarle mucho tiempo. Se necesita tiempo en escribirlo y prepararlo. Sobre todo cuando después de haberse pasado la euforia de la primera entrada dejamos de escribir o ya no encontramos tiempo ni ganas. Entonces el blog se convierte en una obligación más que en una idea o actitud.

Mi consejo es que os animéis a escribir un blog, es una actividad muy gratificante, nos sirve para clarificar las ideas y ampliar los conocimientos.

Si estáis empezando podéis visitar el post Check Point For Aspiring Blogger.

¿Sobre qué podemos escribir?

  • Post rápidos: podemos escribir acerca de una noticia u otra entrada muy completa. No es bueno escribir muchas de este tipo.
  • Post detallados: consiste en hablar acerca de un tema de forma muy detallada. ´Son útiles pero difíciles de preparar.
  • Step by step: consiste en un paso a paso. La gente lo agradece mucho
  • Post resolutivos: hablan de como resolver un problema que nos hemos encontrado.

domingo, 22 de febrero de 2009

Infopath Form Services y Office Forms Server

Continuando con el anterior post “Empezando con Infopath”, vamos a subir un poco más de nivel para ver en que versiones de sharepoint podremos utilizar Infopath Form services. En la siguiente imagen podemos ver las funcionalidades por versión de sharepoint:




Fijaros que Infopath Form services solo está disponible para la versión Enterprise de MOSS, con lo que si tenemos la versión Standard o wss3, ¿no podemos utilizar Infopath Form Services?. La respuesta, es que “sí podemos”, pero en función de que versión tengas de sharepoint habrá una solución distinta.


¿Cómo uso Infopath Form Services si tengo WSS3?

Lo que ha hecho Microsoft para este caso es sacar el componente de Infoptah Form services en un paquete que lo ha denominado “Microsoft Office Forms Server”. Form Server está basado en WSS3 por lo que no tendremos ningún problema a la hora de montarlo en nuestra granja de Wss3.

El instalador de Form server instala todos los binarios de Wss3 + los necesarios para infopath forms services.

Office Form server

Office Form server es el nombre que se ha dado a sacar Infopath Form services de MOSS y meterlo en un paquete aparte junto con Wss3.

Algo parecido se ha hecho por ejemplo con Search Server o Project Server.



La forma de licenciar Office Form server es la siguiente:

Office Forms Server

- Se licencia por servidor.

- Se necesita una CAL por cada cliente que que accede a Office Forms Server 2007


Office Forms Server for Internet Sites

- Se licencia por servidor.

- Únicamente para extranet e internet sites

- Incluye toda la funcionalidad de Microsoft Office Forms Server 2007.


De manera que tendremos que adquirir una licencia por servidor de la granja que tenga habilitadas las funcionalidades de Infopath. Si nuestra ganja wss3 está formada por dos frontales deberíamos adquirir dos licencias de servidor de Form server. Si solo tubiéramos una licencia de Form server también podríamos hacer que funcionara en uno de los nodos pero de forma muy limitada y perdiendo la alta disponibilidad.


¿Cómo uso Infopath Form Services si tengo MOSS 2007 Standard?

Este caso es distinto al de wss3 ya que la instalación de MOSS 2007 lleva todos los binarios y ficheros de la Enterprise y es a la hora de introducir la licencia cuando se habilitan o deshabilitan las funcionalidades, además que siempre podemos pasar a la Enterprise.

Para este caso Microsoft recomienda que habilites las características Enterprise y adquieras una licencia CAL de Enterprise para aquellos usuarios que usen solo las funcionalidades Enterprise.

Por lo que tendremos que ser nosotros los que limitemos los usuarios para no tener que adquirir demasiadas CAL de Enterprise.

Server and client access licensing. For each server, or each server in a farm, a valid server license must be purchased. For each client accessing Office SharePoint Server 2007, a Standard CAL must be purchased. To enable the enterprise features of Office SharePoint Server 2007, an Enterprise CAL, in addition to the Standard CAL, must be purchased. Once the enterprise features are enabled on a server, clients accessing that server, or farm of servers, should have a valid Enterprise CAL in addition to their Standard CAL when accessing the enterprise functionality.

De modo que para que los usuarios puedan utilizar Infopath Form Services en MOSS tendremos que adquirir una CAL Standard + CAL de Enterprise por cada usuario que lo utilice.

Podéis encontrar más información de licenciamiento en:

Microsoft Office SharePoint Server 2007 and Related Technologies pricing

Microsoft Office SharePoint Server 2007 frequently asked questions

o consultando con vuestro soporte preventa o comercial de Microsoft.


¿Puedo montar Office Form Server sobre una granja MOSS Standard?

Técnicamente se puede, aunque no es la mejor solución técnica y económica, ya que el coste de licencias es muy similar y casi no sale rentable.

En caso que ya tengas adquirida las licencias de Form Server puedes agregar un nuevo nodo con Form Server a la granja pero con muchas limitaciones:

  • No pueden coexistir en un mismo equipo Office Form Server y MOSS 2007, por lo que tendremos que montarlo en nuevo nodo.
  • Como las licencias de Form Server van por servidor (y CAL de usuario) deberíamos limitar los accesos a la funcionalidad de Infopath services solo a aquellos nodos que tengan adquirida la licencia.
  • No podremos utilizar las funcionalidades de MOSS (publicación, colaboración etc.) en el nodo que tenga instalado Form Server, ya que éste solo tendrá los binarios de Wss3 y puede que no sea capaz de procesar las peticiones a determinados sitios con estas características. Tendremos que limitar los accesos a este servidor solo para los nuevos sitios que utilicen Infopath Forms Services y los usuarios que tengamos CAL de Form server adquirida.


Como resumen, si tenemos MOSS 2007 Standard es mejor pasar a la versión Enterprise de MOSS en lugar de adquirir Office Form Server.

Podéis encontrar más información técnica en:

Microsoft Office Forms Server TechNet TechCenter

Planning and architecture for Office Forms Server 2007

Empezando con Infopath

Infopath es la solución que nos proporciona Microsoft para crear formularios de una forma rápida y ‘sencilla’. Tenemos dos formas de trabajar en modo cliente con los formularios: desde el cliente office de Infopath y desde un entorno web.

La idea de infopath es proporcionar una herramiena para diseñar formularios sin necesidad de realizar un desarrollo a medida o desplegar una gran cantidad de componentes. Infopath además permite manejar datos de entrada procedentes de varios orígenes de datos distintos: de una bbdd, un servicio web, un xml y una lista de sharepoint. Los datos que introducimos en el formulario de infopath se guardan en formato xml o son enviados a un destino configurado en tiempo de diseño.

Sharepoint tiene la capacidad de integrar los formularios infopath de forma ‘nativa’ de dos formas: mediante librerías de formularios y mediante Infopath Form services.

Las librerías de formularios consisten en librerías de documentos con una plantilla de infopath asociada, de forma que la edición de los elementos se maneja mediante el formulario Infopath y los datos manejados se almacenan en formato xml en la librería.

Infopath Form services consiste en un componente instalado en el servidor encargado de renderizar en Html los formularios diseñados en Infopath. Esto evita la necesidad de tener instalado el cliente Infopath para trabajar con los formularios. Para manejar los formularios con Infopath Form services tendremos que subirlos a Sharepoint desde la administración central e indicar en que sitios podremos manejarlos. En el post “MOSS: Publicación de formularios Infopath…el otro camino!” podéis encontrar como publicar un formulario.

Una vez configurados podremos visualizarlos en nuestros sitios con el webpart XmlFormView, si no lo tenéis habilitado podéis consultarlo en “Embedding InfoPath Form in SharePoint Page”.

viernes, 20 de febrero de 2009

SPDisposeCheck con Visual Studio

En el post Using SPDisposeCheck in Visual Studio podemos encontrar un ejemplo de como integrar SPDisposeCheck con Visual Studio, de forma que una vez compilada nuestra librería podáis validarla sin tener que abrir una consola de comandos. Bastante cómodo para los que no nos gusta escribir sobre una pantalla negra.


Para hacerlo, abriremos VStudio > Herramientas > Herramientas externas … sobre el diálogo que nos aparezca indicaremos los datos del exe de SPDisposeCheck y los argumentos de ejecución.

A continuación completaremos los siguientes valores como indica el post original:


Title: SPDispose Check
Command: C:\Program Files\Microsoft\SharePoint Dispose Check\SPDisposeCheck.exe (Ruta completa del exe de SPDisposeCheck )
Arguements: $(TargetName)$(TargetExt)


Initial Directory: $(TargetDir)
Use Output Window: Lo marcamos



Una vez completado, aplicamos y ya tendremos disponible en el menú de herramientas una nueva opción con el título “SPDispose Check”.

Al ejecutar la opción veremos como nos aparece en la venta Output el resultado de SPDisposeCheck.


Espero que os haya servido.

System.IO.IOException device is not ready

Al añadir un nuevo nodo a la granja se producía la excepción “System.IO.IOException: el dispositivo no está listo” o “System.IO.IOException: device is not ready” en el wizard de configuración:

 

Exception: System.IO.IOException: The device is not ready.

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, DirectorySecurity dirSecurity)

at System.IO.DirectoryInfo.Create(DirectorySecurity directorySecurity)

at Microsoft.SharePoint.Administration.SPProvisioningAssistant.CreateDirectory(DirectoryInfo di, Boolean secureAdminAccess)

at Microsoft.SharePoint.Administration.SPServer.CreateDirectory(String path, Boolean secureAdminAccess)

at Microsoft.SharePoint.Administration.SPServer.CreateDirectory(String path)

at Microsoft.SharePoint.Administration.SPUsageSettings.EnsureLogFileDirectories(SPFarm farm)

at Microsoft.SharePoint.Administration.SPWebApplication.Provision()

at Microsoft.SharePoint.Administration.SPWebServiceInstance.Provision()

at Microsoft.SharePoint.Administration.SPFarm.Join()

at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.CreateOrConnectConfigDb()

at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.Run()

at Microsoft.SharePoint.PostSetupConfiguration.TaskThread.ExecuteTask

 

El problema consiste en que al agregar el nuevo nodo a la granja, sharepoint intenta configurar el nuevo nodo con los paths de logs y análisis de uso configurados en la consola de administración. De manera que si especificamos en la administración central una unidad de disco que no existe en el nuevo nodo lanzará una excepción al no poder crear el directorio.

La solución consiste en especificar un path en los logs y y análisis de uso que dispongan todos los nodos de la granja. En mi caso, tenía configurado que los logs se almacenaran en la unidad “D:\” y el nuevo nodo solo tenía la unidad “C:\”, bastó con indicar la ruta estándar y volver a configurar.

Antes de volver a configurar tuve que desacoplarlo de la granja ya que se queda a medias, y eliminar a mano los sitios web en el iis creados al extender los web applications.

 

La solución original la podéis encontrar en System.IO.IOException Error in the Configuration Wizard.

Espero que os sirva.

miércoles, 18 de febrero de 2009

Error fatal CManagedResources.GetScopeId

Sharepoint nunca te deja de sorprender, cada día me pregunto “¿qué me pasará hoy?”.

Hoy lo hizo con un bonito pantallazo:


El error es nítido!!, resulta que estaba haciendo una aplicación de consola que validaba que estuvieran construidos correctamente una serie de elementos, y para ello utilizaba FullTextSqlQuery para algunas búsquedas. Que sorpresa la mía que al indicar el scope en la consulta me apareció este mensajito.

El problema era que estaba utilizando la dll Microsoft.Sharepoint.Search sobre un MOSS, simplemente cambiando la referencia por la de Microsoft.Office.Server.Search todo se solucionó. En mi código solo tuve que cambiar el using y la llamada al constructor del FullTextSqlQuery.

Espero que os sirva.

[Sharepoint] HRESULT: 0x80040D1B

Este error me ocurría al intentar acceder a la configuración de búsquedas del SSP en MOSS.  Al crear un dominio en mi máquina virtual pasaron todos los usuarios locales a ser usuarios del dominio, por lo que los servicios estaban configurados con la referencia antigua. Aún cambiando las identidades de todos los pool de aplicaciones y los servicios windows me seguía dando el error.

La solución consistió en entrar en la administración central > Operaciones > Servicios del servidor, seleccionar “Office Sharepoint Server Search” y cambiar las credenciales del servicio con un usuario del dominio y un iisreset.

Espero que os sirva.

 

Los errores que me daban eran:

Event Type:    Error
Event Source:    Office SharePoint Server
Event Category:    Servicios compartidos de Office Server
Event ID:    6481
Date:        18/02/2009
Time:        11:27:21
User:        N/A
Computer:    W2K3R2
Description:
No se pudo ejecutar el trabajo del servidor de aplicaciones para la instancia de servicio Microsoft.Office.Server.Search.Administration.SearchServiceInstance (b4b27e04-22fb-4be0-86f3-2dbb418adbc1).

Motivo: Exception from HRESULT: 0x80040D1B

Detalles de soporte técnico:
System.Runtime.InteropServices.COMException (0x80040D1B): Exception from HRESULT: 0x80040D1B
   at Microsoft.Office.Server.Search.Administration.SearchServiceInstance.SynchronizeDefaultContentSource(IDictionary applications)
   at Microsoft.Office.Server.Search.Administration.SearchServiceInstance.Synchronize()
   at Microsoft.Office.Server.Administration.ApplicationServerJob.ProvisionLocalSharedServiceInstances(Boolean isAdministrationServiceJob)

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

 

 

Event Type:    Error
Event Source:    Office SharePoint Server
Event Category:    Servicios compartidos de Office Server
Event ID:    6482
Date:        18/02/2009
Time:        11:27:36
User:        N/A
Computer:    W2K3R2
Description:
No se pudo ejecutar el trabajo de administración del servidor de aplicaciones para la instancia de servicio Microsoft.Office.Server.Search.Administration.SearchAdminSharedWebServiceInstance (75449392-d46b-4c1a-9604-8997018cdb3d).

Motivo: El nombre de cuenta especificado no es válido.
Parameter name: account

Detalles de soporte técnico:
System.ArgumentException: El nombre de cuenta especificado no es válido.
Parameter name: account ---> System.Security.Principal.IdentityNotMappedException: Some or all identity references could not be translated.
   at System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess)
   at System.Security.Principal.NTAccount.Translate(Type targetType)
   at Microsoft.Office.Server.Utilities.WindowsSecurity.ValidateAccount(NTAccount account, Boolean throwIfInvalid)
   --- End of inner exception stack trace ---
   at Microsoft.Office.Server.Utilities.WindowsSecurity.ValidateAccount(NTAccount account, Boolean throwIfInvalid)
   at Microsoft.Office.Server.Administration.SharedAccessRule.Validate()
   at Microsoft.Office.Server.Administration.SharedComponentSecurity.SetAccessRule(SharedAccessRule accessRule)
   at Microsoft.Office.Server.Administration.SharedResourceProvider.GetApplicationSecurity()
   at Microsoft.Office.Server.Administration.SharedWebServiceInstance.ProvisionSharedResourceProviderWebConfigSettings(SharedResourceProvider srp)
   at Microsoft.Office.Server.Administration.SharedWebServiceInstance.Synchronize()
   at Microsoft.Office.Server.Administration.ApplicationServerJob.ProvisionLocalSharedServiceInstances(Boolean isAdministrationServiceJob)

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.