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

[HANDEL FORTE]
https://forum.mix-soft.pl/viewtopic.php?f=15&t=86
Strona 1 z 1

Autor:  mnat [ 2008-04-10, 09:44 ]
Tytuł:  [HANDEL FORTE]

Witam,

Dokładnie jak w temacie.
Szukam rozwiązania na temat zastosowania wyjątków.
Chodzi mi dokładnie o uzyskanie wyjątku w przypadku nieudanego tworzenia nowego obiektu poprzez dispatch.
Teoretycznie w systemie powinny być obiekty COM, bo są instalowane wraz z symfonią, ale...

To o co mi dokładnie chodzi, przykładowo wyglądałoby to tak (o ile istniałyby bloki try i catch):

Kod:
try
   Dispatch xFrm = xFactory.GetObject("BFirma")
catch
   Message "Nie można utworzyć obiektu"


Proszę o jakiś namiar

Autor:  barnie [ 2008-04-10, 09:53 ]
Tytuł: 

Jeżeli obiekt nie jest zainstalowany w systemie to dostaniesz komunikat, że nie mógł zostać utworzony.

Jeżeli jest w systemie i z jakiegoś powodu nie mógł zostać utworzony to proponuję
Kod:
dispatch dObj

if dObj   then // try
   message "Obiekt utworzony"
else // catch
   message "Obiekt nie został utworzony"
endif


to miałeś na myśli?

Autor:  mnat [ 2008-04-11, 08:52 ]
Tytuł: 

Mniej więcej o to chodzi.
Tylko jeszcze nie do końca - handel wyrzuca komunikatem o błędzie w momencie przypisania wartości obiektu do zmiennej dispatch.

W Twojej konstrukcji kodu, tak czy inaczej muszę nadać wartość dla zmiennej przed warunkiem if, bo po co tak na prawdę ma być sprawdzany obiekt skoro istnieje tylko jego deklaracja.

A troszkę prościej i obrazowo - konstrukcja

Kod:
dispatch dObj


if dObj then
   Message "Obiekt utworzony"
else
   Message "Obiekt nie został utworzony"
endif



zawsze będzie wyrzucała komunikat "Obiekt nie został utworzony" bo obiektu po prostu nie ma.


Chodzi o to że


Kod:
/*
Tutaj tworzony jest obiekt i tutaj nadawana mu jest wartość i niestety tutaj symfonia zaprojektowała "wewnętrzny" wyjątek, który wyskakuje przy pewnych warunkach, o których nic nie wiem.
*/

dispatch dObj  = xFactory.GetObject("BFirma")


/*
A tutaj istniałby już sens sprawdzania obiektu, tylko po co z kolei, jeżeli już jest utworzony?
*/

if dObj then
   Message "Obiekt utworzony"
else
   Message "Obiekt nie został utworzony"
endif



Myślę, ze teraz już sprawa wygląda jaśniej ;-)

Autor:  barnie [ 2008-04-11, 13:00 ]
Tytuł: 

Nie widzę sensu sprawdzania utworzenia obiektu w tym miejscu. Komunikat o niemożności utworzenia obiektu należely rozumieć, że środowisko w jakim ma pracować Twój raport nie jest gotowe. I co z tego, że przechwycisz to zdarzenie jak i tak nie zrealizujesz zał. funkcjonalności bez obiektów, których zdecydowałeś się użyć.

Zgodzę się, że możnaby w tym miejscu wyświetlić ładniejszy komunikat.
Np: "Brak zainstalowanych komponentów koniecznych do prawidłowej pracy raportu." :)

Z drugiej strony wierzę, że masz taką potrzebę, żeby to było. Może napisz co dokładnie chcesz zrobić to najdziemy inne rozwiązanie.

Mój przykład jak najbardziej jest przydatny. Dobrym przykładem może być biblioteka MxGridLib i obiekty grid i row.

Row ma metodę GetParent(), która zwraca obiekt typu row będącego rodzicem tego pierwszego.

Kod:
dispatch g = "grid" // tworzenie obiektu powinno odbywać się na formie
dispatch r // to będzie obiekt rodzica

// sprawdźmy czy drugi wiersz ma rodzica
r = g.Rows(1).GetParent()

// sprawdzamy czy utworzył się obiekt

if r then
   message r.Value(0) // pokazuje pierwszą celle rodzica
else
   message "Jestem sierotą i nic nie pokażę. Wywołanie r.Value(0) spowodowałoby wywalenie błędu."
endif

Autor:  mnat [ 2008-04-14, 08:16 ]
Tytuł: 

Najprościej mówiąc: chcę zamienić brzydki komunikat sugerujący niepoprawne działanie raportu (nie można utworzyć obiektu (...) błąd linii xx) na mój własny

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