jueves, 16 de abril de 2009

Como configurar Sharepoint y no morir en el intento

Como configurar Sharepoint (y no morir en el intento)

Me ha gustado mucho este articulo de Leonard André por lo que lo posteo tal cual aquí,
-----
Una de las cosas mas peliagudas al momento de fijar un entorno de desarrollo para Sharepoint Services 3 o Sharepoint Server 2007 es la configuración del servidor, asi que aqui voy a dejar unos tips. Despues los voy a poner con imágenes en una guía mas detallada.
 
1.- Asegurarse que el servidor tenga .net framework 3 (mejor 3.5 SP1), IIS6 o 7 (en caso de ser un servidor Windows Server 2008, el rol de Web Server) y que esté con todos los parches al día. El nombre del servidor debe estar ya fijado por que cambiarlo despues de la instalación es bastante problematico (si alguien sabe de un metodo facil de lograrlo, genial).
 
2.- Si se va a instalar contra SQL Server 2005 o SQL Server 2000 SP4 full, instalar previamente el SQL con la siguiente configuración de Collation:
  • Latin1_General_CI_AS_KS_WS
  • Case insensitive
  • Accent sensitive
  • Kana sensitive
  • Width sensitive

Esto es por que es lo mas parecido a como NTFS maneja los nombres. En el caso de SQL 2008 no es necesario configurar nada ya que este es el Collation por defecto.

3.- Lo mas importante: Las famosas cuentas de instalación. Para instalar Sharepoint se requiere que la cuenta desde la que se ejecuta el instalador tenga los siguientes permisos:

  • Usuario de dominio (Domain User)
  • Administrador local de los Web frontend's (los tarros en los que irá el servicio de web frontend de Sharepoint)
  • Miembro de SQL Server Login (osea debe tener Login en SQL)
  • Miembro de SQL Server DBCreator
  • Miembro de SQL Server SecurityAdmin

Esta cuenta es importante ya que el Sharepoint Products and Services configuration SOLO se puede correr con esta cuenta, ya sea para instalar cosas como los Language Packs, o para reparar la instalación. Si la instalación es mas bien para desarrollo y el servidor va a tener las bases de datos localmente, se puede usar el Administrador Local como cuenta de instalación, pero si se hace esto, despues no se podrán mover las bases de contenido a un SQL Server en otro lugar, salvo con autenticación SQL.

4.- El instalador solicita en un punto una cuenta de servicio. Esta solo debe tener un permiso que es ser una cuenta de dominio (Domain User). Los permisos adicionales son configurados automáticamente por Sharepoint. Estos pasos son muy importantes post SP1, ya que esta cuenta queda como Service Account y si es igual al Administrador local habrán problemas para la ejecución de los workflows producto de la revisión de seguridad indicada en el KB947284

5.- Hay 2 KB que he visto que se repiten mucho en los servidores y que es importante tener en cuenta. Seguramente serán incluidos en Sharepoint Server 2007 SP2:

  • KB949402: Algunas veces, Sharepoint Server 2007 se niega a instalarse en un entorno con SQL 2008. Esto resuelve el problema.
  • KB949752: Forms Services en ocasiones, al trabajar con formularios con muchas fuentes de datos, tiene problemas para parsear los XML internos. Este KB arregla este problema y algunos más.

Espero que esto les ahorre algunos dolores de cabeza.

martes, 14 de abril de 2009

Filtrado CASEINSENSITIVE por propietario para ListItems cargados masivamente

Objetivo:
Filtrar resultados por propietario de forma case insensitive, con sharepoint designer

Ingredientes:
Un parámetro que recoger la server variable del LOGON_USER
Dos variables auxiliares para hacer el uppercase en XSLT
Un translate XSLT para el UPPERCASE

Receta:
El parametro del webpart para obtener el usuario actual

<ParameterBinding Name="UID" Location="ServerVariable(LOGON_USER)" DefaultValue=""/>

