2012-09-15 11 views
7

Używam usługi internetowej z elementem numerycznym. Importer plików wsdl Delphi ustawia go jako Int64.Pusta wartość w serwisie WWW dla typu Int64

Usługa internetowa zezwala na to, że ten element jest pusty. Ponieważ jednak jest zdefiniowany jako Int64, gdy korzystam z usługi sieciowej w Delphi bez ustawiania wartości, domyślnie jest to 0, ponieważ jest to Int64. Ale potrzebuję go jako pustego, a usługa internetowa nie przyjmie wartości 0 (0 jest zdefiniowane jako nieprawidłowe i zwraca błąd przez usługę WWW).

Jak mogę przekazać pustą wartość, jeśli typem jest Int64?

+0

Poinformuj usługodawcę, że powinien naprawić swoje usługi? "Pusta" nie jest poprawną wartością dla 'Int64' (i użycie' Int64' dla wieku osoby jest po prostu śmieszne - niewielu ludzi żyje dłużej niż to, co może pomieścić "bajt", przynajmniej od Czasy biblijne). –

+0

Może możesz wypróbować 999 jako wiek – Hendra

Odpowiedz

7

Empty wiek (przykład)

<E06_14></E06_14> 

może mieć szczególne znaczenie, na przykład jako "nieznany" wiek.

W tym przypadku prawdziwym pytaniem jest, jak sprawić, by pole nie działało po stronie Delphi.

Od this post z J.M. Babet:

Wsparcie dla 'nil' jest ciągłym problemem. Kilka wbudowanych typów Delphi nie jest zerowalnych. Więc zdecydowaliśmy się użyć klasy dla tych przypadków (nie elegancka, ale działa). Tak więc przy najnowszej aktualizacji Delphi 2007 dodałem kilka typów TXSxxxx, aby pomóc w tym. Zasadniczo: TXSBoolean, TXSInteger, TXSLong, itp. TXSString już tam był, ale nie został zarejestrowany. Teraz jest. Podczas importowania pliku WSDL należy: włączyć opcję Użyj opcji "TXSString dla prostych typów złączy", aby importer przełączył się na typy TXSxxxx. W linii poleceń jest to opcja "-0z +".

W DocWiki for the Import WSDL Wizard pokazuje również dwie opcje związane z elementami nillable:

  • Process nillable i opcjonalne elementy - Zaznacz tę opcję, aby importer WSDL generowania istotnych informacji na temat opcjonalnego i nillable nieruchomości. Ta informacja jest używana przez środowisko wykonawcze SOAP , aby umożliwić zerowanie pewnych właściwości.

  • Zastosowanie TXSString dla typów prostych nillable - Standardowa WSDL umożliwia proste typy być zerowa, w Delphi lub NULL, w C++, a Delphi i C++ nie pozwolić. Zaznacz tę opcję, aby importer WSDL mógł przezwyciężyć to ograniczenie, używając instancji klas opakowania.

+0

Próbowałem tej opcji, ale importer wsdl nadal importuje go jako Int64. W pliku WSDL musi być coś, co mówi importerowi, że nie jest ono nullable. Próbowałem zmienić definicję zaimportowanej jednostki dla E06_14 na TXSInteger, ale nie mogłem znaleźć sposobu, aby uczynić TXSInteger wartością zerową.Może spróbuję zmienić to na TXSString i zobaczyć, czy mam więcej szczęścia. –

+2

Zmodyfikowałem zaimportowaną jednostkę i zmieniłem typ z Int64 na TXSInteger. Następnie ustawiłem go na zero, zamiast tworzyć instancję TXSInteger. Działa teraz świetnie. –

+0

cieszę się, że mogę pomóc! – mjn

Powiązane problemy