martes, 28 de febrero de 2012

Llamadas Asincrónicas usando ICallbackEventHandler

Ha estas alturas ya deberíamos saber como trabajar con javascript y otras cosas, así que no voy a detallar un ejemplo completo con capas de datos y de negocio, solo me detendré a explicar como se debe implementar (No me pidan el código fuente, si no pueden realizar el ejercicio es que deben aprender primero lo básico "Para correr primero hay que aprender a caminar") .

ICallbackEventHandler

ICallbackEventHandler
es una clase que se encuentra dentro del espacio de nombre System.Web.UI y permite realizar llamadas Asyncronas al servidor. Es muy util solo cuando se desean hacer un par de transacciones con el servidor desde la página, pero el problema con esta metodología, es que todas las llamadas pasan por un método llamada RaiseCallbackEvent, lo cual implica que cada vez que desean realizar una diferente cosa deben parametrizar la llamada y controlar en una sentencia CASE dentro del método, que desean hacer.

Esta clase trabaja con 2 métodos: RaiseCallbackEvent y GetCallbackResult

Un Ejemplo muy simple de esto es:
Suponiendo que definieran un nuevo formulario llamado Defaul.aspx, lo primero que deben hacer es implementar esta clase, para ello deben hacer lo siguiente

public partial class Defaul : System.Web.UI.Page, ICallbackEventHandler
{

}

Dentro de la clase del formulario Default, debemos escribir los siguientes métodos:

private string _sReturn;

public string GetCallbackResult() {
return _sReturn;
}

public void RaiseCallbackEvent(string sDatos) {

}

Describamos los métodos:
RaiseCallbackEvent capturará la información que se le envía. Como pasaremos un String, el primer valor debe ser el que será utilizado para capturar la acción y los siguientes serán para realizar la operación.

Luego de realizar la operación, lo que haremos será: en la variable _sReturn, que hemos creado retornaremos el resultado de lo que deseamos. Yo trabajo generalmente con XSLT, por lo cual siempre retorno un string con un HTML, el cual despues mediante un JavaScript lo escribo en una zona de la página.

Suponiendo que la variable sDatos del método RaiseCallbackEvent venga con el siguiente formato:

sDatos = '01|@parametro_1
|...|parametro_N'

En donde todo lo que está delante de '|@' será lo que debe controlar la sentencia CASE y, todo lo que esta despues, separado por '|', serán los parámetros que debemos capturar para realizar la acción (Hipoteticamente hablando) de búsquedas, inserciones, actualizaciones y borrados de datos.
En este caso, dentro del método
RaiseCallbackEvent escribiremos una cosa parecida a esto:

public void RaiseCallbackEvent(string sDatos) {


int iOpcion = int.Parse(sDatos.Split(new string[] {"|@"}, StringSplitOptions.None)[0]);

switch (iOpcion){
case 1:
{
_sReturn = 'Primera respuesta'
}

case 2:
{
_sReturn = 'Segunda respuesta'
}

case 3:
{
_sReturn = 'Tercera respuesta'
}
}
}

Ahora toca escribir el código desde la parte de la página Web (HTML-JavaScript), para lo cual, primero debemos entender que por cada acción deberemos crear dos eventos, una que realizará la llamada y otro que será utilizado para capturar la respuesta. Yo me detendré solo a escribir el que realizará la llamada que será atendido cuando el valor es 1 y, el que controlará la respuesta de la primera acción realizada.

Para ello, en la sección script de JavaScript, deben escribir lo siguiente:

function getPLlamada()
{
var arg='01|@';
<%= Page.ClientScript.GetCallbackEventReference(this, "arg", "getPLlamadaReturn", null)%>;

}

function getPLlamadaReturn(oResult)

{
var oObjeto = document.getElementById("Nombre de Objeto");
oObjeto.innerHTML = oResult;

}


Como pueden ver, en el método de llamada GetCallbackEventReference, deben pasar los siguientes parámetros:
1 - la páguina con la que están trabajando
2 - El argumento que llevará el valor de la condición que se ha asignado en la página
3 - El método al que debe retornar el valor
4 - El contexto

Si lo desean pueden pasar
6 - El método en donde se debe controlar el error generado
7 - Foma de retornar la respuesta true Asincrónica y false para sincrónica

Con estos pasos descritos, ya pueden hacer uso de la Clase
ICallbackEventHandler.
Para mayor referencias pueden consultar la siguiente URL:
http://msdn.microsoft.com/es-es/library/ms153106.aspx


Bueno para preguntas aquí estamos.
Siempre que el texto este mal explicado responderé.

NOTA: No solo copien el código, sino que lean el Texto y entiendanlo. Es mejor parar a pensar un poco, que picar código como loco.

No hay comentarios: