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)

Un comentario sobre “SharePoint – Destripando el Wiki (1)”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *