miércoles, 9 de enero de 2013

JqGrid y la API REST de SharePoint 2013

El motivo de este post es mostrar un ejemplo de como combinar el uso del jqGrid obteniendo datos de una lista de SharePoint a través de la API REST.

Antes que nada, supongo que muchos de ustedes conocen el jqGrid, si no es así, se están perdiendo de un plugin de jquery bastante interesante, muy fácil de usar y con bastantes características como:

  • Formatear celdas
  • Reordenar columnas
  • Menús contextuales para filas
  • Barras de menús personalizadas
  • Carga de datos desde diferentes fuentes como XML, JSON, etc
  • Multiseleccion
  • Resizing
  • Edición en línea
  • Agrupación
  • Búsqueda
  • Paginación
  • Y un largo etcétera.

Lo anterior combinado con la practicidad de la nueva API REST de SharePoint 2013 permite a los desarrolladores crear aplicaciones realmente sorprendentes.

Escenario:
Tengo un sitio de SharePoint con una lista llamada Sales con las columnas y datos que se aprecian en la imagen

Requerimiento:
Es necesario mostrar en una pagina, una vista de la lista utilizando alguna de las características arriba mencionadas, como ordenación, menús contextuales, multiseleccion, etc.

Solución:
Como siempre y para cualquier problema, no hay una solución única, pero yo me inclinaría por usar jqGrid, porque la solución es muy sencilla, fácil de codificar y ni siquiera requiere crear un wsp o una App (cosa que hare en otro post) que se instale y despliegue en la granja.

Solo hare uso de la webpart Script Editor para agregar un poco de HTML y JavaScript a una pagina cualquiera de SharePoint.


A continuación el código completo utilizado:


 



 

 




La explicación:
Primero agregamos algunas referencias a los archivos js y css, tanto del grid como de jquery

 



 

 

Luego agregamos el código para configurar el jqGrid, es decir las columnas, el ordenamiento, etc, etc. y el código para realizar la llamada REST y manejar la respuesta para hacer el Binding de datos JSON con el grid
$(onPageLoad);

//funcion que se ejecuta en el evento onLoad de la pagina
function onPageLoad()
{
 //adjuntamos a el evento onclick del boton 'getSales' la funcion getSales()
 $("#getSales").click(getSales);
   $(document).ready(function () {
   //configuramos el jqGrid
    $("#SalesTable").jqGrid({
    datatype: 'local',
    autowidth: true,
    height: 230,
    colNames: ['ID', 'Order Date', 'Region', 'Representative', 'Item', 'Units', 'Unit Cost', 'Total'],
    colModel: [
     { name: 'ID', index:'ID', width: 80 , sorttype:"int"},
     { name: 'Title', width: 80 , sorttype:"date"},
     { name: 'Region', width: 80 },
     { name: 'Rep', width: 80 },
     { name: 'Item', width: 80 },
     { name: 'Units', width: 80 },
     { name: 'Unit_x0020_Cost', width: 80 },
     { name: 'Total', width: 80 , sorttype:"float"},
    ],
    caption: 'Sales via OData'
  });
   });
}

//funcion que se ejecuta cuando hacemos click en el boton 'Obtener Ventas'
function getSales(){
 //Url REST de la consulta que estamos haciendo, recuperamos los elementos de la lista 'Sales'
 var requestUri = "http://sp2013app/_api/web/lists/getByTitle('Sales')/items/";
 //Se establece el header ACCEPT de manera adecuada
 var requestHeaders={
      "ACCEPT":"application/json;odata=verbose",
 }
 //se realiza la llamada ajax mediante jquery
 $.ajax({
 url: requestUri,    //Url de la consulta a realizar
 type:"GET",      //tipo de la llamada
 contentType:"application/json", //el tipo de contenido que esperamos recuperar, JSON
 headers: requestHeaders,  //headers correctos
 error:onError,      //en caso de error se ejecuta la funcion onError()
 success: onGetSalesSuccess  //en caso de exito, se ejecuta la funcion onGetSalesSuccess()
 }); 
}

