Algoritmia - We are geeks, after all ;)
  Crear una cuenta
Inicio Buscar Foros Chat Downloads Login
 [Login]
Foros
Ir a los foros 

Menú Trucos Ax
 Inicio(Noticias) :
 Inicio
 Enviar Noticias
 Archivo de noticias
 Buscar
 Temas

 Miembros :
 Lista de miembros
 Tu Cuenta(Regístrate)

 Comunidad :
 Chat

 Foros

 Links

 Downloads

 Estadísticas :
 Estadísticas
 Top 10
 Encuestas

 Otros Servicios :
 Publicidad


 Miscelanea :
Añadir a favoritos
Contactar


Hemos recibido

impresiones desde Diciembre 2005


 Enlázanos :
Copia el código siguiente en tu web para enlazarnos :


Trucos Ax


Mensajes rápidos

Sólo los usuarios registrados pueden escribir login o crear una cuenta.

Trucos
Ir a trucos programación
Ir a trucos consultoría

AxSearch

AxSearch
Es un motor de búsqueda
específico sobre temas
de Axapta (Dynamics Ax)

Anuncios



Mapa

¿De donde venimos?
Ubicación de visitantes de esta página

Webs Amigas
[axapta-links.com] - The startpage for Axapta
DaxGuy


Fred Shen

Comunidad Ax
Conunidad AX

Anuncios



Trucos Ax: Foros

Trucos Ax :: View topic - Caché de métodos
 Forum FAQForum FAQ   SearchSearch   UsergroupsUsergroups   ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Caché de métodos

 
Post new topic   Reply to topic    Trucos Ax Forum Index -> Trucos desarrollo
View previous topic :: View next topic  

¿Como valoras este truco (1/5)?
5
80%
 80%  [ 8 ]
4
20%
 20%  [ 2 ]
3
0%
 0%  [ 0 ]
2
0%
 0%  [ 0 ]
1
0%
 0%  [ 0 ]
Total Votes : 10

Author Message
Manekaze
Site Admin
Site Admin


Joined: Dec 02, 2005
Posts: 382

PostPosted: Tue Aug 15, 2006 12:48 pm    Post subject: Caché de métodos Reply with quote

//**********************************************************
// Tipo : Desarrollo
// Titulo : Caché de métodos
// Codigo : TD0011
// Keywords : Programacion, Axapta 3.0
// Sub-keywords : cacheAddMethod, bwsim, latencia, cache, display
//
//**********************************************************

En el truco de hoy vamos a tratar el tema de los métodos display y como pueden llegar a penalizar el rendimiento de una pantalla en entornos de 3 capas. Así mismo mostraremos como el uso de la caché de métodos de Axapta puede mejorar ostensiblemente dicho rendimiento.

Bien, para empezar, y como siempre … vamos a crear una situación desesperada Smile

Vamos al formulario de artículos (InventTable) y añadimos un display method en el datasource InventTable como el que sigue :

x++:

display qty Disponible( inventtable itable )
{
 inventonHand IonHand;
 ;
 IOnHand = InventOnHand::newItemId(itable.ItemId);
 return IOnHand.availPhysical();
}


Ahora vamos a arrastrar el display method al grid de la primera solapa como una columna más, de esta forma cuando veamos la lista de artículos … podremos ver el stock físico disponible de cada uno en una columna.



Bueno, la verdad es que … parece que no penaliza mucho el sistema, ¿no es cierto?

Quizá sea porque (al menos en mi caso) lo estamos ejecutando en local o en una red local …

Vamos a simular un entorno un poco más hostil

Vamos al “Axapta Configuration Utility” y añadiremos un parámetro para simular un entorno remoto … por ejemplo … una línea de 32 Kilobytes por segundo y ping (latencia) de 150 milisegundos (cualquier adsl).


Nota : en la documentación indica que el primer parámetro son bytes por segundo, no estoy seguro de si es un error y son bits por segundo. De todas formas he puesto un valor bajo, 32000, si son bytes por segundo … son 256 Kbps (una adsl de las que ya casi no quedan).

Esto tambien podemos configurarlo sin necesidad de tocar la configuración, simplemente hacemos doble clic sobre el ícono de comunicaciones de la barra de estado en la parte inferior derecha de la pantalla de Axapta.

Nos aparecerá una pantalla, en la solapa “Conexión remota” también podemos establecer los parámetros de simulación.


