Chalalo Land

Tecnologías ASP.NET y un poco Más

Contacto


 Si quierer cooperar, yo feliz, muy agradecido :)

De donde me Visitan?

Locations of visitors to this page

Generic Content

Si te gustaron los articulos, y te animas te estaría muy agradecido!


Recent Posts

Tags

Community

Blogs de MVP

Amigos Geeks

Blogs Imperdibles

GODS

Archives

Email Notifications

ASP.NET 4.0 Client Templates + ADO.NET Data Services, ejemplo básico.

Hace un par de días estaba traduciendo el whitepaper de ASP.NET 4.0 y sin duda postear un ejemplo, va a dejar las cosas mas claras , este va a ser un ejemplo sencillo (creo que lo más sencillo) para que vayamos estudiando esta funcionalidad que me tiene entusiasmado. Para estar a la moda, lo vamos a hacer con VS2010

Vamos a tener un sitio web con la siguiente estructura, en donde tenemos  una base de datos con dos tablas (para este ejemplo ocuparemos solo una). Vamos a utilizar Entity Framework, mapeando las tablas desde la base. Y para exponer como servicios Rest estas tablas, vamos a utilizar ADO.NET Data Service.

Estructura del Sitio Web

image image

Voy a resumir los pasos a seguir, pero si quieres ver en detalle como se genera un ADO.NET Entity Data Model y un ADO.NET Data Service, te recomiendo ver el siguiente articulo de Ibon Landa:
http://geeks.ms/blogs/ilanda/archive/2008/05/19/ado-net-data-services-paso-a-paso-i.aspx

Paso 1

Luego agregamos un ADO.NET Entity Data Model

image

Una vez que lo agregamos, se nos presenta un asistente, en donde vamos a poder seleccionar las tablas que vamos a mapear. Es resultado para este ejemplo, es el siguiente:

image

Una vez mapeadas las tablas vamos a agregar en el proyecto un ADO.NET Data Service, con la finalidad de poder acceder a el contenido de estas tablas mediante un servicio Rest. Para eso agregamos un nuevo ítem

image

 Código Generado por ADO.NET DataService y modificando lo necesario

Este es el código que genera el template de ADO.NET Dataservice, vamos a modificar lo justo para que nuestro ejemplo funciona, acá es muy importante que veas que modifiques el atributo de la interface DataService a tu clase de modelo en entidades, en mi caso es MibaseModel.MibaseEntities1. Tambien puedes configurar reglas de acceso para las distintas entidades mapeadas.

using System;
using System.Data.Services;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.Web;  

public class WebDataService : DataService<MibaseModel.MibaseEntities1>
{
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService(IDataServiceConfiguration config)
    {
             config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
      }
}

Probando el Servicio

Para probarlo, primero podemos escribir en la URL del Browser:

http://localhost:8367/mdd/WebDataService.svc/

image

O También
http://localhost:8367/mdd/WebDataService.svc/Personas(1) y el servicio nos devolverá todos los campos del registro Personas cuyo ID sea 1.

image

Client Templates

Una de las ideas principales que tiene Client Templates, como su nombre lo indica es la posibilidad de bindear los datos desde el servidor, pero mediante programación del lado del cliente, de forma de proveer una manera liviana, rápida y eficaz de construir nuestros sitios web, y no solo eso, la integración con jquery es genial, además se utiliza el patrón de diseño observador para proveer la funcionalidad de que cambios en los datos obtenidos desde el origen de datos, sean informados para proveer el binding bidireccional, es decir, registrar en la fuente de datos, que el registro se modificó.

Lo primero es importar los script, luego es definir el dataview a utilizar (puedes ver una explicación en http://geeks.ms/blogs/gperez/archive/2009/07/20/ajax-functionality-en-asp-net-4-0-parte-1-5.aspx), luego vamos a definir el proveedor de datos para el dataview, el cual es una clase AdoNetServiceProxy y en su constructor le pasamos como argumento el servicio creado, también especificamos de que objeto vamos traerlos datos,en este caso, Personas,  esto asociado al tag html padre (ul) al cual vamos a ligar los datos que vamos a obtener, en este caso, el Id y Nombre, los cuales son “bindeados” e impresos en la lista mediante el tag {{ campo }}

<script type="text/javascript"
src="MicrosoftAjax/MicrosoftAjax.debug.js"></script> 
<script type="text/javascript" src="MicrosoftAjax/MicrosoftAjaxTemplates.debug.js"></script> 

<script type="text/javascript" src="MicrosoftAjax/MicrosoftAjaxAdoNet.debug.js"> </script>

<body xmlns:sys="BLOCKED SCRIPTSys" xmlns:dataview="BLOCKED SCRIPTSys.UI.DataView"
      sys:activate="*">

<ul class="list sys-template"
   sys:attach="dataview"
   dataview:autofetch="true"
   dataview:dataprovider="{{ new Sys.Data.AdoNetServiceProxy
    ('WebDataService.svc') }}"
   dataview:fetchoperation="Personas"  >
    <li>
            <span class="name">{{ Id }}</span>
            <span class="value">{{ Nombre }}</span>
    </li>
</ul>

 </body>

aAl Probar nuestra pequeña aplicación, vemos que tenemos nuestra pantalla con los datos impresos, pero sin ocupar algún runat=”server” y sin tener ViewState en la página (yeah!)

image

 Vista de código fuente y repito, sin Viewstate :)

image

 Para descarga este ejemplo acá, es posible que tengas que recompilarlo

Espero que te haya servido, voy a tratar de escribir más ejemplos, pero haciendo un CRUD completo.

Saludos,

Gonzalo

Posted: 31/7/2009 5:20 por Gonzalo Perez | con 5 comment(s) |
Archivado en: ,,
Comparte este post:

Comentarios

rodrigo olivares ha opinado:

excelente ejemplo, simple y al hueso.

estoy a la espera de ese CRUD :)

# May 19, 2010 9:50 PM

Gonzalo Perez ha opinado:

La vamos a tener que dejar para la version definitiva de client templates por parte del team de Microsoft cambió (y sigue cambiando), esta versión, se fue para la casa (o mejor dicho shift + del)

# May 19, 2010 10:17 PM

carlos ha opinado:

viejo puedes mandarme un ejemplo mas mi msn es albert2380@hotmail.com

# October 5, 2010 12:06 AM

Gonzalo Perez ha opinado:

Carlos, en el mismo artículo aparece el link de descarga, de todos modos es:

cid-053a660afa3473b3.skydrive.live.com/.../mdd.zip

Saludos!

Gonzalo

# October 5, 2010 3:47 AM

isaias ha opinado:

cuando lo publico a IIS me tira un error 500

# November 20, 2010 3:00 AM