2012-09-15 13 views
7

Tôi sử dụng dịch vụ web có phần tử số. Trình nhập wsdl Delphi đặt nó là Int64.Giá trị trống trong dịch vụ web cho loại Int64

Dịch vụ web cho phép phần tử này để trống. Tuy nhiên, vì nó được định nghĩa là Int64, khi tôi sử dụng dịch vụ web trong Delphi mà không đặt giá trị cho nó, nó mặc định là 0 vì nó là Int64. Nhưng tôi cần nó để trống và dịch vụ web sẽ không chấp nhận giá trị 0 (0 được định nghĩa là không hợp lệ và trả về lỗi bởi dịch vụ web).

Làm cách nào để chuyển giá trị trống nếu loại là Int64?

+0

Nói với nhà cung cấp dịch vụ rằng họ nên khắc phục dịch vụ của họ? Một 'blank' không phải là giá trị hợp lệ cho' Int64' (và sử dụng 'Int64' cho độ tuổi của một người khá là lố bịch ngay từ đầu - không nhiều người sống lâu hơn so với' byte' có thể giữ, ít nhất là từ Kinh Thánh thời gian). –

+0

Có thể bạn có thể thử 999 là độ tuổi – Hendra

Trả lời

7

tuổi Rỗng (ví dụ)

<E06_14></E06_14> 

có thể có một ý nghĩa đặc biệt, ví dụ như là "không rõ" tuổi.

Trong trường hợp này, câu hỏi thực sự là làm thế nào để làm cho trường nillable ở phía Delphi.

Từ this post của J.M. Babet:

Hỗ trợ cho 'nil' là một vấn đề đang diễn ra. Một số kiểu tích hợp trong số Delphi không thể rỗng. Vì vậy, chúng tôi chọn sử dụng một lớp học cho những trường hợp này (không thanh lịch nhưng nó hoạt động). Vì vậy, với bản cập nhật mới nhất cho Delphi 2007 Tôi đã thêm một số loại TXSxxxx để trợ giúp việc này. Về cơ bản: TXSBoolean, TXSInteger, TXSLong, vv. TXSString đã có nhưng nó chưa được đăng ký. Bây giờ thì đúng là vậy. Khi nhập WSDL, bạn phải bật tùy chọn Sử dụng 'TXSString cho các loại nillable đơn giản' để làm cho chuyển đổi nhà nhập khẩu thành loại TXSxxxx. Trên dòng lệnh, nó là tùy chọn "-0z +".

Các DocWiki for the Import WSDL Wizard cũng cho thấy hai tùy chọn liên quan đến các yếu tố nillable:

  • Process nillable và tùy chọn các yếu tố - Chọn tùy chọn này để làm cho các nhà nhập khẩu WSDL tạo ra thông tin có liên quan về tùy chọn và nillable tính chất. Thông tin này được sử dụng bởi thời gian chạy SOAP để cho phép các thuộc tính nhất định là không.

  • Sử dụng TXSString với nhiều loại nillable đơn giản - Các tiêu chuẩn WSDL cho phép loại đơn giản là con số không, trong Delphi hoặc NULL, trong C++, trong khi Delphi và C++ không cho phép điều đó. Chọn tùy chọn này để làm cho trình nhập WSDL vượt qua giới hạn này bằng cách sử dụng các cá thể của các lớp trình bao bọc.

+0

Tôi đã thử tùy chọn đó nhưng trình nhập khẩu wsdl vẫn nhập nó dưới dạng Int64. Phải có một cái gì đó trong wsdl nói với các nhà nhập khẩu rằng nó không nilable. Tôi đã cố gắng thay đổi định nghĩa đơn vị nhập khẩu cho E06_14 để TXSInteger nhưng không thể tìm thấy một cách để làm cho TXSInteger một giá trị nil.Có lẽ tôi sẽ thử thay đổi nó thành TXSString và xem tôi có may mắn hơn không. –

+2

Tôi đã sửa đổi đơn vị đã nhập và thay đổi loại từ Int64 thành TXSInteger. Sau đó, tôi đặt nó thành nil thay vì instantiating TXSInteger. Hoạt động tốt ngay bây giờ. –

+0

vui vì tôi có thể giúp! – mjn