[Hydra] Blokada otwierania okna FS

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

vateusz
Posty: 7
Rejestracja: 25 sie 2023, 15:50
Rola: Inny
Wersja: 2023

[Hydra] Blokada otwierania okna FS

Post 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 :)

JarekZ
Posty: 135
Rejestracja: 02 paź 2014, 14:11
Rola: Administrator CDN XL
Lokalizacja: Bielsko Biała
Kontakt:

Re: [Hydra] Blokada otwierania okna FS

Post 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 ;)

vateusz
Posty: 7
Rejestracja: 25 sie 2023, 15:50
Rola: Inny
Wersja: 2023

Re: [Hydra] Blokada otwierania okna FS

Post 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.

StabiL
Posty: 44
Rejestracja: 28 cze 2017, 15:41
Rola: Konsultant CDN XL

Re: [Hydra] Blokada otwierania okna FS

Post 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 :P

vateusz
Posty: 7
Rejestracja: 25 sie 2023, 15:50
Rola: Inny
Wersja: 2023

Re: [Hydra] Blokada otwierania okna FS

Post 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 ;)

StabiL
Posty: 44
Rejestracja: 28 cze 2017, 15:41
Rola: Konsultant CDN XL

Re: [Hydra] Blokada otwierania okna FS

Post autor: StabiL »

Aż z ciekawości sprawdziłem, faktycznie nie działa... :D 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/

JarekZ
Posty: 135
Rejestracja: 02 paź 2014, 14:11
Rola: Administrator CDN XL
Lokalizacja: Bielsko Biała
Kontakt:

Re: [Hydra] Blokada otwierania okna FS

Post 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;
        }



    }

vateusz
Posty: 7
Rejestracja: 25 sie 2023, 15:50
Rola: Inny
Wersja: 2023

Re: [Hydra] Blokada otwierania okna FS

Post 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.

xtomi
Posty: 408
Rejestracja: 16 lut 2010, 21:24
Rola: Administrator CDN XL
Wersja: 10

Re: [Hydra] Blokada otwierania okna FS

Post 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

StabiL
Posty: 44
Rejestracja: 28 cze 2017, 15:41
Rola: Konsultant CDN XL

Re: [Hydra] Blokada otwierania okna FS

Post autor: StabiL »

Prawdopodobnie odwołujesz się do złego obiektu. Każda lista na liście zamówień ma odrębną nazwę.

ODPOWIEDZ