Mostrando entradas con la etiqueta Formulario. Mostrar todas las entradas
Mostrando entradas con la etiqueta Formulario. Mostrar todas las entradas

domingo, 10 de diciembre de 2017

Botón de adjuntar documentos

Trabajando con SharePoint 2013 es común que cuando utilizamos una lista como formulario, nos digan: "Pero quiero que también se pueda adjuntar documentos..."

Esto se debe a que el botón de adjuntar se encuentra en la Ribbon superior dentro del menú Editar y si no se tiene conocimiento de SharePoint no es intuitivo encontrarlo:


Para ello, lo que suelo hacer es crear una vista de datos del formulario de nuevo elemento. Lo cual me permite personalizarlo tal y como nos lo pidan. Y adicionalmente, puedo hacer dos cosas para solucionar el problema del adjunto.

La primera es utilizar la función de Javascript UploadAttachment() que hace exactamente lo mismo que la opción adjuntar de la Ribbon superior. En teoría se puede utilizar con enlace o como botón:

<a href="javascript:UploadAttachment()">Attach File</a>

<button onclick="javascript:UploadAttachment()">Attach File</button>

Lo cierto es que la opción button, suele presentar un comportamiento anómalo, del cual desconozco el motivo y lo que suelo hacer es falsear el enlace para que parezca un botón:

<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader">
<nobr>Adjuntar archivo
</nobr>
</H3>  
</td>
<td width="200px" valign="top">
<a href="javascript:UploadAttachment()" style="border:1px solid #ababab;padding:5px;text-decoration:none;color:#444;">Adjuntar archivo</a>
</td>
</tr>

Y esto nos genera un botón como:



Que tras hacer clic nos presenta el formulario de selección:


Y nos mostrará los elementos adjuntados:


La otra opción es mostrar directamente el formulario de selección en el formulario de nuevo elemento. Para ello bastará con el siguiente código:

<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader">
<nobr>Adjuntar</nobr>
</H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<table>
<tr>
<td valign="top" class="ms-formbody" id="attachmentsOnClient" style="width: 300px">
<span dir="ltr">
<input type="file" name="fileupload0"  id="onetidIOFile" size="20" title="Name"></input>
</span>
</td>
<td width="100px" valign="top" class="ms-formbody">
<input name="Button1" type="button" value="Adjuntar" onclick='OkAttach()' style="width: 6em;" />
<span id="idSpace"></span>
</td>
</tr>
</table>
</td>
</tr>

Esto nos mostrará lo siguiente:


Y mostrará el comportamiento similar al anterior, con la salvedad de que nos ahorra un clic.

Ambos son igual de validos y facilitan al usuario el poder adjuntar documentos.





sábado, 9 de abril de 2016

Ocultar el campo Título en una lista personalizada de SharePoint

Muchas veces cuando creamos listas en SharePoint son listas concretas, vemos que no nos sirven las plantillas de SharePoint, sino que es más fácil utilizar la plantilla de Lista personalizada e ir añadiendo las columnas necesarias.

En ese caso, hay veces que nuestra lista no necesita una columna de tipo una línea de texto. Pero para sorpresa nuestra, el Tipo de Contenido que tiene por defecto es Elemento, el cual tiene una columna Título de tipo una línea de texto.

Sí hacemos clic en la columna a través de la configuración de la lista, vemos que no nos permite eliminarla, sólo indicar si es obligatoria o no:



Para poder ocultarla podremos hacerlo desde el Tipo de Contenido pero para ello deberemos habilitar la administración de tipos de contenidos. Para ello, lo primero que haremos será acceder a la configuración de la lista y seleccionar la opción de Configuración avanzada:


En la ventana que nos lleva, deberemos seleccionar en la pregunta de permitir la administración de tipos de contenido:


Tras aceptar dicho cambio, podremos ver como nos aparece una nueva zona en la configuración de la lista, destinada a los tipos de contenidos, mostrándonos el tipo del contenido Elemento, sobre el cual podremos hacer clic:


Una vez dentro del tipo de contenido, podremos acceder a la columna Título, que es la columna que queremos ocultar:


Tras ello, ya podremos seleccionar, si la queremos requerida, opcional u oculta, como es nuestro caso:


Esto hará que la columna ya no nos aparezca en los formularios por defecto de la lista (NewForm, EditForm y DispForm).

Mi experiencia con esta columna, me recomienda completarla por medio de un flujo, con el ID o el valor que sea y mostrarla en las vistas de la lista. Ya que esta columna es la que contiene todo el menú de edición, que nos permite acceder al DispForm, EditForm, Flujos, Eliminar... Mientras que la columna Editar, sólo me permite acceder al EditForm:




miércoles, 18 de diciembre de 2013

Sharepoint 2007 y adjuntar elementos en formularios personalizados

Hoy me ha tocado personalizar algunos formularios de nuevo elemento (NewForm.aspx) de algunas listas en un MOSS (SharePoint 2007). Y al comprobar que todo estaba correcto he visto que el componente de adjuntar elementos no funcionaba correctamente.
Daba un error:
Este formulario se ha personalizado no funciona con archivos adjuntos
O:
No se han habilitado los archivos adjuntos en esta lista 

Buscando en San Google he encontrado una entrada del "MVP" Gustavo Velez:
http://support.microsoft.com/kb/953271/es

Como Microsoft suele eliminar sus entradas, replico el contenido que Gustavo nos comenta y que funciona a la perfección:

En el código XSL que hemos generado al insertar nuestro formulario personalizado, buscaremos:

<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>

Y lo reemplazamos por:

 <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>

Teniendo en cuenta que el ControlMode, si estamos personalizando un formulario de nuevo tendrá el valor New.

Lo siguiente a buscar es la línea:

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

Y justo antes de ella, insertamos:

<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>

Teniendo en cuenta otra vez, que si estamos en un formulario de nuevo elemento, ControlMode tendrá el valor de New y _designer:bind, tendrá como primer parámetro "i" (insert), en lugar de "u" (update) que se utilizaría para los formularios de edición.

Tras esto, guardamos nuestro formulario y magia... Ya se adjuntan los documentos.

Y para ver los documentos adjuntos en un formulario de vista de datos (DispForm.aspx) bastaría con añadir:

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

Nota: Vuelvo a recordar que no he inventado la rueda. Esto es una copia del artículo de Gustavo Velez que a mi me ha resultado muy útil.