mojaSymfonia FORUM
https://forum.mix-soft.pl/

Obsłużenie Null w ambasic
https://forum.mix-soft.pl/viewtopic.php?f=15&t=10561
Strona 1 z 1

Autor:  krzysztofsymfonia [ 2023-07-05, 16:07 ]
Tytuł:  Obsłużenie Null w ambasic

Hej, wczytuje sobie dokument xml (faktura z pozycjami) i chce odczytać jego pola, wszystko ok działa. Ale, mam pole OrderedUnitNetPrice, ale okazuje sie ze w ktorejs pozycji faktury nie ma takiego pola w xml. Handel wyrzuca błąd obiekt Ole nie został zainicjowany dla linijki:

Kod:
cena = xDoc.getElementsByTagName("OrderedUnitNetPrice").item(k).text


próbowałem dać
Kod:
if  xDoc.getElementsByTagName("OrderedUnitNetPrice").item(k).Count >0
ale wtedy błąd że nie ma takiej propercji (wg dokumentacj powinna być)

albo
Kod:
xDoc.getElementsByTagName("OrderedUnitNetPrice").Count
jako że xDoc.getElementsByTagName ma zwracać listę ale to samo. Jak wiec moge sprawdzić czy obiekt jest nullem ?

Czy da się w ambasicu zobić try catch jakoś ?

Autor:  rafal [ 2023-07-05, 21:18 ]
Tytuł:  Re: Obsłużenie Null w ambasic

Tak możesz to obsłużyć.
Czy używasz Microsoft.XMLDOM do odczyty xml'a?

Autor:  Arek44 [ 2023-07-05, 22:39 ]
Tytuł:  Re: Obsłużenie Null w ambasic

Podłączam się pod temat, bo mam analogiczny problem przy czytaniu XMLi i musiałem zduplikować raport, żeby go ominąć. Używam Microsoft.XMLDOM do odczytu.

Autor:  rafal [ 2023-07-06, 07:49 ]
Tytuł:  Re: Obsłużenie Null w ambasic

użyj SelectNodes do sprawdzenia czy istnieje element

Poniższa funkcja w przypadku braku elementu podstawia wartość domyślną

Kod:
string sub NodeValue( dispatch x, string xmlpath, string defVal)
   if x.selectNodes( xmlpath ).length then
      NodeValue = x.selectNodes( xmlpath ).item( 0 ).text
   else
      NodeValue = defVal
   endif
endsub


wtedy Twój kod będzie wyglądał

Kod:
print NodeValue(xDok, "OrderedUnitNetPrice","0")


Czy o to chodziło?

Autor:  krzysztofsymfonia [ 2023-07-07, 09:46 ]
Tytuł:  Re: Obsłużenie Null w ambasic

rafal pisze:
użyj SelectNodes do sprawdzenia czy istnieje element

Poniższa funkcja w przypadku braku elementu podstawia wartość domyślną

Kod:
string sub NodeValue( dispatch x, string xmlpath, string defVal)
   if x.selectNodes( xmlpath ).length then
      NodeValue = x.selectNodes( xmlpath ).item( 0 ).text
   else
      NodeValue = defVal
   endif
endsub


wtedy Twój kod będzie wyglądał

Kod:
print NodeValue(xDok, "OrderedUnitNetPrice","0")


Czy o to chodziło?



Tak , choć w międzyczasie sam to samo sobie znalazłem. Ale pozostaje główne pytanie czy można obsłużyć błędy na zasadzie try catch i jeszcz finaly najlepiej :)

Autor:  rafal [ 2023-07-07, 10:16 ]
Tytuł:  Re: Obsłużenie Null w ambasic

Nie można niestety.

Możesz to ominąć pisząc kontrolkę w C# i rejestrując ją w systemie.
Wtedy zrobisz część zadania w C# (Matadane) z try catch i przekażesz wynik do AMBasic.

Powinniśmy już powoli zapominać o AmBasic na rzecz skryptów C# i modułów PRISM.

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/