Strona 1 z 2
[Hydra] Blokada otwierania okna FS
: 27 wrz 2023, 13:06
autor: vateusz
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

Re: [Hydra] Blokada otwierania okna FS
: 27 wrz 2023, 17:27
autor: JarekZ
sprawdź
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;
}
pisane z pamięci

Re: [Hydra] Blokada otwierania okna FS
: 28 wrz 2023, 11:48
autor: vateusz
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.
Re: [Hydra] Blokada otwierania okna FS
: 28 wrz 2023, 12:59
autor: StabiL
Spróbuj
Kod: Zaznacz cały
[SubscribeProcedure((Procedures)Procedures.ListaDokumentow, "ListaDokumentow")]
Osobiście bałbym się robić trigger blokujący na takie zdarzenie

Re: [Hydra] Blokada otwierania okna FS
: 29 wrz 2023, 12:38
autor: vateusz
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

Re: [Hydra] Blokada otwierania okna FS
: 29 wrz 2023, 14:16
autor: StabiL
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/
Re: [Hydra] Blokada otwierania okna FS
: 29 wrz 2023, 16:23
autor: JarekZ
skoro 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;
}
}
Re: [Hydra] Blokada otwierania okna FS
: 09 paź 2023, 10:09
autor: vateusz
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.
Re: [Hydra] Blokada otwierania okna FS
: 18 gru 2023, 15:26
autor: xtomi
JarekZ pisze: ↑29 wrz 2023, 16:23
skoro 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;
}
}
Czesc
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
: 18 gru 2023, 15:55
autor: StabiL
Prawdopodobnie odwołujesz się do złego obiektu. Każda lista na liście zamówień ma odrębną nazwę.