2012-09-15 2 views
7

数字の要素を持つWebサービスを消費します。 Delphi wsdlインポーターはInt64として設定します。Webサービスで空白の値がInt64型の場合

Webサービスでは、この要素を空白にすることができます。しかし、Int64として定義されているため、値を設定せずにDelphiでWebサービスを使用すると、Int64なのでデフォルトは0になります。しかし、空白にする必要があり、Webサービスは0の値を受け入れません(0は無効と定義され、Webサービスによってエラーを返します)。

型がInt64の場合、空の値を渡す方法はありますか?

+0

サービスを修正する必要があることをサービスプロバイダに伝えますか? 'blank'は' Int64'の有効な値ではありません(人の年齢は 'Int64'を使っていますが、最初は非常にばかげています。聖書の時代)。 –

+0

年齢としては999を試してみることもできます。 – Hendra

答えて

7

空の年齢(例)

<E06_14></E06_14> 

は、例えば、 "不明" 年齢も、特別な意味を持つことができます。

この場合、実際の問題は、デルファイ側でフィールドをnillableにする方法です。 J.M. Babetのthis postから

'nil' のための

サポートは継続的な課題となっています。 Delphiのいくつかのビルトインタイプはnull可能ではありません。そこで、私たちはこれらのケースのためにクラスを使用することを選択しました (エレガントではないが動作します)。だから、Delphi 2007の最新のアップデートでは、 私はこれを助けるためにいくつかのTXSxxxxタイプを追加しました。基本的に: TXSBoolean、TXSInteger、TXSLongなど。TXSStringはすでにそこにありましたが、 登録されていませんでした。今はそうです。 WSDLをインポートする際には、 を使用して、簡易型のnillable型にTXSStringを使用するオプションを使用して、 TXSxxxx型へのインポーター・スイッチを作成する必要があります。コマンドラインには "-0z +"オプションがあります。

DocWiki for the Import WSDL Wizardもnillableな要素に関連する2つのオプションを示しています。

  • プロセスnillableなとオプションの要素 - WSDLの輸入はオプション となり、NULL値についての関連情報を生成するには、このオプションをチェックしますプロパティ。この情報はSOAPランタイム によって使用され、特定のプロパティをnilにすることができます。シンプルnillableでタイプため

  • 使用TXSString - デルファイ とC++はそれを許可していないながら、WSDL標準では、C++で、DelphiやNULLで、シンプルなタイプがnilにすることができます。このオプションをチェックすると、WSDLインポーター がラッパークラスのインスタンスを使用してこの制限を克服するようになります。

+0

このオプションを試しましたが、wsdlインポーターは引き続きInt64としてインポートします。 wsdlには、それが無害ではないことを輸入者に伝える何かがなければならない。 E06_14のインポートされたユニット定義をTXSIntegerに変更しようとしましたが、TXSIntegerをゼロにする方法が見つかりませんでした。たぶん私はTXSStringに変更しようとし、私はより良い運があるかどうかを確認します。 –

+2

インポートしたユニットを変更し、タイプをInt64からTXSIntegerに変更しました。次に、TXSIntegerをインスタンス化せずにnilに設定します。今は素晴らしい作品です。 –

+0

うれしい私は助けることができました! – mjn

関連する問題