Referencias
::  clikear.com
:: MSDN
:: Soporte Microsoft
:: MVP
:: MSDN España
:: MSDN Artículos Téc.
:: Technet España
:: News de Microsoft
:: MSDN Magazine
:: ASP.NET
 
 
  Netveloper :: Varios :: Varios :: Programacion, Axapta 3.0. Actualizar cotiza ...  
 
   Programacion, Axapta 3.0. Actualizar cotizaciones divisas por internet  
 Enviar a un amigo
     Fecha:  08/07/2006 11:52:32
     Autor:  Mkz (www.TrucosAx.com)  Ver comentarios
     Visitas: 6667  Comentarios: 0  Imprimir
 
  Hoy vamos a tratar un tema un tema interesante para aquellos que quieran potenciar la imagen de “Aplicación automática y autosuficiente” (fijaros que está entre comillas) de su aplicación.  
   
  Colaboración de trucosax.com

Como actualizar las cotizaciones de las divisas automáticamente a través de Internet

Hace tiempo que existe un servicio gratuito de Yahoo finnance en el que se nos permite descargar una serie de cotizaciones de bolsa o de divisas realizando una simple petición vía web.
Pues bien, vamos a aprovechar este servicio desde Axapta para mantener al día las cotizaciones de nuestra tabla de divisas.

Bueno, aquí solo vamos a crear un proceso que las actualice, luego cada uno que programe la ejecución del proceso como y cuando quiera :)

Para la configuración

Vamos a crear un campo en la tabla currency llamado “ConversionYahoo” en el que informaremos el código necesario para indicarle a Yahoo que queremos conocer la cotización de esta divisa. Añadiremos este campo al fieldgroup “Description”.

Me explico : Supongamos (que no se si es mucho suponer) que nuestra empresa trabaja en Euros. Y queremos actualizar la cotización de nuestra divisa “Dólares” (USD). A Yahoo le pediremos que nos informe sobre la cotización de los Dólares americanos (USD) respecto al Euro (EUR). El código que pondremos en la tabla de divisas (currency) para la divisa “Dólares” será “USDEUR=X”.

Para la otra divisa que usaremos en el ejemplo (la libra inglesa) sería “GBPEUR=X”.

Nota : Podéis ver los diferentes códigos que utiliza Yahoo en : http://finance.yahoo.com/currency haciendo clic en las diferentes divisas que aparecen se ven los códigos de tres dígitos que usan para cada una.

Hemos hecho un job que realiza el proceso de actualización, pero luego vosotros podéis usarlo desde una clase, ejecutándolo una vez al día por batch o como queráis :)


static void Job_Actualiza_Cotizaciones(Args _args)
{
 WinInet WinInet;
 int hdl,i;
 str codigos, Resultado, linea;
 Currency Currency;
 ExchRates ExchRates;
 container c_linea;

 sysgroup CodYh;
 str sfecha;
 str sCambio;

 // Vamos a obtener los codigos de las divisas que queremos actualizar
 // Para eso recorremos los registros de la tabla currency que tengan informado
 // el campo ConversionYahoo y construimos una cadena de elementos separados por coma
 codigos = ';
 While select currency where currency.ConversionYahoo
 {
  if (codigos) codigos +=',';
   codigos += currency.ConversionYahoo;
 }

 WinInet = new WinInet();
 // Abrimos la URL
 // fijaos en la variable &f, se trata del formato del fichero resultante
 // Aquí estamos usando &f=Sd1b S = Codigo de la moneda, d1 = fecha, b = cotización
 // Se pueden usar muchos mas formatos y solicitar mucha más información pero eso ya os lo
 // dejo a vosotros :)
 hdl = WinInet.internetOpenUrl('http://finance.yahoo.com/d/quotes.csv?s='+codigos+'&f=Sd1b');
 Resultado = WinInet.internetReadFile(hdl);
 winInet.internetCloseHandle(hdl);
 winInet = null;

 // Resultado contiene una línea por cada moneda que le hayamos pedido a Yahoo
 // vamos a tener que hacer un bucle ...
 i = 0;
 linea = strline(resultado,i);
 While(linea)
 {
 // Str2Con nos convierte la linea de texto separada por comas en un container
 c_linea = str2con(linea,',');
 CodYh = conpeek(c_linea,1);
 sFecha = conpeek(c_linea,2);
 // Pero en el caso del cambio como es un real parece que str2con no funciona
 // y lo cogemos "a mano" con el típico substr
 sCambio = substr(linea,strlen(CodYh+sFecha)+3,1000);
 // Ahora quitamos las dobles comillas
 CodYh = strRem(CodYh,'"');
 sFecha = strRem(sFecha,'"');

 // Buscamos la divisa a actualizar
 Select Currency where Currency.ConversionYahoo == CodYh;
 if (Currency) // Si existe ...
 {
  ExchRates.clear();
  ExchRates.initValue();
  ExchRates.CurrencyCode = Currency.CurrencyCode;
  ExchRates.FromDate = Str2Date(sFecha,213); // Recordad que es formato fecha "mdy"
  ExchRates.ExchRate = str2num(sCambio) * 100; // El cambio para 100 Euros
  ExchRates.insert();
 }
 else warning(StrFmt('Código de divisa (Yahoo) no encontrado %1',CodYh));

 i += 1;
 linea = strline(resultado,i);
 }
}


He comentado bastante el código por lo que creo que no hace falta que lo comente aquí otra vez. (pero ya sabéis, si hay dudas … pues preguntad en el foro y lo miramos)

Ahora lo ejecutamos y … (imagen 3)

Ya tenemos nuestras cotizaciones al día :)

Saludos,

Mkz.

Colaboración de trucosax.com
 
Imagen 1


Imagen 2


Imagen 3

 
   
   
   
   
   
   Comentar el artículo.  
 
 
Pon tú nombre, email y tu comentario.

El comentario sera validado por el equipo de netveloper y posteriormente publicado así que no te molestes en dejar spam.  

 
Por favor no pongáis preguntas o dudas aquí, para las dudas tenéis los FOROS, en la sección comentarios solo publicare comentarios al artículo, cualquier duda pregunta la ponéis en los FOROS.

  Nombre:
  
  E-mail:
  
  Comentario:
  

  

 
 


Google

Todos los contenidos de este Web son propiedad de sus respectivos autores, queda prohibida su copia o difusión sin la autorización expresa.

ethek.com | canaljuegos.com | patatastraigo.com | altersem.com |