[Hydra] Blokada otwierania okna FS
Moderator: mikey
[Hydra] Blokada otwierania okna FS
Witam
Próbuję stworzyć następujący dodatek do XLa w Dużej Hydrze:
> przy próbie generowania FS z ZS sprawdzam w bazie czy ZS spełnia pewien warunek i jeśli nie to chcę uniemożliwić wystawienie na jego podstawie FS. Ze sprawdzeniem warunku nie ma problemu, problemem jest zablokowanie możliwości tworzenia FS.
Czego już próbowałem:
- blokowanie zapisu FS (przycisk dyskietki)
- wymuszenie przez dodatek wciśnięcia przycisku Anuluj lub zamknięcie okna
Rozwiązania te się nie sprawdzają, bo zawsze przy anulowaniu wyskakuje komunikat "Zapisać zmiany?" - wtedy użytkownik może kliknąć "Tak", więc i tak zapisze zmiany albo "Anuluj" i ma otwarte okno FS do edycji i może robić z dokumentem co chce.
To również próbowałem obejść, wymuszając na oknie komunikatu wciśnięcie przycisku "Nie", ale jest obsługiwane jako całkiem osobny Callback i działa na wszystkie komunikaty w systemie, więc jest to działanie niepożądane.
Da się to jakoś inaczej rozwiązać? Idealnie by było, gdyby po niespełnieniu warunku w ogóle nie podnosiło się okno FS, ale nie znalazłem sposobu jak coś takiego uzyskać.
Dzięki za wszelką pomoc
Próbuję stworzyć następujący dodatek do XLa w Dużej Hydrze:
> przy próbie generowania FS z ZS sprawdzam w bazie czy ZS spełnia pewien warunek i jeśli nie to chcę uniemożliwić wystawienie na jego podstawie FS. Ze sprawdzeniem warunku nie ma problemu, problemem jest zablokowanie możliwości tworzenia FS.
Czego już próbowałem:
- blokowanie zapisu FS (przycisk dyskietki)
- wymuszenie przez dodatek wciśnięcia przycisku Anuluj lub zamknięcie okna
Rozwiązania te się nie sprawdzają, bo zawsze przy anulowaniu wyskakuje komunikat "Zapisać zmiany?" - wtedy użytkownik może kliknąć "Tak", więc i tak zapisze zmiany albo "Anuluj" i ma otwarte okno FS do edycji i może robić z dokumentem co chce.
To również próbowałem obejść, wymuszając na oknie komunikatu wciśnięcie przycisku "Nie", ale jest obsługiwane jako całkiem osobny Callback i działa na wszystkie komunikaty w systemie, więc jest to działanie niepożądane.
Da się to jakoś inaczej rozwiązać? Idealnie by było, gdyby po niespełnieniu warunku w ogóle nie podnosiło się okno FS, ale nie znalazłem sposobu jak coś takiego uzyskać.
Dzięki za wszelką pomoc
-
- Posty: 135
- Rejestracja: 02 paź 2014, 14:11
- Rola: Administrator CDN XL
- Lokalizacja: Bielsko Biała
- Kontakt:
Re: [Hydra] Blokada otwierania okna FS
sprawdź
pisane z pamięci
Kod: Zaznacz cały
public override void Init()
{
AddFileActionSubscription(true, FileActionTypes.InsertInit, new FileActionDelegate(InsertInit));
}
public bool InsertInit(Procedures ProcedureId, GID GID, ADODB._Recordset Attr)
{
if _warunek
return true
else false;
}
Re: [Hydra] Blokada otwierania okna FS
Tylko pod jaką procedurę w tym przypadku ma być podpięty Callback?
Próbowałem do TrN_FS ale nie działa.
Poza Hydrą próbowałem to jeszcze zrobić samym triggerem na bazie danych, ale i tutaj spotkałem się z dziwnym zachowaniem XLa. Napisałem trigger, który powinien wyrzucić błąd jeśli użytkownik będzie próbował wystawić FS bez spełnienia warunku. XL faktycznie wyrzuca ten błąd, ale nie w oknie komunikatu tylko w liście zdarzeń - tam jest informacja, że nie można dodać dokumentu + moja wiadomość z błędu, ale mimo tego FS się tworzy (na czerwono tylko do odczytu, ale po wyłączeniu i włączeniu modułu można go już edytować).
Trigger tworzyłem analogicznie do innego, który mam na tej samej tabeli i działa poprawnie.
Próbowałem do TrN_FS ale nie działa.
Poza Hydrą próbowałem to jeszcze zrobić samym triggerem na bazie danych, ale i tutaj spotkałem się z dziwnym zachowaniem XLa. Napisałem trigger, który powinien wyrzucić błąd jeśli użytkownik będzie próbował wystawić FS bez spełnienia warunku. XL faktycznie wyrzuca ten błąd, ale nie w oknie komunikatu tylko w liście zdarzeń - tam jest informacja, że nie można dodać dokumentu + moja wiadomość z błędu, ale mimo tego FS się tworzy (na czerwono tylko do odczytu, ale po wyłączeniu i włączeniu modułu można go już edytować).
Trigger tworzyłem analogicznie do innego, który mam na tej samej tabeli i działa poprawnie.
Re: [Hydra] Blokada otwierania okna FS
Spróbuj
Osobiście bałbym się robić trigger blokujący na takie zdarzenie
Kod: Zaznacz cały
[SubscribeProcedure((Procedures)Procedures.ListaDokumentow, "ListaDokumentow")]
Re: [Hydra] Blokada otwierania okna FS
Niestety nic nie podziałało, próbowałem podpiąć callbacka pod listę dokumentów i nie ma żadnej reakcji na próbę wygenerowania faktury.
Ewentualnie, czy istnieje może taki event, który by uruchamiał metodę jeszcze przed inicjalizacją okna? JustAfterWindowOpening to jest już za późno, bo w tym momencie FS już jest utworzony. Chcę żeby cały proces został zablokowany jeszcze przed utworzeniem nagłówka, wtedy ma pojawić się mój MessageBox i tworzenie dokumentu musi zostać przerwane.
Myślałem jeszcze o innym rozwiązaniu, żeby na liście zamówień ZS blokować przyciski do wystawiania FS, ale nie wiem jak się dostać do kontrolek które rozwijane są z popUp listy albo spod prawego klawisza myszy. Ktoś coś wie może na ten temat?
PS. Co do triggera to mam innego, który działa poprawnie, ale tylko w przypadku ręcznego wystawiania FS, jeśli dokument jest generowany z ZS to już niestety nie działa tak jak powinien
Ewentualnie, czy istnieje może taki event, który by uruchamiał metodę jeszcze przed inicjalizacją okna? JustAfterWindowOpening to jest już za późno, bo w tym momencie FS już jest utworzony. Chcę żeby cały proces został zablokowany jeszcze przed utworzeniem nagłówka, wtedy ma pojawić się mój MessageBox i tworzenie dokumentu musi zostać przerwane.
Myślałem jeszcze o innym rozwiązaniu, żeby na liście zamówień ZS blokować przyciski do wystawiania FS, ale nie wiem jak się dostać do kontrolek które rozwijane są z popUp listy albo spod prawego klawisza myszy. Ktoś coś wie może na ten temat?
PS. Co do triggera to mam innego, który działa poprawnie, ale tylko w przypadku ręcznego wystawiania FS, jeśli dokument jest generowany z ZS to już niestety nie działa tak jak powinien
Re: [Hydra] Blokada otwierania okna FS
Aż z ciekawości sprawdziłem, faktycznie nie działa... Możesz też wbić się w before na JustAfterWindowOpening. Faktury nie zobaczysz, ale się utworzy
Blokada menu podręcznego nie jest złym rozwiązaniem - tu masz dokumentacje, jest też o wbijaniu się w popup.
https://pomoc.comarch.pl/xl/index.php/d ... 003-hydra/
Blokada menu podręcznego nie jest złym rozwiązaniem - tu masz dokumentacje, jest też o wbijaniu się w popup.
https://pomoc.comarch.pl/xl/index.php/d ... 003-hydra/
-
- Posty: 135
- Rejestracja: 02 paź 2014, 14:11
- Rola: Administrator CDN XL
- Lokalizacja: Bielsko Biała
- Kontakt:
Re: [Hydra] Blokada otwierania okna FS
skoro poprzednie nie zadziałało
to można tak :
to można tak :
Kod: Zaznacz cały
[SubscribeProcedure((Procedures)Procedures.ZaNLista, "Lista zamówień")]
public class Class2 : Callback
{
string ConnectionString = "";
public Class2()
{
}
public override void Cleanup() { }
public override void Init()
{
base.AddSubscription(true, 0, Events.OpenWindow, new TakeEventDelegate(this.OnOpenWindow));
}
public bool OnOpenWindow(Procedures ProcId, int ControlId, Events Event)
{
AddSubscription(false, GetWindow().AllChildren["?ListaZam"].Id, Events.XLPopup, new TakeEventDelegate(AfterPopup));
return true;
}
public bool AfterPopup(Procedures ProcId, int ControlId, Events Event)
{
XLPopupItem crPopupItem = Runtime.WindowController.GetPopupItem(ControlId);
if (crPopupItem.lPosition == 5)
{
MessageBox.Show(crPopupItem.ToString());
return false;
}
return true;
}
}
Re: [Hydra] Blokada otwierania okna FS
Dzięki za odpowiedzi i porady.
@StabiL: JustAfterWindowOpening działa już za późno, bo własnie faktura się tworzy a tego nie chcę.
Ostatecznie wymyśliłem inny sposób, żeby uzyskać taki efekt jaki chciałem. Przy zapisie dokumentu (przycisk dyskietki) dodatek sprawdza czy spełniony jest mój warunek i ewentualnie blokuje zapis.
@StabiL: JustAfterWindowOpening działa już za późno, bo własnie faktura się tworzy a tego nie chcę.
Ostatecznie wymyśliłem inny sposób, żeby uzyskać taki efekt jaki chciałem. Przy zapisie dokumentu (przycisk dyskietki) dodatek sprawdza czy spełniony jest mój warunek i ewentualnie blokuje zapis.
Re: [Hydra] Blokada otwierania okna FS
CzescJarekZ pisze: ↑29 wrz 2023, 16:23skoro poprzednie nie zadziałało
to można tak :
Kod: Zaznacz cały
[SubscribeProcedure((Procedures)Procedures.ZaNLista, "Lista zamówień")] public class Class2 : Callback { string ConnectionString = ""; public Class2() { } public override void Cleanup() { } public override void Init() { base.AddSubscription(true, 0, Events.OpenWindow, new TakeEventDelegate(this.OnOpenWindow)); } public bool OnOpenWindow(Procedures ProcId, int ControlId, Events Event) { AddSubscription(false, GetWindow().AllChildren["?ListaZam"].Id, Events.XLPopup, new TakeEventDelegate(AfterPopup)); return true; } public bool AfterPopup(Procedures ProcId, int ControlId, Events Event) { XLPopupItem crPopupItem = Runtime.WindowController.GetPopupItem(ControlId); if (crPopupItem.lPosition == 5) { MessageBox.Show(crPopupItem.ToString()); return false; } return true; } }
Działa Ci to w każdym przypadku?, chwile z tym walczyłem, ale jakby XL w ogóle nie reagowal na event XLPopup
Re: [Hydra] Blokada otwierania okna FS
Prawdopodobnie odwołujesz się do złego obiektu. Każda lista na liście zamówień ma odrębną nazwę.