IMPORTANTE : Esto solo funciona si tenemos una instalación en 3 capas (con AOS), si no es así …
Se me ocurre que quizá podamos simular un poco la latencia de la línea introduciendo un delay en nuestro método.
Es decir, podemos suponer que la latencia de la línea es de 150 milisegundos, por tanto … calculamos que cada vez los datos van y vienen una vez son 150 x 2 = 300. A esto le añadimos un ligero retardo de 100 milisegundos en concepto de ancho de banda, tiempo de respuesta del servidor o lo que queramos. Nos da un total de 400 milisegundos que podemos incluir en nuestro método mediante la instrucción sleep().

Podemos dejar el código así :
x++:

display qty Disponible( inventtable itable )
{
 inventonHand IonHand;
 ;
 sleep(400); // Con esto simulamos la latencia
 IOnHand = InventOnHand::newItemId(itable.ItemId);
 return IOnHand.availPhysical();
}


Sigamos con el truco

Si ahora volvemos a entrar a Axapta y vamos a abrir el formulario de artículos (InventTable) … comprobaremos de que manera penaliza nuestro método al pintado del grid y por tanto al rendimiento general del formulario.

Moveos un poco por la pantalla, o incluso mover alguna ventana por encima del formulario abierto de artículos de forma que ocultéis y mostréis nuestro nuevo campo calculado y comprobaréis a lo que me refiero cuando digo ... “penalizar el rendimiento”.


¿Es grave doctor?

Grave … lo que se dice grave … depende de la paciencia del usuario que esté al otro lado de la línea “lenta” y la influencia que tenga el mismo sobre la línea jerárquica de mando en nuestra empresa Razz

Vamos a ver si podemos mejorar un poco el rendimiento.

Para empezar debemos trasladar el método display a la tabla del diccionario en lugar de donde está ahora (el datasource del formulario).

Para eso debemos cambiar un poco el aspecto del mismo (nada complicado) :

x++:

display qty Disponible()
{
 inventonHand IonHand;
 ;
 IOnHand = InventOnHand::newItemId(this.ItemId);
 return IOnHand.availPhysical();
}

NOTA : Si no disponéis de una instalación en 3 capas acordaos de poner la instrucción sleep(400) para simular la lentitud de línea.

Lo dicho, lo creamos en la tabla (del nodo “Data Dictionary/Tables” del AOT) y lo borramos del datasource InventTable del formulario InventTable.

A nivel de grid no es necesario tocar nada.

Ahora debemos modificar el método INIT del datasource InventTable dentro del formulario.

x++:

void init()
{

    super();

    this.query().forceNestedLoop(true);

    // Trucos Ax - Añadimos el método a la caché
    InventTable_ds.cacheAddMethod(tablemethodstr(InventTable,Disponible));

}


Si ahora probamos de nuevo el formulario … supongo que notaréis la diferencia. Smile


Más cosas sobre esta caché

Si el valor que devuelve el método display depende directamente de el valor de algún campo de la tabla que estamos usando … (imaginemos que estamos mostrando la descripción del grupo de artículos) puede suceder que el usuario modifique el valor de dicho campo y nuestro método siga mostrando el valor antiguo (para eso es la caché, para que no pierda tiempo buscando siempre los valores Razz).

Para solucionar este tema, es preciso que en el método modified del campo que produce este cambio forcemos el recálculo de nuestro método. Es decir, hay que decirle a Axapta que no lo traiga de la caché sino que vuelva a calcularlo.

Para ello, disponemos de la función cacheCalculateMethod(), mediante la cual obligaremos a recalcular nuestro método.


Hasta aquí hemos llegado, hay más cosas a tener en cuenta cuando nos enfrentamos a aplicaciones que deben usarse de forma remota … ya las iremos viendo Smile

Saludos,

Mkz.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Trucos Ax Forum Index -> Trucos desarrollo All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©

 
Trucos Axapta 
Comunidad aprobada por :
Microsoft corp. MVP LogoVisit community


Axapta y Dynamics Ax son marcas registradas de Microsoft corporation.
Todos los logos y marcas son propiedad de sus respectivos propietarios.
Excepto trucosAx.com que este si que es mio :-). (c) 2005 by Manel Querol (Mkz)
TrucosAx.com no pertenece ni está asociada a Microsoft corporation.
Los fragmentos de código y proyectos importables que aquí se muestren están realizados sobre bancos de pruebas. No nos hacemos responsables de cualquier daño o pérdida de datos que se pudiera originar del hecho de instalar alguno de estos ejemplos en un sistema productivo. Es responsabilidad del usuario ser consciente del impacto que puede ocasionar en sus aplicaciones el uso del código que de aquí extraiga.