Skocz do zawartości

Zaawansowane pola własne v2 na wydrukach od wersji 29 nexo

Polecane posty

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:

  1. Utworzenie przykładowego wydruku z użyciem pól własnych v1
  2. Przejście na pola własne v2 i modyfikacja wydruku
  3. Podsumowanie
  4. 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ą:

804175185_Polakolejnejpozycjiasortymentunawydruku.thumb.png.c17ea22838545f1a71e1a18bb550370c.png

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 przez Łukasz Kubacki
dodatkowy opis na początku postu odnośnie sposobów odczytu pól własnych v2 na wydrukach
  • Smutny 1
Link to postu
  • 3 miesiące temu...

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
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 przez Łukasz Kubacki
Poprawka
Link to postu
×
×
  • Dodaj nową pozycję...