Skocz do zawartości

Radomił Ząbik

Użytkownik
  • Liczba zawartości

    2 535
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    44

Community Answers

  1. Radomił Ząbik's post in Pola własne dla pozycji dokumentu was marked as the answer   
    Panie i Panowie z InsERT, gdy już po 7 latach straciłem nadzieję, wy wrzucacie taką bombę, i jeszcze z gratisem do partii (to było zadanie na następne 7 lat). DZIĘKI, i to bez żadnej szydery. Będę miał roboty na zimę Czekam na wersję, pomęczę pewnie jeszcze temat jak będzie potrzeba i w GUI i Sferycznie
  2. Radomił Ząbik's post in [Sfera zdarzeniowa] Reakcja na zmianę pola własnego zaawansowanego, w dokumencie was marked as the answer   
    Wieży mi Pan, pod jakiś 20 latach w zawodzie, tak, tacy magicy są się w stanie pojawić
     
    To teraz dla potomnych, kod uwzględniający rozwiązania problemów z wątku:
    - przyznam się bez bicia, nie chciało mi się rozgryzać/szukać sposobu na znalezienie klucza pola własnego, po nazwie, bo rozwiązanie, które pisze, jest bardzo indywidualne
    private IDictionary<int, bool?> poprzedniaWartosc = new Dictionary<int, bool?>(); public override void PrzedZmianaWlasciwosciObiektu(IKontekstZdarzeniaPrzedZmianaWlasciwosciObiektu<IDokument> kontekst) { Dokument dokument = kontekst.ObiektBiznesowy.Dokument; if (kontekst.NazwaWlasciwosci == "B19") // reagujemy na zmianę określonego pola { var zkPW = kontekst.Uchwyt.PodajObiektTypu<IPolaWlasneAdv2AccessorFactory>().Utworz(dokument, true); // dostajemy się do pól własnych poprzedniaWartosc.Add(dokument.GetHashCode(), zkPW.PobierzWartoscTypuLogicznego("Pole własne")); // rejestrujemy wartość poprzednia } } public override void PoZmianieWlasciwosciObiektu(IKontekstZdarzeniaPoZmianieWlasciwosciObiektu<IDokument> kontekst) { Dokument dokument = kontekst.ObiektBiznesowy.Dokument; if (kontekst.NazwaWlasciwosci == "B19") { var zkPW = kontekst.Uchwyt.PodajObiektTypu<IPolaWlasneAdv2AccessorFactory>().Utworz(dokument, true); bool? poleWlasne = zkPW.PobierzWartoscTypuLogicznego("Pole własne"); if (poprzedniaWartosc[dokument.GetHashCode()] != poleWlasne && poleWlasne == false) { // wykonujemy czynność, tylko gdy nasze pole jest odznaczone, a wcześniej było w innym stanie } else {} poprzedniaWartosc.Remove(dokument.GetHashCode()); // kasujemy naszą wartość poprzednią, bo nie jest nam już potrzebna } }  
  3. Radomił Ząbik's post in Dodanie firmy z pobraniem danych z GUS - rewizor nexo was marked as the answer   
    Nie ma takiej funkcjonalności:
     
  4. Radomił Ząbik's post in Pola własne 2.0 - transferowanie pomiędzy dokumentami was marked as the answer   
    W związku z dodaniem do NEXO 42, Sfery zdarzeniowej, można to wykonać za jej pomocą. Poniższy kod, przedstawia proste podejście do przeniesienia pola własnego, typu słownik własny SQL, pomiędzy ZK a WZ. Opieram się o IDokument, więc w jednym rozwiązaniu opierając się o warunki, można zrobić przenoszenie pól do wielu typów dokumentów. Można nawet pójść o krok dalej i wylistować pola własne z obiektu źródłowego i zrobić praktycznie automatyczny transfer pól własnych, jeśli ich nazwy się pokrywają.
     
    namespace RealizacjaDokumentow { public class DokumentSferaZdarzeniowaPlugin : KlientSferyZdarzeniowej<IDokument> { public override void PoZmianieWlasciwosciObiektu(IKontekstZdarzeniaPoZmianieWlasciwosciObiektu<IDokument> kontekst) { // Wydanie, z dokumentami realizowanymi, które jest nowo tworzone if (kontekst.NazwaWlasciwosci.Equals(nameof(Dokument.DokumentyRealizowane)) && kontekst.Dane is DokumentWZ wz && kontekst.StanObiektu == StanObiektu.Dodawany) { // przetwarzanie kolejnych dokumentów, ale tylko ZK foreach (var dokument in wz.DokumentyRealizowane) if(dokument is DokumentZK zk) { // dostęp do pól własnych var zkPW = kontekst.Uchwyt.PodajObiektTypu<IPolaWlasneAdv2AccessorFactory>().Utworz(zk, true); var wzPW = kontekst.Uchwyt.PodajObiektTypu<IPolaWlasneAdv2AccessorFactory>().Utworz(wz, true); // zmiana wartości pola własnego, jeśli istnieje var budowaNazwa = zkPW.PobierzWartoscTypuSlownikWlasnySqlByInt("Budowa - Nazwa"); if (budowaNazwa != null) wzPW.UstawWartoscTypuSlownikWlasnySqlByInt("Budowa - Nazwa", budowaNazwa.Klucz); } } } } } Gorące podziękowania dla @Wojciech Szopiński oraz @Paweł Kubacki, za nakierowanie na rozwiązania i wyjaśnienia wielu kwestii związanych z Sferą zdarzeniową.
  5. Radomił Ząbik's post in [Sfera] Zdarzeniowa, dostęp do obiektów, debugowanie was marked as the answer   
    Dziękuje bardzo, wszystkim zaangażowanym, za pomoc. Aby tradycji stało się za dość, przykładowy kod tworzący ten sam obiekt, bez ryzyka zapętlenia, z użyciem Sfery Zdarzeniowej.
    using InsERT.Moria.Procesy; using InsERT.Moria.Rozszerzanie; namespace SferaZdarzeniowaPlugin1 { public class ZlecenieSerwisoweSferaZdarzeniowaPlugin : KlientSferyZdarzeniowej<IZlecenieSerwisowe> { private readonly IZleceniaSerwisowe _zlecenia; private bool _trwaDodawanieZleceniaSerwisowego = false; // flaga odpowiadająca za sprawdzanie, czy obiekt jest w trakcie dodawania Sferą zdarzeniową public ZlecenieSerwisoweSferaZdarzeniowaPlugin(IZleceniaSerwisowe zlecenia) { _zlecenia = zlecenia; } public override void PoZapisieObiektu(IKontekstZdarzeniaPoZapisieObiektu<IZlecenieSerwisowe> kontekst) // wywołanie po zapisaniu obiektu { if (kontekst.StanZapisanegoObiektu != StanZapisanegoObiektu.Dodany) return; // weryfikacja, czy jest to dodanie obiektu if (_trwaDodawanieZleceniaSerwisowego) return; // weryfikacja flagi, czy nie trwa proces po zapisaniu obiektu głównego, aby nie było wywałone dla potomków (pętla) try { _trwaDodawanieZleceniaSerwisowego = true; // nadanie flagi int identyfikatorZapisanegoZlecenia = (int)kontekst.IdDanych; // pobranie ID, utworzonego obiektu IZlecenieSerwisowe zlecenieDodane = _zlecenia.Znajdz(p => p.Id == identyfikatorZapisanegoZlecenia); // pobranie obiektu using (IZlecenieSerwisowe zlecenie = _zlecenia.Utworz()) // utworzenie obiektu { zlecenie.WypelnijNaPodstawie(zlecenieDodane.Dane,true); // jakieś podstawowe uzupełnienie nowego obiektu zlecenie.Dane.DaneOpisoweZleceniaSerwisowego.DiagnozaProblemu = "To zlecenie utworzyła Sfera Zdarzeniowa"; zlecenie.Zapisz(); } } finally { _trwaDodawanieZleceniaSerwisowego = false; // po zrealizowaniu, zdjęcie flagi zabezpieczającej } } } }  
×
×
  • Dodaj nową pozycję...