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

sábado, 13 de septiembre de 2014

Cómo usar el plugin SPWidgets para subir documentos vía Jquery/SPServices en Sharepoint 2010

En nuestra página agregamos las referencias a los siguientes archivos:

jquery.js (http://jquery.com/download/)

jquery.SPServices.min.js (http://spservices.codeplex.com/)

jqueryui.min.js (http://jqueryui.com/download/)

/_layouts/1033/init.js

/_layouts/1033/sp.core.js

/_layouts/1033/sp.runtime.js

/_layouts/1033/sp.js

jquery.SPWidgets.min.js  (http://purtuga.github.io/SPWidgets/)

Después agregar las referencias a los archivos css de jQueryUI

En nuestra página agregamos un anchor que levante el siguiente popup

image

Para realizar esto, agregamos el siguiente div en nuestro código html

<div id="dialog-AddAttachments" title="Agregar adjuntos" style="display:none">   
        <b>Seleccione un archivo y presionar adjuntar.</b></br></br></br>

        <div style="height:350px;width:100%;padding:.5em;" id="file_upload"></div>

</div>

$( "#dialog-AddAttachments" ).dialog({
                autoOpen: false,
                resizable: false,
                draggable: false,
                width:450,
                height:180,
                modal: true               
});

El código anterior levanta el popup

$("#file_upload").SPControlUpload({
                listName: 'Documentos',               
                noFileErrorMessage: "No hay un archivo seleccionado!",
                selectFileMessage: "Click aquí para agregar un attachement...",
                uploadDoneMessage: "Se subió correctamente el archivo!",              
                onUploadDone: function(file){
                   
                }
});
El código anterior permite configurar el div para que el usuario pueda subir archivos a la librería “Documentos”.

image

Cómo usar el plugin SPWidgets para buscar usuarios con Jquery/SPServices (javascript people picker)

En nuestra página agregamos las referencias a los siguientes archivos:

jquery.js (http://jquery.com/download/)

jquery.SPServices.min.js (http://spservices.codeplex.com/)

jqueryui.min.js (http://jqueryui.com/download/)

/_layouts/1033/init.js

/_layouts/1033/sp.core.js

/_layouts/1033/sp.runtime.js

/_layouts/1033/sp.js

jquery.SPWidgets.min.js  (http://purtuga.github.io/SPWidgets/)

Después agregar las referencias a los archivos css de jqueryUI

En nuestra página agregamos un textbox con un icono de usuario, que al hacer click se muestra el siguiente popup

image

image

Para hacer esto, debermos tener el siguiente div.

<div id="dialog-message" title="Buscar usuario" style="display:none">   
        <b>Busque por mail,por sigla o por nombre. Es necesario al menos 3 caracteres para iniciar la búsqueda.</b></br></br></br>

        <input name="users" value="" style="width:350px!important" >   
</div>

Dentro del document.ready de jquery ejecutamos el siguiente código de javascript, que permite agregar toda la funcionalidad de búsqueda de usuarios estilo people picker de Sharepoint.

$("input[name='users']").pickSPUser({
        allowMultiples: false,
        meKeyword: "[me]",
        meKeywordLabel: "Current User",
        onPickUser: function(person){           
            var mail = GetMailfromSigla(person.accountName );
            if (mail != "")
                $('#' + inputSearchSelect).val(mail);
           
            $( "#dialog-message" ).dialog('close');
        }                     
    });       

En el caso que quieramos limpiar la búsqueda, podemos ejecutar el siguiente script.

$("input[name='users']").pickSPUser("method", "clear");

image

domingo, 7 de septiembre de 2014

Enviar un mail desde javascript en Sharepoint 2013 on-premise mediante jquery

Sharepoint 2013 tiene una API llamada /_api/SP.Utilities.Utility.SendEmail que permite llamarla desde cualquier aplicativo, ya que es un servicio REST. Ej: desde un workflow en Sharepoint Designer 2013, aplicación web (java/php/etc).

Reemplaza las secciones en rojo. Es importante que el TO tiene que ser un usuario de AD, porque de otra manera fallará el envio. La prueba se realizó sobre un Sharepoint 2013 con el acumulativo de junio.


    var urlTemplate = siteurl + "/_api/SP.Utilities.Utility.SendEmail";
    var siteurl = _spPageContextInfo.webServerRelativeUrl;
    var urlTemplate = siteurl + "/_api/SP.Utilities.Utility.SendEmail";
    $.ajax({
       contentType: 'application/json',
       url: urlTemplate,
       type: "POST",
       data: JSON.stringify({
           'properties': {
               '__metadata': { 'type': 'SP.Utilities.EmailProperties' },
               'From': "mail@mail.com",
               'To': { 'results': ["DOMINIO\\usuarioAD"] },
               'Body': "Acá va el código del body",
               'Subject': "Prueba desde javascript"
           }
       }
     ),
       headers: {
           "Accept": "application/json;odata=verbose",
           "content-type": "application/json;odata=verbose",
           "X-RequestDigest": $("#__REQUESTDIGEST").val()
       },
       success: function (data) {
          alert("Se envió el mail correctamente");
       },
       error: function (err) {
           alert(err.responseText);
           debugger;
       }
    });

Cree una página y agregué un script edito, que linkea a la librería de jquery y agregué el código de arriba. Al publicar la página me aparece lo siguiente.

image

Si reviso mi outlook, veo lo siguiente.

image

image

En el caso que quieras enviar a un grupo, revisa el siguiente KB:

http://support.microsoft.com/kb/2839070/es

domingo, 6 de julio de 2014

Función “SP.SOD.executeFunc” en Sharepoint 2013

Es un método (SP.SOD.executeFunc(key, functionName, fn)) que nos disponibiliza Sharepoint que nos asegura que el archivo especificado (key) que contiene la función específica (functionName) es cargada y después ejecuta la callback function (fn). Un caso de uso para “SP.SOD.executeFunc” podría ser que se cargue la librería específica (Ej: jquery) antes de llamar a una función definida que hace uso de la misma. Esta forma de ejecución se llama “Script on Demand”.

Este método es el recomendado para Sharepoint 2013 en vez de el método “ExecuteOrDelayUntilScriptLoaded” que era el recomendado en 2010.

Veamos algunos ejemplos, e issues con algunas funciones relacionadas

Primero veo que en el sitio donde estoy haciendo las demos, la feature de publishing feature está deshabilitada. El site es de tipo “Developer Site”

image

Agrego un web part de script,

image

Agrego el siguiente código

<script language="javascript">
SP.SOD.executeOrDelayUntilScriptLoaded(function () { alert('SP.js se cargo bien'); }, 'SP.js');
</script>

El método SP.SOD.executeOrDelayUntilScriptLoaded(func, depScriptFileName) usa un procedimiento llamado “Delay until …” que ejecuta la función específica (func) si el archivo (depScriptFileName) contenido es cargado, lo agrega a una cola (queue) de carga.

image

Al guardar la página, veo que me lanza el popup

image

Pero que pasa si activo la feature “Sharepoint Server Publishing Infraestructure”

image

Veo que también se carga correctamente

image

Ahora activo la  feature “Sharepoint Server Publishing”

image

Entro a la librería “Pages”

image

y creo una publishing page (Article Page)

image

image

Agrego de nuevo un script web  part

image

y agrego de nuevo el código script

<script language="javascript">
SP.SOD.executeOrDelayUntilScriptLoaded(function () { alert('SP.js se cargo bien'); }, 'SP.js');
</script>

Y de nuevo se ejecutó bien.

image

Que pasa si yo uso solamente ExecuteOrDelayUntilScriptLoaded, sin SP.SOD. Este era el método en 2010 que se usaba para esperar hasta que se cargue la librería definida en el método.

El script de nuevo funciona perfecto.

Ahora voy a crear un sitio de tipo Publishing Portal

image

Y hago los mismos pasos, esta vez ejecuto con SP.SOD.executeOrDelayUntilScriptLoaded

image

IMPORTANTE: Sin publicar la página, el script anda perfecto. En estado draft anda bien.

image

IMPORTANTE: Una vez que publico la página (Publish this draft) y el script DEJO de funcionar por algún motivo. NO me lanza el popup que lanzaba antes.

image

Si yo edito la página, si me aparece el popup antes de pasar a diseño. “Cosas de Sharepoint”, jeje

Cómo podemos hacer que funcione nuestro código de javascript en cualquier sitio?? Usando el método “SP.SOD.executeFunc”

<script language="javascript">
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () { alert('SP.js se cargo bien'); })
</script>

Ahora todo funciona perfecto, en cualquier sitio, y con cualquier feature activada.

image

Que pasa si ahora activo la feature “Minimal Download Strategy”, una feature que carga porciones solamente si tiene cambios. Es una feature que ocaciones a veces problemas con código javascript. La activo y veo que

image

Y veo que también funciona perfecto

image

IMPORTANTE: siempre usa SP.SOD.executeFunc para ejecutar tu código javascript. (Script on Demand)

Tips adicional: cómo cargar jquery y custom.js de forma correcta.

Subimos la librería de jquery a la librería “Site Assets”

image

image

Agrego un web part de script y agrego el siguiente código de javascript

<script language="javascript">
SP.SOD.registerSod('jquery', this.L_Menu_BaseUrl + "/SiteAssets/jquery.js");
SP.SOD.executeFunc("jquery", null, function () {
    alert('Se cargo bien jquery, ejecuto mi código jquery');   
});
</script>

image

Que pasa si tenemos nuestro código dentro de un archivo js, ej: app.js

image

Ej: en el archivo app.js tengo lo siguiente

function EjecutarCodigoJquery()
{
    $(document).ready(function() {
        document.title = 'Custom jquery title';
    });
}

Podemos cargar el código de la siguiente manera en el script web part:

<script language="javascript">
    SP.SOD.registerSod('jquery', this.L_Menu_BaseUrl + "/SiteAssets/jquery.js");
    SP.SOD.registerSod('appcustom', this.L_Menu_BaseUrl + "/SiteAssets/app.js");
    RegisterSodDep('appcustom', 'jquery');
    SP.SOD.executeFunc("appcustom", null, function () {
            EjecutarCodigoJquery();
    });

</script>

Guardando la página veo que se cambio el título de la página (document.title = 'Custom jquery title')

image

viernes, 20 de junio de 2014

Agregar jquery.js, custom.js y custom.css en cada página de Sharepoint 2013

Siempre necesitamos tener jquery disponible en cada página o agregar javascript/css custom, ej: ocultar Newsfeed y OneDrive en un ambiente On-premise (en un próximo post). Voy a estar usando la feature de delegate control: http://msdn.microsoft.com/en-us/library/office/ms478826(v=office.15).aspx

Especificamente voy a usar “AdditionalPageHead”: http://msdn.microsoft.com/en-us/library/office/ms470880(v=office.14).aspx

Iniciamos, creando una solución de Visual Studio (SharePoint 2013 empty project)

image

Seleccionar “farm solution”

image

Agregamos un user control

image

image

En el user control agrego lo siguiente:

<script type="text/javascript" src="/_layouts/15/jquery.js" />
<script type="text/javascript" src="/_layouts/15/custom.js" />
<link id="CssRegistrationCustom" rel="stylesheet" type="text/css" href="/_layouts/15/Styles/custom.css"/>

image

Más adelante le explico porqué está mal este código (específicamente el cierre del tag script). A continuación agrego un elemento vacio (Empty element)

image

En el mismo agrego lo siguiente

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Control Id="AdditionalPageHead"
           Sequence="100"           ControlSrc="~/_controltemplates/15/SPCustomDeployment/customfiles.ascx" />
</Elements>

image

image

Ahora verifico que la feature se deploye a nivel Web

image

image

Después mapeo la carpeta Layouts (Sharepoint “Layouts” Mapped Folder)

image

Y agrego los archivos jquery.js, custom.js y custom.css (dentro de la carpeta styles)

image

Deployo la solución

image

Mientras se está debuggeando me lanza el siguiente error: 0x800a1391 - JavaScript runtime error: 'theForm' is undefined

image

Por algún motivo (cómo les comenté antes) no le gusta el NO cierre completo del tag script (yo use <script  /> en vez de <script></script>). Lo que hice es utilizar los controles ScriptLink y CssRegistration .

<SharePoint:ScriptLink ID="ScriptLinkJquery" Name="/_layouts/15/jquery.js" runat="server"  Language="Javascript"/>
<SharePoint:ScriptLink ID="ScriptLinkCustom" Name="/_layouts/15/custom.js" runat="server" Language="Javascript"  />
<SharePoint:CssRegistration  ID="CssRegistrationCustom" Name="/_layouts/15/Styles/custom.css" runat="server" After="corev15.css" />

image

Deployo de nuevo, y veo que se agregó correctamente el código en el html generado

image

Miren que custom.css se agregó después de cov15.css, ya que use la propiedad after

image

También verifico si quedó bien el nombre de la feature y la descripción.

image

image

También verifico que los archivos se hayan agregado los archivos correctamente el el filesystem

image

image

image

path de features

image

Ahora para verificar que se haya cargado correctamente jquery, usamos un script editor web part.

image

image

Guardo la página y me aparece el popup

image

Sin lugar a dudas las funcionalidades de Delegate Control son muy poderosas. Voy a a estar haciendo algunos post relacionados a este, tales como ocultar “Newsfeed” y “OneDrive” en un ambiente on-premise.