[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.
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ń