……Marco Valli's Blog……

Internet, Tecnologia e SharePoint!!!

Custom Forms & Attachment: Finalmente la soluzione!!


Dopo un bel po’ di tempo in cui non ne ho avuto bisogno, oggi si è ripresentata l’esigenza di creare una semplice custom newform in una lista di sharepoint e fin qui nessun problema.. La questione è nata quando mi è stata comunicata l’esigenza di avere anche gli attachment per ogni elemento della lista… e mi sono subito tornati alla mente i mille tentativi per far funzionare questa funzionalità (tutti andati a vuoto…)…

Senza perdermi d’animo mi sono detto "sicuramente in questi mesi si saranno accorti del bug e lo avranno risolto!" ma dalle prime ricerche fatte su google le mie speranze sembravano svanite, l’unica soluzione trovata era questa mostruosa soluzione (anche se probabilmente funzionante… non mi sono neanche azzardato a testarla..).

Ho quindi constinuato la mia ricerca (più che altro per non dover fare qualche tentativo con la procedura di cui sopra…) e, sorpresa delle sorprese: la soluzione al problema esiste ed è targata Microsoft!!!!

Questo è il link alla soluzione originale:

http://support.microsoft.com/kb/953271

La soluzione si compone di due operazioni:

1) installare l’infrastructure update di sharepoint che potete trovare QUI

2) effettuare queste modifiche al codice delle custom form:

      • Trovare quests stringa:

<xsl:template name="dvt_1">
                                <xsl:variable name="dvt_StyleName">ListForm</xsl:variable>
                                <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
                                <table border="0" width="100%">
                                                <xsl:call-template name="dvt_1.body">
                                                                <xsl:with-param name="Rows" select="$Rows"/>
                                                </xsl:call-template>
                                </table>
                </xsl:template>

E sostituirla con questa:

<xsl:template name="dvt_1">
                <xsl:variable name="dvt_StyleName">ListForm</xsl:variable>
                <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
                <div>
                                <span id="part1">
                                                <table border="0" width="100%">
                                                                <xsl:call-template name="dvt_1.body">
                                                                                <xsl:with-param name="Rows" select="$Rows"/>
                                                                </xsl:call-template>
                                                </table>
                                </span>
                                <SharePoint:AttachmentUpload runat="server" ControlMode="Edit"/>
                                <SharePoint:ItemHiddenVersion runat="server" ControlMode="Edit"/>
                </div>
</xsl:template>

Questa modifica va effettuata sia nella nuova NewForm che nella nuova EditForm..

  • Trovare questa stringa:

<xsl:if test="$dvt_1_automode = ‘1’" ddwrt:cf_ignore="1">

e appena sopra questa stringa (non sostituitela!!) incollare questo codice (SOLO per la EditForm):

<tr id="idAttachmentsRow">
<td nowrap="true" valign="top" class="ms-formlabel" width="20%">
   <SharePoint:FieldLabel ControlMode="Edit" FieldName="Attachments" runat="server"/>
  </td>
    <td valign="top" class="ms-formbody" width="80%">
     <SharePoint:FormField runat="server" id="AttachmentsField" ControlMode="Edit" FieldName="Attachments" __designer:bind="{ddwrt:DataBind(‘u’,’AttachmentsField’,’Value’,’ValueChanged’,’ID’,ddwrt:EscapeDelims(string(@ID)),’@Attachments’)}"/>
                       <script>
var elm = document.getElementById("idAttachmentsTable");
        if (elm == null || elm.rows.length == 0)
          document.getElementById("idAttachmentsRow").style.display=’none’;
                      </script> </td>
     </tr>

oppure con questo: (SOLO per la NewForm)

<tr id="idAttachmentsRow">
<td nowrap="true" valign="top" class="ms-formlabel" width="20%">
   <SharePoint:FieldLabel ControlMode="New" FieldName="Attachments" runat="server"/>
  </td>
    <td valign="top" class="ms-formbody" width="80%">
     <SharePoint:FormField runat="server" id="AttachmentsField" ControlMode="New" FieldName="Attachments" __designer:bind="{ddwrt:DataBind(‘i’,’AttachmentsField’,’Value’,’ValueChanged’,’ID’,ddwrt:EscapeDelims(string(@ID)),’@Attachments’)}"/>
                       <script>
var elm = document.getElementById("idAttachmentsTable");
        if (elm == null || elm.rows.length == 0)
          document.getElementById("idAttachmentsRow").style.display=’none’;
                      </script> </td>
     </tr>

 

  • Per quanto riguarda la DisplayForm invece seguire questi semplici passi:

Aprire la custom form

Inserire una riga nel punto in cui si vuole visualizzare gli allegati

Inserire l’etichetta Attachments

cliccare nel punto in cui dovrà apparire l’allegato e passare alla visualizzazione codice, quindi incollare questa stringa:

<SharePoint:AttachmentsField ControlMode="Display" FieldName="Attachments" runat="server" Visible="true"/>

 

Seguendo queste istruzioni ho risolto il mio problema ed ora gli allegati funzionano correttamente anche customizzando la pagine di inserimento/editing/visualizzazione di una lista!!!

 

Enjoy!!!! 🙂

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: