
Imaginemos que queremos llegar a esto: una página ASPX que permita leer y modificar datos de CRM, por ejemplo de una cuenta de cliente. Hay mil maneras de hacerlo, sólo que esta a mi me parece especialmente elegante por el poco código que hay que añadir. Es una solución al estilo ASP.NET 2.0, así que vamos a trabajar con Visual Studio 2005 (o 2008).
Lo primero es crear el código del componente de datos, que actuará de intermediario entre el control
ObjectDataSource y el web service de CRM. La clase se llama
Cuenta y representa la capa de lógica de negocio especializada en operaciones sobre cuentas de cliente. Por
cierto, ¿alguien sabe cómo colorear sintaxis (facilmente) en Blogger?
using System;
using System.ComponentModel;
using CrmNetLib.CrmSdk;
namespace CrmNetLib
{
[DataObject]
public class Cuenta
{
private CrmService crm;
public Cuenta()
{
crm = new CrmService();
crm.Credentials = System.Net.CredentialCache.DefaultCredentials;
}
[DataObjectMethod(DataObjectMethodType.Select, true)]
public account Buscar(Guid id)
{
return (account)crm.Retrieve(EntityName.account.ToString(),
id, new AllColumns());
}
[DataObjectMethod(DataObjectMethodType.Update, true)]
public void Actualizar(account cuenta)
{
crm.Update(cuenta);
}
}
}
Fijaos en los atributos DataObject y DataObjectMethod. Sirven para que el asistente del ObjectDataSource que pondremos en la página reconozca el objeto como candidato a fuente de datos. Y ahora vamos a la página aspx: lo primero que hacemos es añadir un objeto ObjectDataSource configurando su fuente al objeto comercial (=de lógica de negocio) Cuenta. En mi caso lo he definido en un proyecto aparte de nombre CrmNetLib, pero podría estar en el mismo proyecto, por ejemplo dentro de la carpeta App_Code.
En la siguiente pantalla del asistente, configuramos los métodos de búsqueda y actualización para que apunten a los métodos Buscar y Actualizar de nuestra clase. En un caso más completo, sólo nos faltaría mapear también los métodos de borrado e inserción.
Como el método de búsqueda tiene un parámetro (el id de la cuenta), tenemos que relacionarlo con algún valor de entrada. Escogemos el QueryString de la página, con lo que la URL de acceso tendrá el siguiente aspecto:
http://www.servidor.com/aplicacion/editarcuenta.aspx?id=//GUID de la cuenta//

Por otro lado, el método de actualización recibe un parámetro de tipo
account sacado directamente de la SDK de CRM que representa una cuenta con todos sus atributos. También podríamos usar un método que tuviera como parámetros los atributos del objeto, en este caso id, nombre, teléfono y fax.
Ahora sólo queda añadir el control DetailsView para ver los datos de la cuenta. Una vez en la zona del diseñador, escogemos el ObjectDataSource como fuente de datos. Aparecerán todos los campos de la clase account(o sea, muchos campos(.
Para reducirlos a un número manejable, sólo tenemos que escoger la opción Editar campos... Decido quedarme con nombre, teléfono y fax. Si además habilitamos la edición del control, ya habremos terminado en un tiempo record una página de edición de cuentas.
Este es el aspecto final de la página en el diseñador de Visual Studio: