Dynamicznie ładowana forma

0

Przyznaje, ze nie mam do konca sprecyzowanego pomysłu, ale po cichu liczę, że podpowiecie kierunek.

Moja aplikacja zaczyna się mocno rozrastać (klasyczna obsluga obiegu dokumentow), ale rownoczesnie zaczyna sie pojawiac problem uprawnien i charakterystyki biznesu poszczegolnych klientow.

Teraz. Do tej pory robilem tak, ze robilem sobie jakis TForm, ktory podpinalem pod Parenta TTabSheet. Dzialalo to fajnie (mialo swoje wady, ale generalnie robilo robote).

Teraz - chce rozwiazac kilka kwestii - uprawnienia (nie wszystkie moduly musza/powinny być widziane przez wszystkich uzytkownikow), charakterystyka biznesu (kazdy klient - nawet w tej samej branzy ma inna specyfike, inne doswiadczenie, inna wiedze i pomysl na podejscie do obiegu dokumentow).

Obie rzeczy sprowadzaja sie do jednego wniosku - moduły trzeba ładować dynamicznie. Szczerze, to nie jadlem DLLek w wydaniu z wykorzystaniem form - to znaczy nie wiem jak ugryzc to co robie teraz - czyli podpinanie formy zdefiniowanej w DLL pod jakiegos Parenta w EXEcu. Drugi pomysl, to dynamiczne ladowanie zawartosci/wygladu form - ale to wymaga kompletnego przekonstruowania aplikacji i koniecznosc stworzenia kompletu wlasnych komponentow.

Generalnei kiedys w przyszlosci chcialbym calosc logiki aplikacji przeniesc do serwera bazy danych, a aplikacje traktowac jako cienkiego klienta tylko i wylacznie realizujacego funkcje prezentacji danych i interface usera.

Ufff ... mam nadzieje, ze nie smędzę.

Pytanie ogolne jest proste: Jak ugryźć temat dynamicznego tworzenia wygladu i zachowania aplikacji.

0

No cóż, jeśli dobrze Cię rozumiem, to masz błąd od samego początku - użycie TTabSheet zamiast MDI. Ale nie jestem pewien, czy dobrze rozumiem.

Ja robię tak, że tworzę aplikację MDI i mam kilka form bazowych.
Potem większość form z danymi dziedziczy po formach bazowych.

Wszystkie formy są tworzone dynamicznie po kliknięciu w odpowiedni element menu. Jeśli ktoś nie ma do czegoś uprawnień, to element menu jest po prostu zablokowany lub ukryty.

0

TPageControl (z TTabSheetami) służy li tylko i wyłącznie jako kontener.

Formy są tworzone w osobnych modułach (każdy logiczny moduł w osobnym unicie). Każdy moduł stanowi zamkniętą całość. W związku z tym mam możliwość stworzyć dowolną ilość instancji jak również podpiąć pod (teoretycznie) prawie każdego Parenta (po TWinControl). Okno może w ten sposób być wyświetlane samodzielnie, jak i sParentowane.

Wydaje mi się (może błednie), że nie jest to złe założenie (a przynajmniej na przestrzeni ostatnich czterech lat nie potrzebowałem tego przerabiać).

Przyjąłem układ z Tabami. Dobry/Zły - o gustach się nie dyskutuje - ważne, że dla klientów jest to jako tako czytelne i maja szybko dostęp do poszczególnych modułów.

W razie potrzeby - podpinam pod danego Taba inny moduł i aplikacja zachowuje sie inaczej (może obsługiwać inne funkcje, inny wygląd, inna specyfika, etc).

Jednak do takiego przebudowania aplikacji potrzebna jest rekompilacja. Chciałem więc (a przynajmniej pomyślałem, że fajnie by było) gdyby moduły można było dopinać dynamicznie przez DLLki (ale nigdy czegoś takiego nie robiłem i nie wiem czy jest to możliwe). Wtedy okna działały by troche na zasadzie pluginów (bez przeginki, ale moduł główny udostepnia tylko kontener i polaczenie - reszta jes realizowana przez dany modul).