No es fácil ni cómodo cambiar el creador de un ListItem ya que es de solo lectura, y si queremos hacer cargas masivas, el creator siempre es SYSTEM, para cambiarlo hay que hacerlo directamente contra la base de datos de contenidos, y no es recomendable.
Esto me hizo optar por usar un campo extra "propietario" (hay que crearlo) para así filtrar elementos por él e inyectarle mediante un integrador los ListItems de forma masiva.

Ahora con la lista cargada, solo tengo que filtrar.

aqui hacemoes el filtrado de Datasource por propietario CASE-INSENSITIVE

<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>

Aquí hacemos la select XPATH filtrando por propietario

<xsl:variable name="Rows" select="/dsQueryResponse/Propuestas/Rows/Row[@Estado = 'SIN CUMPLIMENTAR' and translate(@Propietario,$lcletters,$ucletters) = translate($UID,$lcletters,$ucletters)]" />

Espero os resulte de utilidad, yo lo uso mucho en mis aplicaciones.
http://www.robertomarcos.com/

Calculo de Totales sin usar la función SUM usando XSLT en Sharepoint

Objetivo:
Calcular una columna de totales, con su formateo.


Ingredientes:
Una función XSLT
La llamada a la función call-template
Un DataSet cargado y la selección correcta del conjunto por XPATH

Receta:
Hay que poner la función fuera de los tags xsl-template y así la podemos usar en el webpart
Calculo de totales en sharepoint con una función XLST

LA FUNCIÓN DE TOTALIZACIÓN
<xsl:template name="total">
<xsl:param name="seq"/>
<xsl:param name="total-so-far" select="0"/>
<xsl:choose>
<xsl:when test="$seq">
<xsl:call-template name="total">
<xsl:with-param name="seq"
select="$seq[position()!=1]"/>
<xsl:with-param name="total-so-far"
select="$total-so-far + translate($seq[1],',','.')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-number($total-so-far, '#.##0;-#.##0')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


LA LLAMADA A LA FUNCIÓN
<xsl:call-template name="total">
<xsl:with-param name="seq" select="
dsQueryResponse/Rows/Row/@Total_x0020__x0028_con_x0020_IVA" />
</xsl:call-template>




FUNCIÓN DE TOTALIZACIÓN CON FORMATEO EUROPEO (ver post de formateo numérico)
<xsl:template name="total">
<xsl:param name="seq"/>
<xsl:param name="total-so-far" select="0"/>
<xsl:choose><xsl:when test="$seq">
<xsl:call-template name="total">
<xsl:with-param name="seq"select="$seq[position()!=1]"/>
<xsl:with-param name="total-so-far"select="$total-so-far + translate($seq[1],',','.')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-number($total-so-far, '##0,##;-##0,##','european')"/>
</xsl:otherwise></xsl:choose>
</xsl:template>

FUNCIÓN DE TOTALIZACIÓN DE PORCENTAJES
<xsl:template name="totalPercent">
<xsl:param name="seq"/>
<xsl:param name="total-so-far" select="0"/>
<xsl:choose>
<xsl:when test="$seq">
<xsl:call-template name="totalPercent">
<xsl:with-param name="seq" select="$seq[position()!=1]"/>
<xsl:with-param name="total-so-far" select="$total-so-far + translate($seq[1],',','.')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-number($total-so-far div 100, '##0,## %;-##0,## %','european')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

NOTA: 'EUROPEAN' es un formateo numerico que he definido yo mismo en el webpart y hay que declararlo, puedes ver este post anterior http://sharepointworks.blogspot.com/2009/04/formateo-europeo-de-datos-numericos-en.html

Saludos a toda la comunidad de sharepoint
http://www.robertomarcos.com/

Formateo Europeo de datos numéricos en Sharepoint

Objetivo:
Formateo se datos decimales y numéricos y separador de miles se presente en formato europeo,el separador de miles sea el punto "." y el separador de decimales la coma ","

