SharePoint – Destripando el Wiki (1)

Mucha gente me ha preguntado sobre la posibilidad de realizar cambios en el diseño del Wiki de SharePoint. (¿Será porque en una de mis demos enseño un Fantástico Wiki?), bueno, la respuesta es… que no se puede cambiar grrrr y explicaré  porque no.

¿Cómo está construido el Wiki de SharePoint?

El wiki de sharepoint, es una biblioteca de documentos que maneja un tipo de contenido oculto WikiDocument.



La definición XML



   1:  <ContentType ID=»0x010108″
   2:          Name=»$Resources:WikiDocument»
   3:          Group=»_Hidden»
   4:          Description=»$Resources:WikiDesc»
   5:          Version=»0″>
   6:          <FieldRefs>
   7:              <RemoveFieldRef ID=»{fa564e0f-0c70-4ab9-b863-0177e6ddd247}» Name=»Title» />
   8:              <FieldRef ID=»{c33527b4-d920-4587-b791-45024d00068a}» Name=»WikiField» />
   9:          </FieldRefs>
  10:          <XmlDocuments>
  11:              <XmlDocument NamespaceURI=»http://schemas.microsoft.com/sharepoint/v3/contenttype/forms»>
  12:                  <FormTemplates xmlns=»http://schemas.microsoft.com/sharepoint/v3/contenttype/forms»>
  13:                      <Display>DocumentLibraryForm</Display>
  14:                      <Edit>WikiEditForm</Edit>
  15:                      <New>WikiEditForm</New>
  16:                  </FormTemplates>
  17:              </XmlDocument>
  18:          </XmlDocuments>
  19:          <DocumentTemplate TargetName=»/_layouts/CreateWebPage.aspx» />
  20:      </ContentType>



Cuando creamos una nueva página lo que hace sharepoint es pedirnos que rellenemos los campos a través del formulario /_layouts/createwebpage.aspx, está página nos pedirá que introduzcamos los campos Título, que asignará al documento y Contenido (WikiField) que será el contenido de nuestra nueva página.




Además si hemos añadido campos personalizados a la biblioteca de documentos, también nos pedirá que rellenemos estos.
El meollo de CreateWebPage.aspx se encuentra en la parte en que se crea el formulario:



   1:      <TABLE class=»ms-formtable» style=»margin-top: 8px;» border=0 cellpadding=0 cellspacing=0 id=»formTbl» width=100%>
   2:          <TR>
   3:              <TD valign=»top» class=»ms-formbody» width=»625px»>
   4:                      <b>
   5:                      <label for=»<%=Name.ClientID%>»>
   6:                      <SharePoint:FieldLabel FieldName=»FileLeafRef» ControlMode=»New» runat=»server»/>
   7:                      </label>
   8:                      </b>&nbsp;
   9:                      <asp:TextBox id=»Name» name=»Name» runat=»server» /> 
  10:                      <SPAN class=»ms-authoringcontrols»></SPAN>
  11:                      <wssawc:UrlNameValidator ID=»CusValSiteName» ControlToValidate=»Name» runat=»server»/>
  12:                      <br />
  13:                      <span class=»ms-formvalidation»>
  14:                      <asp:Label id=»Error» name=»Error» runat=»server» />
  15:                      </span>
  16:              </TD>
  17:          </TR>
  18:          <SharePoint:ListFieldIterator TemplateName=»WideFieldListIterator» 
  19:              ExcludeFields=»FileLeafRef» ControlMode=»New» runat=»server»/>
  20:      </TABLE>


Por un lado va el título, que es el nombre del documento (línea 9), con su validador que se encargará de comprobar que no exista ya un documento en la biblioteca con el mismo nombre (línea 11)  y después el resto de los campos que se renderiza mediante el control de Sharepoint ListFieldIterator (líneas 18 y 19)



En el momento en el que hacemos el submit de es este formulario, sharepoint copiará la plantilla contenida en C:… Microsoft Sharedweb server extensions12TEMPLATEDocumentTemplates llamada wkpstd.aspx en la biblioteca de documentos asignandole como nombre el que hemos especificado, de modo que todas las páginas de nuestro wiki en realiadad son la misma ya que el contenido se aloja en la lista.



Wkpstd.aspx es la plantilla a través de la cual visualizamos las páginas Wiki.



