Error raro en .NET - Multiplica importes por 100 en llamada a SOAP

Tenemos una aplicación funcionando en .NET con GeneXus 15 Upgrade 9.

Nos pasamos al Upgrade 11 y todo parecía funciona correctamente. En las pruebas realizadas en las maquinas de desarrollo y testeo, todo funciono bien.

Cuando pusimos en producción, empezamos a notar que luego de llamar a un servicio SOAP, los parámetros que nos volvían en SDT, con decimales, quedaban multiplicados por 100.

Las maquinas en las cuales habíamos probado, tenian Windows en ingles, con formato en ingles.
El servidor de producción, tenia Windows en ingles, pero el formato de fechas e importe, estaban en español.  Esta diferencia, era la que hacia que al ejecutar los mismos assemblies en dos maquinas diferentes, con los mismos archivos de configuración, dieran resultados diferentes.

El problema fue rápidamente diagnosticado por Javier Larrosa y agregando la linea

  <globalization culture="en-US" uiCulture="en-US" /> 

a nivel del system.web del web.config, pudimos solucionar el problema.

PD: Este es uno de esos post egoista que hago únicamente para encontrarlo cuando me vuelva a encontrar con este problema y no recuerde como lo solucionamos.



Comentarios

  1. el tema es que son montos en Bolivares. entre que invocas y responde el WS ya se metieron 1000% de inflación...!

    ResponderBorrar
  2. También sucede cuando envías una variable a un procedure y la recibes como parámetro con un tipo de variable distinto.

    ResponderBorrar
    Respuestas
    1. No lo sufrimos de esa forma, es bueno saberlo.
      Por ahora, lo arreglamos con la linea de fijar el culture.
      Gracias por el comentario

      Borrar
  3. Es un error, bug feo introducido en el U11 de Gx15 :(. Ya quedó arreglado en el upgrade 12 que se libera la semana que viene (28Agosto). Ref. SAC #43628 .

    ResponderBorrar
  4. Hola,

    Este error aun se mantiene, pero cambio. Si tienes una estructura(sdt) donde tienes un atributo de tipo Numeric (10,2), al momento de cargar los datos la cantidad de decimales que agrega aumenta a 4, Ejemplo

    For each
    &Sdt.Atributo = AtributoTrn
    Endfor

    El resultado es


    1.0000


    y lo correcto debe ser


    1.00


    en mi caso esto afecta porque tengo servicios con SAP donde se valida la cantidad de decimales.

    Para solucionar el problema se debe hacer esto

    For each
    &Sdt.Atributo.FromString(AtributoTrn.ToString())
    Endfor

    El resultado es


    1.00


    Saludos

    Leonardo Zepeda A.


    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.