Łukasz Kubacki 37 Napisano 20 Lutego 2020 Udostępnij Napisano 20 Lutego 2020 w Zaawansowane pola własne v2 na wydrukach od wersji 29 nexo (edytowane) Istnieją dwa sposoby na odczytanie wartości pól własnych v2 na wydrukach: po przez użycie interfejsu IPolaWlasneAdv2Accessor; co zostało opisane w tym poście po przez użycie identyfikatorów pól własnych; szczegóły znajdują się w osobnym poście: Historycznie rzecz ujmując najpierw powstał sposób związany z użyciem interfejsu IPolaWlasneAdv2Accessor jednak okazało się, że zwraca on zawsze pola z pierwszej pozycji na wydruku, w związku z tym problemem powstał sposób oparty o identyfikatory. W wersji 43.0.0 nexo poprawiliśmy jednak problem ze zwracaniem pierwszej pozycji na wydruku przy użyciu IPolaWlasneAdv2Accessor, dlatego oba powyższe sposoby stały się tak samo akceptowalne. Ten post składa się z następujących części: Utworzenie przykładowego wydruku z użyciem pól własnych v1 Przejście na pola własne v2 i modyfikacja wydruku Podsumowanie Uwagi dodatkowe Utworzenie przykładowego wydruku z użyciem pól własnych v1 Na potrzeby przykładu załóżmy, że chcemy odwołać się do pól zaawansowanych nabywcy na powielonym wzorcu "FS standard" Załóżmy, że nexo jest w trybie pól v1 oraz, że zdefiniowano następujące "Pola własne klienta": - pole typu "Tekst" o nazwie "pz tekst" - pole typu "Liczba całkowita" o nazwie "pz int" - pole typu "Kwota" o nazwie "pz decimal" - pole typu "Pole wyboru" o nazwie "pz bool" - pole typu "Data" o nazwie "pz data" - pole typu "Słownik własny" o nazwie "pz slownik" - pole typu "Słownik systemowy" walut o nazwie "pz waluta" Następnie powielamy wzorzec "FS standard" i wybieramy "Popraw wzorzec". Na potrzeby przykładu w zakładce "Code" znajdujemy metodę PodajTekstNabywcy() i modyfikujemy ją tak, aby wyświetlała wartości wszystkich zaawansowanych pól własnych v1 nabywcy: private string PodajTekstNabywcy() { StringBuilder textBuilder = new StringBuilder(); //Odczyt wartości pola typu 'Tekst' string pzTekst = Nabywca.Podmiot.PodmiotDlaKtoregoHistoria.PolaWlasneAdv.pztekst; textBuilder.Append(pzTekst).AppendLine(); //Odczyt wartości pola typu 'Liczba calkowita' int? pzInt = Nabywca.Podmiot.PodmiotDlaKtoregoHistoria.PolaWlasneAdv.pzint; textBuilder.Append(pzInt).AppendLine(); //Odczyt wartości pola typu 'Kwota' decimal? pzDec = Nabywca.Podmiot.PodmiotDlaKtoregoHistoria.PolaWlasneAdv.pzdecimal; textBuilder.Append(pzDec).AppendLine(); //Odczyt wartości pola typu 'Pole wyboru' bool? pzBool = Nabywca.Podmiot.PodmiotDlaKtoregoHistoria.PolaWlasneAdv.pzbool; textBuilder.Append(pzBool).AppendLine(); //Odczyt wartości pola typu 'Data' DateTime? pzData = Nabywca.Podmiot.PodmiotDlaKtoregoHistoria.PolaWlasneAdv.pzdata; textBuilder.Append(pzData).AppendLine(); //Odczyt wartości pola typu 'Słownik wlasny' var pozycjaSlownika = Nabywca.Podmiot.PodmiotDlaKtoregoHistoria.PolaWlasneAdv.pzslownik; textBuilder.Append(pozycjaSlownika.Id).Append("-"); textBuilder.Append(pozycjaSlownika.Nazwa).AppendLine(); //Odczyt wartości pola typu 'Slownik systemowy' walut var waluta = Nabywca.Podmiot.PodmiotDlaKtoregoHistoria.PolaWlasneAdv.pzwaluta; textBuilder.Append(waluta.Symbol).Append("-"); textBuilder.Append(waluta.Nazwa).AppendLine(); return textBuilder.ToString(); } Proszę zwrócić uwagę na to, że encja, z której odczytujemy pola własne v1 to: Nabywca.Podmiot.PodmiotDlaKtoregoHistoria Przejście na pola własne v2 i modyfikacja wydruku Przechodzimy na pola własne v2. Po przejściu wybieramy nasz powielony wzorzec, klikamy w "Popraw wzorzec" i przechodzimy do zakładki Code. Zaczynamy od dodania na początku linijek: using InsERT.Moria.PolaWlasne2; using InsERT.Moria.Narzedzia.PolaWlasne2; //trzeba też sprawdzić, czy we wzorcu są poniższe dwa usingi i gdy jakiegoś brakuje, to należy go także wstawić: using InsERT.Moria.Wydruki; using System.Linq; następnie dodajemy poniższą metodę: private IPolaWlasneAdv2Accessor UtworzPolaWlasneAdv2Accessor(object obj) { var pw2Helper = PolaWlasne2Helper.BusinessObjectValue as IPolaWlasne2HelperWydruku; return pw2Helper.UtworzPolaWlasneAdv2Accessor(obj); } Metoda UtworzPolaWlasneAdv2Accessor(obj) przyjmuje obiekt, który posiada zaawansowane pola własne v2. Metoda ta zwraca obiekt, IPolaWlasneAdv2Accessor który umożliwia odczyt i zapis wartości pól własnych v2. IPolaWlasneAdv2Accessor został szczegółowo opisany w pomocy do Sfery. Możemy teraz zmodyfikować PodajTekstNabywcy() tak, aby wyświetlała wartości wszystkich zaawansowanych pól własnych v2 nabywcy: private string PodajTekstNabywcy() { var nabywcaPW2Accessor = UtworzPolaWlasneAdv2Accessor(Nabywca.Podmiot.PodmiotDlaKtoregoHistoria); StringBuilder textBuilder = new StringBuilder(); //Odczyt wartości pola typu 'Tekst' string pzTekst = nabywcaPW2Accessor.PobierzWartoscTypuTekst("pz tekst"); textBuilder.Append(pzTekst).AppendLine(); //Odczyt wartości pola typu 'Liczba calkowita' int? pzInt = nabywcaPW2Accessor.PobierzWartoscTypuLiczbaCalkowita("pz int"); textBuilder.Append(pzInt).AppendLine(); //Odczyt wartości pola typu 'Liczba rzeczywista' decimal? pzDec = nabywcaPW2Accessor.PobierzWartoscTypuLiczbaRzeczywista("pz decimal"); textBuilder.Append(pzDec).AppendLine(); //Odczyt wartości pola typu 'Wartosc logiczna' bool? pzBool = nabywcaPW2Accessor.PobierzWartoscTypuLogicznego("pz bool"); textBuilder.Append(pzBool).AppendLine(); //Odczyt wartości pola typu 'Data' DateTime? pzData = nabywcaPW2Accessor.PobierzWartoscTypuData("pz data"); textBuilder.Append(pzData).AppendLine(); //Odczyt wartości pola typu 'Slownik wlasny' var pozycjaSlownika = nabywcaPW2Accessor.PobierzWartoscTypuSlownikWlasny("pz slownik"); if (pozycjaSlownika != null) { textBuilder.Append(pozycjaSlownika.Klucz).Append("-"); textBuilder.Append(pozycjaSlownika.Wartosc).AppendLine(); } //Odczyt wartości pola typu 'Slownik systemowy' walut var waluta = nabywcaPW2Accessor.PobierzWartoscTypuSlownikSystemowyWalut("pz waluta"); if (waluta != null) { textBuilder.Append(waluta.Symbol).Append("-"); textBuilder.Append(waluta.Nazwa).AppendLine(); } return textBuilder.ToString(); } Podsumowanie W celu odczytania wartości pól zaawansowanych v2 danego obiektu należy w zakładce Code użyć metody UtworzPolaWlasneAdv2Accessor(obj) przekazując do niej obiekt zawierający pola własne v2 według następującej zasady: //Jeśli w trybie pól v1 odwołanie do pola wyglądało tak: string wartoscPola = Obj1.Obj2.Obj3.PolaWlasneAdv.MojePole; //to po przejściu na pola v2 należy wywołać: var encjaPW2Accessor = UtworzPolaWlasneAdv2Accessor(Obj1.Obj2.Obj3); string wartoscPola = encjaPW2Accessor.PobierzWartoscTypuTekst("Moje Pole"); Uwagi dodatkowe Uwaga 1: Skończyłem robić wydruk, uruchamiam go i otrzymuję wyjątek zamiast wartości pól v2 - oznacza to, że albo obiekt przekazany do metody UtworzPolaWlasneAdv2Accessor(obj) nie zawiera żadnego pola zaawansowanego albo pola o danych nazwach nie zostały zdefiniowane. Uwaga 2: Chciałbym odwołać się pól własnych v2 kolejnych pozycji wydruku np. kolejnych pozycji ze wzorca "FS Standard" - zalecamy utworzyć w zakładce Code metodę, która przyjmie jako parametr obiekt danej pozycji i wywołać ją: Gdzie metoda PodajPolaAsortymentu() ma postać: private string PodajPolaAsortymentu(object aso) { StringBuilder textBuilder = new StringBuilder(); var asoPW2Accessor = UtworzPolaWlasneAdv2Accessor(aso); //Odczyt wartości pola typu 'Tekst' string pzTekst = asoPW2Accessor.PobierzWartoscTypuTekst("pz tekst"); textBuilder.Append(pzTekst).AppendLine(); //analogicznie dla pozostalych pól asortymentu return textBuilder.ToString(); } Uwaga 3: Jak odczytać wartość pola typu "Słownik własny SQL" - proszę zajrzeć do pliku pomocy Sfery - interfejs IPolaWlasneAdv2Accessor został opisany w pomocy do Sfery Edytowane 22 Grudnia 2022 przez Łukasz Kubacki dodatkowy opis na początku postu odnośnie sposobów odczytu pól własnych v2 na wydrukach 1 Link to postu
Adam G 23 Napisano 11 Czerwca 2020 Udostępnij Napisano 11 Czerwca 2020 w Zaawansowane pola własne v2 na wydrukach od wersji 29 nexo Czyli nadal pozostaje największy nierozwiązany problem w informatyce. Cytat Czemu u jednego działa, a u drugiego nie? Przykład z góry kopiuj wklej The error of compilation The error of compilation is found in the 'ZkStandard' report: Nie można odnaleźć nazwy typu lub przestrzeni nazw „IPolaWlasne2HelperWydruku” (czy nie brakuje dyrektywy „using” lub odwołania do zestawu?). Na szczęście potrzebne pola własne v2 wystarczą mi pobrane za pomocą zapytania SQL. Link to postu
Łukasz Kubacki 37 Napisano 16 Czerwca 2020 Autor Udostępnij Napisano 16 Czerwca 2020 w Zaawansowane pola własne v2 na wydrukach od wersji 29 nexo (edytowane) The error of compilation The error of compilation is found in the 'ZkStandard' report: Nie można odnaleźć nazwy typu lub przestrzeni nazw „IPolaWlasne2HelperWydruku” (czy nie brakuje dyrektywy „using” lub odwołania do zestawu?). Na wydruku brakuje linijki: using InsERT.Moria.Wydruki; Jak się okazuje nie wszystkie wzorce wydruków mają powyższy "using", o czym pisząc przykład nie wiedziałem. Edytowane 16 Czerwca 2020 przez Łukasz Kubacki Poprawka Link to postu
Radomił Ząbik 308 Napisano 16 Czerwca 2020 Udostępnij Napisano 16 Czerwca 2020 w Zaawansowane pola własne v2 na wydrukach od wersji 29 nexo 3 godziny temu, Łukasz Kubacki napisał: Jak się okazuje nie wszystkie wzorce wydruków mają powyższy "using", o czym pisząc przykład nie wiedziałem. Wydruki, nie używają biblioteki od wydruków, ciekawe ? Link to postu
Polecane posty