Skocz do zawartości

Ranking

Popularna zawartość

Treść z najwyższą reputacją w 11.06.2020 uwzględniając wszystkie działy

  1. Dzięki, po kilkunastu próbach zaskoczyłem o co kaman
    1 punkt
  2. 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
    0 punktów
×
×
  • Dodaj nową pozycję...