2012-09-15 32 views
7

Consumo un servicio web que tiene un elemento numérico. El importador Delphi wsdl lo configura como Int64.Valor en blanco en el servicio web para Int64 tipo

El servicio web permite que este elemento esté en blanco. Sin embargo, como se define como Int64, cuando consumo el servicio web en Delphi sin establecer un valor para él, por defecto es 0 porque es un Int64. Pero necesito que esté en blanco y el servicio web no aceptará un valor de 0 (0 se define como no válido y devuelve un error del servicio web).

¿Cómo puedo pasar un valor en blanco si el tipo es Int64?

+0

¿Dice al proveedor del servicio que deben reparar su servicio? Un 'blank' no es un valor válido para un' Int64' (y usar 'Int64' para la edad de una persona es bastante ridículo en primer lugar; no muchas personas viven más de lo que un' byte' puede contener, al menos desde Tiempos bíblicos). –

+0

Quizás puedas probar 999 con la edad – Hendra

Respuesta

7

edad vacío (ejemplo)

<E06_14></E06_14> 

podría tener un significado especial, por ejemplo, ser la edad "desconocido".

En este caso, la verdadera pregunta es cómo hacer que el campo sea inutilizable en el lado Delphi.

De this post de J. M. Babet:

El apoyo a las negativas ha sido un problema constante. Varios tipos incorporados de Delphi no son anulables. Así que optamos por utilizar una clase para estos casos (no elegante, pero funciona). Así que con la última actualización para Delphi 2007 he agregado varios tipos de TXSxxxx para ayudar con esto. Básicamente: TXSBoolean, TXSInteger, TXSLong, etc. TXSString ya estaba allí pero no estaba registrado. Ahora es. Al importar un WSDL, debe habilitar la opción Usar 'TXSString for simple nillable types' para hacer que el importador cambie a tipos TXSxxxx. En la línea de comando, está la opción "-0z +".

Los DocWiki for the Import WSDL Wizard también muestra dos opciones relacionadas con los elementos nillable: Elementos

  • Proceso nillable y opcionales - Marque esta opción para que el importador WSDL generar información relevante sobre opcional y nillable propiedades. Esta información es utilizada por el tiempo de ejecución SOAP para permitir que ciertas propiedades sean nulas.

  • Uso TXSString para este tipo de nillable simples - El estándar WSDL permite tipos simples es nulo, en Delphi o NULL, en C++, mientras que Delphi y C++ no permiten eso. Marque esta opción para hacer que el importador WSDL supere esta limitación mediante el uso de instancias de clases contenedoras.

+0

Intenté con esa opción, pero el importador wsdl todavía la importa como Int64. Debe haber algo en el wsdl que le indique al importador que no está disponible. Traté de cambiar la definición de unidad importada para E06_14 a TXSInteger pero no pude encontrar una manera de hacer de TXSInteger un valor nulo.Tal vez intente cambiarlo a TXSString y ver si tengo mejor suerte. –

+2

Modifiqué la unidad importada y cambié el tipo de Int64 a TXSInteger. Luego, lo configuré en nil en lugar de crear una instancia de TXSInteger. Funciona muy bien ahora. –

+0

¡me alegro de poder ayudar! – mjn

Cuestiones relacionadas