Ingredientes y Receta:
es necesario en primer lugar reemplazar el tag <xsl:decimal-format NaN="" > por estos dos tags, esto es necesario para cada web part que utilicemos.

<xsl:decimal-format NaN="" decimal-separator=',' grouping-separator='.' />
<xsl:decimal-format name="european" decimal-separator=',' grouping-separator='.' />

Al ponerlo el web part pueden arrojar errores en funciones de formateo
para solventarlo solo hay que Reemplazar la cadena de formateo todas las funciones format number


Buscar "#,##0,00;-#,##0.00" y reemplazar todos por "#.##0,00;-#.##0,00"

Ejemplo 1 Sin decimales y con separador de miles:
Antes:<xsl:value-of select="format-number($total-so-far, '#.##0;-#.##0')"/>
Después:<xsl:value-of select="format-number($total-so-far, '#,##0;-#,##0')"/>

Ejemplo 2 con separador de miles y decimales
Antes:<xsl:value-of select="format-number($total-so-far, '#,##0,00;-#,##0.00')"/>
Después:<xsl:value-of select="format-number($total-so-far, '#.##0,00;-#.##0,00')"/>

Ejemplo 3 Porcentajes:
Antes:<xsl:value-of select="format-number(@Porcentaje_x0020_Amortizacion div 100, &quot;###0,00%;-###0,00%&quot;)" />
Después:<xsl:value-of select="format-number(@Porcentaje_x0020_Amortizacion div 100, &quot;###0.00%;-###0.00%&quot;)" />



Con este truco del translate podemos resolver el problema de que funcionen bien los decimales
<xsl:variable name="americano" >,.</xsl:variable>
<xsl:variable name="europeo">.,</xsl:variable>
<xsl:value-of select="format-number(translate(@PorcentajeEjemplo,$americano,$europeo), "###0,##;-###0,##",'european')" />

Espero os resulte de utilidad, saludos

http://www.robertomarcos.com/

lunes, 6 de abril de 2009

Sharepoint Designer 2007, PRODUCTO GRATUITO

Microsoft ha decidido hacer gratuita la herramienta Sharepoint Designer 2007, con la intención de fomentar el uso de la plataforma Sharepoint.
 
Podéis descargarlo desde la pagina oficial de Microsoft
 
Recordad actualizarlo al SP1.
 
 
 

jueves, 2 de abril de 2009

Personalizar Formularios de Lista SIN sharepoint Designer

Gracias a este magnifico trabajo que ha realizado SharadKumar, podemos realizar personalizaciones de formularios sin customizar uno a uno las paginas aspx asociadas a la lista y mejor aun, todo esto sin utilizar el sharepoint designer.

Blog:http://weblogs.asp.net/sharadkumar/archive/2008/07/29/how-to-customize-sharepoint-forms-part-2.aspx
Proyecto en Codeplex:http://officetoolbox.codeplex.com/

Se trata de una solución para modificar los formularios vinculados a las Listas de sharepoint, la personalizaciones se guardan en una PropertyBag en la Raíz del website, intercepta el renderizado de la plantilla del ListForm y lo muestra como deseamos, por ejemplo como label, o como combo box bloqueado.

Utiliza una pagina (FormSettings.ascx) para reemplazar los controles de campo personalizados.

Instrucciones para utilizar esta funcionalidad.
1º Descargar el paquete (OfficeToolbox.SharePoint.Lists v1.0 )
2º Descomprimirlo e Instalarlo ejecutando Setup.exe en el servidor web que aloja el sharepoint
3º Ir al panel de administración Central de sharepoint> Application Management > Manage Web Application Features
4º Activar el feature
5º Ya esta disponible la opción "Form Settings" en la pagina de propiedades de las Listas de sharepoint
6º Modificamos a nuestro gusto y guardamos.

Roberto Marcos (http://www.robertomarcos.com/)
Blog: http://sharepointworks.blogspot.com/