A priori, para cambiar el diseño de nuestro Wiki, bastaría con modificar el diseño de esta página, pero el problema es que cambiarían todos los wikis de nuestro portal.
Si vemos como está construido wkpstd.aspx veremos que es una simple página que nos muestra el contenido de los datos de la lista, la parte interesante se encuentra dentro del PlaceHolderMain



   1:  <asp:Content ContentPlaceHolderId=»PlaceHolderMain» runat=»server»>
   2:      <SharePoint:FormField FieldName=»WikiField» ControlMode=»Display» runat=»server»/>
   3:      <TABLE class=»ms-formtable» border=0 cellpadding=0 id=»formTbl» cellspacing=0 width=100%>
   4:              <SharePoint:ListFieldIterator
   5:                          ControlMode=»Display»
   6:                          TemplateName=»WideFieldListIterator»
   7:                          ExcludeFields=»FileLeafRef;#WikiField»
   8:                          runat=»server»/>
   9:      </TABLE>
  10:      <WebPartPages:WebPartZone runat=»server» FrameType=»None» ID=»Bottom» Title=»loc:Bottom» />
  11:      <table border=0 cellpadding=2 cellspacing=0 width=100%&gt;
  12:          &lt;tr>
  13:              <td class=»ms-descriptiontext» ID=onetidinfoblock2>
  14:                  <SharePoint:FormattedString FormatText=»<%$Resources:wss,form_modifiedby%>» runat=»server»>
  15:                      <SharePoint:FormField ControlMode=»Display» FieldName=»Modified» runat=»server»/>
  16:                      <SharePoint:FormField ControlMode=»Display» FieldName=»Editor» runat=»server»/>
  17:                  </SharePoint:FormattedString>
  18:              </td>
  19:          </tr>
  20:      </table>
  21:  </asp:Content>



En donde se renderiza el campo WikiField primero y después el resto de los campos a excepción del nombre y del propio WikiField. (el truki del WikiField lo coemntamos más tarde)


Aquí podemos trastear para ver como los cambios hechos en esta página afectan al diseño de la página Wiki. (Guardar siempre una copia de la página original)

Libros de Sharepoint (2)

Estos días, he terminado de leer dos libros de SharePoint.

Microsoft Office SharePoint Server 2007 Administrator’s Companion que es un libro imprescindible con muy buenos consejos y prácticas que todo administrador de Sharepoint debería leer. El libro está escrito por Bill English y varios MVPs de SharePoint. Aunque su tamaño asuste (1200 páginas), no tiene desperdicio, cubre todos los aspectos de MOSS y está muy bien escrito. Es un libro que recomiendo tener encima de la mesa.




El otro es Microsoft SharePoint: Building Office 2007 Solutions in C# 2005 (Expert’s Voice in Sharepoint) de Scot Hillier, MVP  de Sharepoint, el cual hace una introducción a diferentes aspectos de la programación en MOSS, como Workflows con Visual Studio, WebParts, vinculación con Office 2007. Otro libro muy recomendado para los que se pegan con la programación en MOSS.


 

Historas, pdas y blackberrys

Buff, han pasado muchos dispositivos móviles por estos bolsillos, desde mi primer teléfono móvil un Nokia 232 (que era una gozada) a un segundo con la entrada del GSM, el Nokia 2110, después un 8110 como el de Matrix y después un 6210 y un 6310 y un sin fin de etc..


   


 
Más tarde tuve una Palm m500 a la vez que el teléfono lo cual me permitía tener mi agenda sincronizada con el PC, después de la Palm vino una PDA con Windows CE y más tarde un PDA con Windows CE y teléfono, que parecía la solución definitiva, pero que no lo fue.



Se colgaba en exceso y coger el correo por gprs era carisisisismo, en aquel entonces, además el correo solo podía cogerlo de una cuenta POP3 y la sincronización con el Exchange solo se hacía conectando el cacharrito en su cuna.



Pero un buen día aparecieron las Blackberrys, feas, feísimas, pero hacían las dos cosas más importantes para mí y lo hacían bien. El teléfono y el correo. Con el BES tenía todo mi outlook movilizado, contactos, email, notas, calendario y tareas.  Y una vez que te acostumbrabas a la ruedita y superabas el tema del tamaño y el diseño, eras el hombre más feliz del mundo.



