środa, 21 stycznia 2009

Mechanizm Hydry - duża Hydra

Hydra jest nazwą mechanizmu tworzenia dodatków do systemu CDN XL, częściej znanym jako callback lub wywołanie zwrotne. Mechanizm ten daje programiście możliwość umieszczenia w niektórych oknach CDN-a własnych kontrolek (zwykle są to przyciski). Callback jest zwykłą biblioteką kodu skompilowanego w pliku dll. Moduł ten należy opisać atrybutem CallbackAssemblyDescription.

[assembly:CallbackAssemblyDescription(
"nazwa",
"opis",
"wersja",
"wersja cdnxl",
"dd-mm-rrrr”)]

W pliku dll należy zdefiniować publiczną klasę dziedziczącą po klasie Callback znajdującej się w bibliotece CdnHydra.dll. Klasę tą należy jeszcze opisać atrybutem SubscribeProcedure:

[SubscribeProcedure((Procedures)Procedures.KntEdycja,"callback na karcie kontrahenta")]

Struktura Procedures zawiera nazwy formatek systemu CDN, na których możliwe jest umieszczanie i uruchamianie wywołań zwrotnych.


Klasa Callback jest klasą abstrakcyjną i wymusza zdefiniowanie w klasie naszego callbacka metod Init oraz Celanup. Służą one do umieszczenia odpowiednio kodu dla inicjacji i zakończenia pracy callbacka. W metodzie Init najczęściej definiowane są tzw. subskrypcje zdarzeń systemu, jak np. otwarcie okna edycji karty kontrahenta.

public override void Init()
{
AddSubscription(true, 0, Events.OpenWindow, new TakeEventDelegate(OnOpenWindow));
}

Po wystąpieniu tego zdarzenia, callabck wykonuje kod umieszczony w metodzie OnOpenWindow. Najrozsądniej jest umieścić w niej definicje kontrolek, ich właściwości oraz obsługę kolejnych zdarzeń - tym razem wywoływanych przez własne kontrolki. Przykładowy kod:

bool OnOpenWindow(Procedures ProcId, int ControlId, Events Event)
{
ClaWindow Parent = GetWindow();
NewButton = Parent.Children.Add(ControlTypes.button);
NewButton.Visible = true;
NewButton.TextRaw = " przycisk Hydry ";
NewButton.Bounds = new Rectangle(550, 3, 90, 15);
NewButton.OnAfterMouseDown += new TakeEventDelegate(NewButton_OnAfterMouseDown);
return true;
}

W pierwszym kroku pobieramy kontrolkę okna, w którym ma pojawić się nasz przycisk. Następnie do tej kontrolki dodajemy naszą i definiujemy kilka jej właściwości oraz dodajemy obsługę zdarzenia naciśnięcia przycisku w metodzie NewButton_OnAfterMouseDown. Wreszcie w tej ostatniej metodzie wpisujemy kod, który chcemy aby był wykonywany po naciśnięciu przez użytkownika przycisku.

bool NewButton_OnAfterMouseDown(Procedures ProcedureId, int ControlId, Events Event)
{
Runtime.WindowController.UnlockThread();
MessageBox.Show(KntKarty.Knt_Akronim + ": " + KntKarty.Knt_GIDNumer);
Runtime.WindowController.LockThread();
return true;
}

Jeżeli kod obsługi zdarzenia zawiera definicje okien dialogowych pokazywanych użytkownikowi, to przed ich wyświetleniem konieczne jest odblokowanie wątku aplikacji, z której jest ono wywoływane. Zarówno odblokowanie jak i późniejsza blokada wywoływana jest poprzez managera okien WindowController.

Rejestracja callbacka w systemie CDN XL składa się z dwóch etapów: wgrania i aktywacji. Wgranie callbacka można przeprowadzić w każdym module poprzez menu System -> Callbacki -> Importuj. Po odszukaniu i zatwierdzeniu pliku dll z kodem callbacka należy zaznaczyć go na liście, wcisnąć przycisk Edycja i zmienić jego stan na Aktywny. Tak wgrany callback należy aktywować w module Administrator poprzez menu Narzędzia - > Struktura firmy -> edycja -> Dodatki -> dodaj.

1 komentarz:

  1. To wszystko, co zostało napisane w metodzie onOpenWindow, powinno się znaleźć w metodzie OnJustAfterWindowOpen...w przeciwnym razie callback czasem moze nie działać...pozdrawiam.

    OdpowiedzUsuń