Paweł Jeliński 0 Napisano 2 Lutego 2023 Udostępnij Napisano 2 Lutego 2023 w Sfera zdarzeniowa - ustawienie blokady gdy zamówienie (nowe) jest tworzone w przedziale godzinowym. Dzień Dobry, Natknąłem się z problemem podczas tworzenia blokady dodawania zamówienia od klientów w zadanych godzinach. Samo rozszerzenie robiłem na podstawie innego tego typu blokady, która działa w tym momencie poprawnie (ctrl+c ctrl+v z zmienionym warunkiem blokady oraz treść blokady). Nie jestem w tym momencie pewny co może być powodem niedziałania blokady. using InsERT.Moria.Asortymenty; using InsERT.Moria.Dokumenty.Logistyka; using InsERT.Moria.ModelDanych; using InsERT.Moria.Narzedzia.PolaWlasne2; using InsERT.Moria.Rozszerzanie; using System; using System.Diagnostics; namespace ZamowieniaSprawdzenieGodzin { public class ZamowienieGodzinySferaZdarzeniowaPlugin : KlientSferyZdarzeniowej<IZamowienieOdKlienta> { public override void PrzedZapisemObiektu(IKontekstZdarzeniaPrzedZapisemObiektu<IZamowienieOdKlienta> kontekst) { //string polePodmiotu = ""; //string polePodmiotu2 = ""; //string poleZamowienia = ""; base.PrzedZapisemObiektu(kontekst); // WalidujTrasy(kontekst, kontekst.ObiektBiznesowy.Dane); DokumentZK zk = new DokumentZK(); zk = kontekst.ObiektBiznesowy.Dane; //var tmp = zk.PobierzEncjeZaawansowanychPolWlasnych(); if (DateTime.Now.Hour < 14 || DateTime.Now.Hour > 15) { WalidujGodzine(kontekst, zk); }else { kontekst.UsunWszystkieBledyIOstrzezenia(zk, nameof(zk.NumerWewnetrzny.PelnaSygnatura)); } } private void WalidujGodzine(IKontekstZdarzeniaZWalidacja kontekst, DokumentZK zk) { kontekst.UsunBlad(zk); kontekst.DodajBlad("Zamówienia możemy wystawiać tylko między 8 a 17",nameof(zk.NumerWewnetrzny.PelnaSygnatura)); } } } Link to postu
Radomił Ząbik 310 Napisano 2 Lutego 2023 Udostępnij Napisano 2 Lutego 2023 w Sfera zdarzeniowa - ustawienie blokady gdy zamówienie (nowe) jest tworzone w przedziale godzinowym. Dobrze Pan sprawdził warunek? Sugerowałbym bym pododawać Sobie ślady, poprzez Debug.WritelLine(), najlepiej też z wartościami zmiennych, po czym w Visual Studio, z menu Debuguj, wybrać Podłącz do procesu, podpiąć się do Subiekta, przeklikać scenariusz i zobaczyć, gdzie coś uciekło. Link to postu
Radomił Ząbik 310 Napisano 2 Lutego 2023 Udostępnij Napisano 2 Lutego 2023 w Sfera zdarzeniowa - ustawienie blokady gdy zamówienie (nowe) jest tworzone w przedziale godzinowym. (edytowane) Tak, po zerknięciu: - nie wiem, czy podłączać się pod numer zamówienia, jako miejsce błędu - ten numer powstanie dopiero w trakcie zapisywania - metoda DodajBlad, nie wskazuje dokładnie wybranego obiektu Poniżej, skromniejszy, działający kod: public override void PrzedZapisemObiektu(IKontekstZdarzeniaPrzedZapisemObiektu<IZamowienieOdKlienta> kontekst) { DokumentZK zk = kontekst.ObiektBiznesowy.Dane; Debug.WriteLine("Zapisywanie: "+ zk.DataWprowadzenia); Debug.WriteLine("Godzina: " + DateTime.Now.Hour); if (DateTime.Now.Hour >= 8 && DateTime.Now.Hour <= 9) { Debug.WriteLine("Usuwanie błędu."); kontekst.UsunBlad(zk, nameof(DokumentZK.Uwagi)); } else { Debug.WriteLine("Dodawanie błędu."); kontekst.UsunBlad(zk, nameof(DokumentZK.Uwagi)); kontekst.DodajBlad("Zamówienia można wystawiać tylko między 8, a 9.", zk, nameof(DokumentZK.Uwagi)); } } A po wywaleniu Debugu: public override void PrzedZapisemObiektu(IKontekstZdarzeniaPrzedZapisemObiektu<IZamowienieOdKlienta> kontekst) { DokumentZK zk = kontekst.ObiektBiznesowy.Dane; if (DateTime.Now.Hour >= 8 && DateTime.Now.Hour <= 9) kontekst.UsunBlad(zk, nameof(DokumentZK.Uwagi)); else { kontekst.UsunBlad(zk, nameof(DokumentZK.Uwagi)); kontekst.DodajBlad("Zamówienia można wystawiać tylko między 8, a 9.", zk, nameof(DokumentZK.Uwagi)); } } Edytowane 2 Lutego 2023 przez Radomił Ząbik 1 Link to postu
Paweł Jeliński 0 Napisano 2 Lutego 2023 Autor Udostępnij Napisano 2 Lutego 2023 w Sfera zdarzeniowa - ustawienie blokady gdy zamówienie (nowe) jest tworzone w przedziale godzinowym. (edytowane) Podczas debugowania warunek został spełniony i aplikacja przeszła do metody dodającej błąd - i nic się nie stało - zapis dokumentu został umożliwiony, Zastosowałem się jeszcze do porady subiekta i do parametrów metody DodajBlad dodałem odwołanie do encji. kontekst.DodajBlad("Zamówienia możemy wystawiać tylko między 8 a 17",zk,nameof(zk.NumerWewnetrzny.PelnaSygnatura)); Edit - widzę, że Pan również ten błąd zauważył. Z tym odwołaniem to numeru zamówienia to racja, że dodaję się dopiero w trakcie zapisywania, jednak mimo wszystko i tak rozszerzenie działa. Jaki to może mieć wpływ w takim razie na samo działania rozszerzenia? Edytowane 2 Lutego 2023 przez Paweł Jeliński Link to postu
Radomił Ząbik 310 Napisano 2 Lutego 2023 Udostępnij Napisano 2 Lutego 2023 w Sfera zdarzeniowa - ustawienie blokady gdy zamówienie (nowe) jest tworzone w przedziale godzinowym. Zerknie Pan na moją drugą odpowiedź. Ja bym podłączył się do innego pola, ja testowałem na Uwagi, ale można by spróbować z Datą, lub czymś innym. U mnie działa: Link to postu
Wojciech Szopiński 227 Napisano 3 Lutego 2023 Udostępnij Napisano 3 Lutego 2023 w Sfera zdarzeniowa - ustawienie blokady gdy zamówienie (nowe) jest tworzone w przedziale godzinowym. 13 godzin temu, Paweł Jeliński napisał: Zastosowałem się jeszcze do porady subiekta i do parametrów metody DodajBlad dodałem odwołanie do encji. I to było clue problemu - błędy dodaje się na całe encje bądź na poszczególne pola encji, ale zawsze to jakaś konkretna encja musi ten błąd/ostrzeżenie "otrzymać". Pana kod próbował dodawać błąd do obiektu typu string. 13 godzin temu, Paweł Jeliński napisał: Z tym odwołaniem to numeru zamówienia to racja, że dodaję się dopiero w trakcie zapisywania, jednak mimo wszystko i tak rozszerzenie działa. Jaki to może mieć wpływ w takim razie na samo działania rozszerzenia? 13 godzin temu, Radomił Ząbik napisał: Ja bym podłączył się do innego pola, ja testowałem na Uwagi, ale można by spróbować z Datą, lub czymś innym. Podanie nazwy pola nie jest obowiązkowe, co więcej można tam podać nawet nazwę pola, które nie istnieje w modelu danych. Podanie nazwy pola jest tylko wskazówką dla interfejsu użytkownika gdzie dany błąd ma się "podpiąć". W przypadku gdy np. rozwiązanie sferyczne ma swój własny interfejs użytkownika to można tam podawać swoje nazwy kontrolek, do których chcemy "podpiąć" komunikaty. W przypadku pola numeru dokumentu to użycie: nameof(zk.NumerWewnetrzny.PelnaSygnatura) powoduje, że błąd podpina się pod pole "PelnaSygnatura", a do takiego pola nie ma nigdzie w interfejsie bezpośredniego odwołania i błąd/ostrzeżenie nie podpina się pod żadną kontrolkę, ale wystarczy podpiąć błąd pod: nameof(zk.NumerWewnetrzny) I komunikat zostanie podłączony do kontrolki numeru dokumentu. Link to postu
Radomił Ząbik 310 Napisano 3 Lutego 2023 Udostępnij Napisano 3 Lutego 2023 w Sfera zdarzeniowa - ustawienie blokady gdy zamówienie (nowe) jest tworzone w przedziale godzinowym. 2 godziny temu, Wojciech Szopiński napisał: Podanie nazwy pola nie jest obowiązkowe, co więcej można tam podać nawet nazwę pola, które nie istnieje w modelu danych. Podanie nazwy pola jest tylko wskazówką dla interfejsu użytkownika gdzie dany błąd ma się "podpiąć". Czyli można spokojnie używać własnych nazw, np. w tym przypadku wpisać własny string "walidacja_godziny" i wtedy mamy pewność, że nie pokłócimy się z ewentualnymi "waszymi" błędami - w sensie jest to taki identyfikator błędu? Oczywiście jak podam wasz obiekt, to zaznaczy mi pole w formularzu. Link to postu
Wojciech Szopiński 227 Napisano 3 Lutego 2023 Udostępnij Napisano 3 Lutego 2023 w Sfera zdarzeniowa - ustawienie blokady gdy zamówienie (nowe) jest tworzone w przedziale godzinowym. 17 minut temu, Radomił Ząbik napisał: Czyli można spokojnie używać własnych nazw Dokładnie tak. 17 minut temu, Radomił Ząbik napisał: wtedy mamy pewność, że nie pokłócimy się z ewentualnymi "waszymi" błędami Nic się tu nie pokłóci - jeśli załóżmy dodamy swoją własną walidację numeru oryginału dokumentu (bo np. chcemy żeby numer oryginału zawsze miał 20 znaków), dodamy błąd na pole nameof(Dokument.NumerZewnetrzny) to nasz błąd pojawi się na formatce dokumentu, będzie przypięty do kontrolki numeru oryginału, a pozostałe walidacje wynikające z biznesu nexo (numer oryginału nie może być pusty, istnieje już dokument z tym samym numerem XXX) również się uruchomią i podepną do tej samej kontrolki. Tak jak napisałem - pole jest wskazówką dla interfejsu i nie tylko, w jakim obszarze danego obiektu jest problem. Równie dobrze można błędy/ostrzeżenia dodawać w ogóle bez podawania pola i to też będzie działać. 22 minuty temu, Radomił Ząbik napisał: w sensie jest to taki identyfikator błędu? Nie - jak napisałem wyżej - jest to wskazanie, której części obiektu dotyczy błąd. 2 Link to postu
Polecane posty