Paso el tiempo, y Microsoft incorporo el correo push al Exchange, los dispositivos fueron mejorando y desde entonces he probado algunos pero finalmente me quedaba con la black.




Tengo una qtek 9100 que me regalo un amigo y que uso en casa. Mi qtek 9100 tiene cámara de fotos y ranura de expansión mini SD, en la cual llevo libros, mapas, música y un sin fin de aplicaciones (4gb). Algunas que me vuelven loco de felicidad, como el lector de feeds (Sbp Insight), la calculadora financiera (PowerOne finance), el diccionario de inglés Collins, el lector de CHM, (CHM eBook Reader), el Explorardor de archivos de Resco (Resco Explorer 2007) y un sin fin de maravillosas aplicaciones…



Pero, pero, en el día a día, no me encuentro tan cómodo, la notificación sonora de los mensajes no se puede independizar del resto, de manera que cuando esta se encuentra en un volumen alto, el cacharrito de marras pita cada vez que haces algo, el llamar por teléfono, requiere de las dos manos con lo cual de vez en cuando te encuentras haciendo malabares, llamar a veces es un infierno.



Y en cuanto al correo, no logro superar el hecho de que solo te informe de los mensajes que entran en la bandeja de entrada. Con la cantidad ingente de reglas que tengo para que todo quede perfectamente archivado, mi maravillosa black, te notifica siempre que te llegue un mensaje a cualquiera de las carpetas, sin embargo mi qtek (Outlook mobile) NO.



Esta semana la he actualizado con el Windows Mobile 6 con la esperanza de que hubieran resulto este problema, pero no…



Así como supongo que os pasa a más de uno, me entra la (CDT) Crisis del Diseño Tecnológico en su versión Soft, que podría ser algo como (MAP) Manía al Programador, que lo hizo y que tiene su antónimo, en un (GAG) Gracias al Gurú de turno, por encontrar un Workarround, ó en un (GAUM) Gracias a la utilidad de marras que me ha salvado la vida.



Pero sigo sin encontrar al GAG ni la GAUM, de modo que continuaré con mi black en el bolsillo…

Fin de semana virtual (izando)

No me he podido aguantar, el viernes pasado mientras explicaba cómo realizar una extranet con SharePoint, estábamos trabajando con todos los equipos de producción virtualizados con VMWare ESX.

Realmente me quede impresionado con el rendimiento, y las capacidades del ESX. Así que ayer sábado mientras ordenaba mi despacho, me baje el ESX y la licencia de demo de la página de VMWare.

Lo instalé en apenas 15 minutos en un HP Proliant ML350 g4p con un Xeon a 3Ghz, 2Gb de Ram, y 3x72Gb en RAID 5, es un servidor que utilizo para pruebas y en donde tenía ahora algunas máquinas virtuales con VMWare Server.



Las máquinas virtuales que tenía las convertí con el VMWare converter, una vez convertidas las pasa él solito al ESX. Pasé las 4 máquinas virtuales, de mi banco de pruebas, las cuales no suelo ejecutar a la vez porque el  rendimiento es penoso.

– Isrv – Active directory + sql server 2005
– Imoss – Microsoft Office SharePoint Server 2007
– Icrm – Microsoft CRM
– Imail – Microsoft Exchange

Y ya que estábamos, también pase algunas de mis máquinas que tengo en Microsoft Virtual Server, más que nada por ver el impacto que tenía una posible conversión.



La conversión le ha costado desde 45 minutos a una hora y media, dependiendo de la máquina y del  tamaño de los discos.



Una vez realizada he metido las 4 primeras, les he asignado un pool  garantizando 500mhz y 512mb de ram, y las he arrancado todas.

Después de trastear un buen rato, me he quedado impresionado con el rendimiento.

De modo que he añadido el resto de las máquinas que he pasado desde el Virtual Server y en este momento tengo 6 máquinas  funcionando con un rendimiento un poco justo pero funcionando.



Evidentemente  un segundo procesador ayudaría y desde luego más RAM. Entre las grandes ventajas de EXS es que el automáticamente redistribuye los recursos del host (RAM y CPU) entre las distintas máquinas virtuales.




Me queda por probar las copias de seguridad de las máquinas virtuales, que me gustaría hacer esta semana, porque visto el precio que tiene la licencia es probable que finalmente adquiera uno para el datacenter del trabajo.