//funcion que se ejecuta en caso de que la llamada REST sea exitosa
function onGetSalesSuccess(data){
 if(!data)return;
  //por cada uno de los resultados obtenidos se agrega una fila al jqGrid
  $.each(data.d.results,function(index, value){
   $("#SalesTable").jqGrid('addRowData', value.ID, value);
  });
 $("#SalesTable").jqGrid('SalesTable','#pager2',{edit:false,add:false,del:false});
}

function onError(xhr, status){
 alert(xhr.response.message);
}

Y por ultimo tenemos el código HTML que sirve como contenedor del grid, me refiero al input, la tabla y el div. Solo basta descomentar el código HTML al ser usado


El resultado:


Happy Coding!

0 comentarios:

Etiquetas

SharePoint 2010 (38) Microsoft (32) Desarrollo SharePoint (31) Gerardo Reyes Ortiz (27) SharePoint (20) SharePoint 2013 (18) Errores SharePoint (12) México (10) PowerShell (9) Silverlight (8) Visio Services (7) Features (6) MVP (6) Silverlight 3 (6) WebCast (6) Workflows (6) Configuracion SharePoint 2010 (5) D.F. (5) API REST (4) Configuracion SharePoint 2010; (4) Troubleshooting (4) Visual Studio 2010 (4) Visual studio (4) WSS (4) Web parts (4) Apps (3) Comunidad SharePoint (3) Configuración SharePoint 2013 (3) ODATA (3) SharePoint Server (3) SharePoint; Instalación SharePoint; Troubleshooting; Search Service (3) Silverlight 3.0 (3) Silverlight Toolkit (3) WebParts (3) javascript (3) jquery (3) Eventos SharePoint (2) Office 2010 (2) PeoplePicker (2) REST (2) SQL Server (2) Scripting (2) Search Service Application (2) SharePoint Designer (2) UPA (2) UPS (2) Workflows SharePoint (2) host header (2) Apps Development (1) Big Bang (1) CAS (1) CSOM (1) Codeplex (1) CompartiMOSS (1) Configuracion SharePoint 2010; Errores SharePoint (1) Configuracion SharePoint 2010; SharePoint 2010 (1) Custom Actions (1) Custom Editor Parts (1) Delegate Controls (1) Deployment (1) DisableLoopbackCheck (1) Document Library (1) Entrevista (1) Examenes de Certificación (1) Extract WSP (1) FBA (1) FS4SP (1) Fakes (1) Fast Search Server 2010 For SharePoint (1) Fiddler (1) HTTP.SYS (1) HTTPS (1) JSON (1) Language Pack's (1) Latam (1) MAXDOP (1) MCSM (1) MSExpertos (1) MVC (1) Microsoft México (1) Microsoft; Codeplex; Screencast; (1) My Sites (1) SQL Server 2012 (1) SQL Server Reporting Services (1) Screencast (1) Screencast; (1) Service Applications (1) Service Pack (1) SharePoint 2007 (1) SharePoint 2010 SP 1 (1) SharePoint API (1) SharePoint Conference (1) SharePoint Emulators (1) SharePoint Farm (1) SharePoint Health Analyzer (1) SharePoint Magazine (1) SharePoint Online (1) SharePoint Search (1) SharePoint Test (1) SharePoint; Desarrollo SharePoint (1) Shims (1) Simposio (1) Simposio Latinoamericano (1) SkyDrive Pro (1) Soporte Microsoft (1) Templates (1) Tip (1) VSeWSS (1) Virtual Machine (1) Visual Studio 2012 (1) WCF (1) WSS; IIS 7 (1) Web API (1) Web Content Management (1) Web Services (1) Windows 8 (1) Windows Live ID (1) Xml (1) appcmd (1) iOS (1) jqGrid (1) onload function (1)