Nie bardzo rozumiem koncepcje "dziedziczenia form bazowych". To znaczy - nie to, że nie rozumiem dziedziczenia jako takiego, tylko nie bardzo rozumiem sens (prawdopodobnie wynika to z mojej ignorancji). No bo do tej pory zawsze robilem tak, że każdy moduł budowałem od podstaw - to znaczy - wiekszosc modułów ma tak drastycznie mało wspólnych cech, że nie widzialem sensu podchodzic do tego obiektowo (w takim sensie jak rozumiem ty podchodzisz - masz okno bazowe ze szkieletem, ktory w formie potomnej wypelniasz szczegolami). Powolutku zmierzam do tego, że okienko będzie tylko prezentowało dane, a logika będzie w SQLu (to znaczy główne procedury obliczeniowe sa juz po stronie serwera, ale np mechanizmy wyciagania i prezentacji danych nadal sa po stronie aplikacji realizowany w dosc siermiężny sposób).

Juhas ... czy ty używasz GG ?

0
toyman napisał(a)

TPageControl (z TTabSheetami) służy li tylko i wyłącznie jako kontener.

Teraz lepiej zrozumiałem.
Najszybszym rozwiązaniem byłoby teraz po prostu ukrywanie konkretnych tabów w zależności od uprawnień. Ale to nie załatwia sprawy innego działania okna dla innych użytkowników, chyba, że byś to jakoś mądrze sparametryzował.

Formy w dllkach wg mnie byłyby bardzo dobrym rozwiązaniem, jeśli różnice w działaniu okna w zależności od użytkownika są spore. Bo jeśli to np. kwestia pokazania/ukrycia kilku komponentów, no to wg mnie lepiej parametryzować.

Jeśli chodzi o formy w dllkach, to jest wystarczająco to w necie opisane, a i nawet gdzieś w artykułach w tym serwisie. Musisz po prostu poczytać i popróbować. Widziałem gdzieś takie rzeczy, że gościu umieszczał na tabach formy z dllek. Nie pamiętam niestety gdzie(chyba szukałem coś o pluginach wtedy).

Nie bardzo rozumiem koncepcje "dziedziczenia form bazowych".

Ja mam dość sporo wspólnych cech.
Przykładowo - formy słownikowe.
Na każdej mam AdoQuery, jakiegoś grida i analogiczne zachowanie przycisków.

Albo formy(dzieci MDI), które wyświetlają już jakieś konkretne dane. Na każdej mam adoQuery i grida. Dodatkowo mam w formie bazowej oprogramowane różne przydatne metody(np. SelectSQL, gdzie w parametrze podaję zapytanie, a metoda wyświetla mi dane na gridzie, czy też sortowanie).

Juhas ... czy ty używasz GG ?

Używam, ale nie w robocie :)
W każdym razie prawie zawsze jestem niewidoczny.

0
Juhas napisał(a)
toyman napisał(a)

Nie bardzo rozumiem koncepcje "dziedziczenia form bazowych".

Ja mam dość sporo wspólnych cech.
Przykładowo - formy słownikowe.
Na każdej mam AdoQuery, jakiegoś grida i analogiczne zachowanie przycisków.
Ja akurat do slownikow (takich, z których user wybiera tylko konkretna wartosc/wartosci) mam jedno okienko, ktore napelniam odpowiednim SQLem, a zestawem metod steruje zachowaniem poszczegolnych kolumn

A wracajac do glownego watku - w nowej wersji, do ktorej wlasnie podchodze wlaczanie, badz wylaczanie funkcji/pol chce realizowac w oparciu o SQLa - to znaczy - procedury, ktore mozna wykonac na konkretnym dowodzie realizowane sa za pomoca przyciskow (panel z przyciskami, a caly system jest troche bardziej skomplikowany, bo nie operuje bezposrednio na tabelach stalych, tylko na tzw. tabelach edycyjnych), ktorych lista jest dynamicznie ladowana z VIEW. Na razie lista procedur jest ladowana zawsze kompletna, ale docelowo bedzie doJOINowana tabelka z uprawnieniami w taki sposob, ze kazdy uzytkownik bedzie mogl zobaczyc tylko tyle, na ile pozwoli mu wynik zapytania - oczywiscie wszystkie procedury (operacje, jakie mozna wykonac na dowodach) sa realizowane po stronie serwera.

Takze parametryzacja jest realizowana dynamicznie.

Generalnie chodzilo mi, o metody jakich uzywacie do pokazywania/chowania/podmieniania funkcjonalnych modulow.

1 użytkowników online, w tym zalogowanych: 0, gości: 1