e-Pomoc techniczna
InsERT nexo – Budowanie własnego raportu LINQ
Program: InsERT nexo
Kategoria: PRO+
Uwaga! Funkcjonalność przeznaczona jest dla zaawansowanych użytkowników posiadających specjalistyczną wiedzę na temat programowania oraz struktury baz danych. W przypadku trudności z osiągnięciem oczekiwanego efektu zalecamy kontakt z dyplomowanym serwisantem, bądź skorzystanie z pomocy zdalnej.
Zadaniem Raportu własnego LINQ jest przedstawienie informacji dotyczących działalności firmy. InsERT nexo zawiera szereg wbudowanych raportów. Jeśli to nie wystarcza, w wersji InsERT nexo PRO istnieje możliwość stworzenia własnego raportu.
Raporty własne LINQ są to raporty tworzone przez użytkowników, którzy potrafią korzystać z zapytań języka LINQ (dostępne w wersji InsERT nexo PRO). Sposób tworzenia raportów własnych LINQ jest szczegółowo opisany w dokumencie zawartym w dla InsERT nexo. Wraz ze zdefiniowaniem raportu własnego, tworzone jest uprawnienie do jego uruchamiania. Domyślnie jest ono nadane tylko użytkownikom w roli Administrator.
W polu Zapytanie użytkownik definiuje dane pobierane z bazy na potrzeby raportu. W ramach zapytania można odwoływać się do wcześniej zdefiniowanych parametrów, wpisując ich nazwę. Docelową strukturę danych określa klasa Wynik, która definiuje pojedyncze element wyniku zapytania. Klasa Wynik musi też zawierać pole Id z identyfikatorem obiektu wybranego jako główny element.
Kolejność parametrów na liście określa kolejność, w jakiej zostaną one później zaprezentowane użytkownikowi przy uruchomieniu raportu. W przedstawianym przykładnie nie zostanie wykorzystany.
W sekcji Źródło danych można oznaczyć dwie opcje:
-
Typ elementu źródłowego inny, niż encja główna – pozwala wskazać inne typy elementów danych źródłowych niż Element główny; jego zakreślenie udostępni pole, w którym definiuje się typ danych źródłowych.
-
Korzystaj z profilowania danych – Po zaznaczeniu tego znacznika raport będzie uwzględniał Profilowanie danych.
W sekcji Zapytanie definiuje się dane pobierane z bazy na potrzeby raportu. W ramach zapytania można odwoływać się do wcześniej zdefiniowanych parametrów, wpisując ich nazwę. Docelową strukturę danych określa klasa Wynik, która definiuje pojedyncze element wyniku zapytania. Klasa Wynik musi też zawierać pole Id z identyfikatorem obiektu wybranego jako główny element.
Pod polem na kod źródłowy znajdują się dwa przyciski:
-
Synchronizuj kolumny – synchronizuje kolumny z polami zapytania.
-
Testuj zapytanie – generuje lub aktualizuje podgląd.
W zapytaniu można odwołać się do parametrów globalnych, wynikających z kontekstu programu: bieżącego oddziału, magazynu, okresu obrachunkowego itd. Do parametrów globalnych należy odwoływać się z użyciem słowa globalne.
Lista dostępnych parametrów globalnych:
-
globalne.Oddzial, globalne.OddzialId – oddział, identyfikator oddziału
-
globalne.Magazyn, globalne.MagazynId – magazyn, identyfikator magazynu
-
globalne.RachunekBankowy, globalne.RachunekBankowyId – rachunek bankowy, identyfikator rachunku bankowego
-
globalne.StanowiskoKasowe, globalne.StanowiskoKasoweId – stanowisko kasowe, identyfikator stanowiska kasowego
-
globalne.Uzytkownik, globalne.UzytkownikId – użytkownik, identyfikator użytkownika
-
globalne.Pracownik, globalne.PracownikId – pracownik, identyfikator pracownika
-
globalne.DrukarkaFiskalna, globalne.DrukarkaFiskalnaId – drukarka fiskalna, identyfikator drukarki
-
globalne.Waluta, globalne.WalutaId – waluta systemowa, identyfikator waluty systemowej
-
globalne.OkresObrachunkowy, globalne.OkresObrachunkowyId, globalne.OkresObrachunkowyOd, globalne.OkresObrachunkowyDo – okres obrachunkowy, identyfikator okresu obrachunkowego, data rozpoczęcia, data zakończenia
-
globalne.DataBlokady – data blokady
-
globalne.DataAplikacyjna – data aplikacyjna
-
globalne.MiesiacRoboczy – data miesiąca roboczego
W zapytaniu można odwołać się do wartości standardowych (prostych) pól własnych, które są dostępne tylko do ewidencji klientów i asortymentu. Każde standardowe pole własne dostępne jest po przez właściwość obj.PolaWlasne.PoleWlasneX, gdzie obj to obiekt np. asortyment, a X to numer od 1 do 8.
Przykładowo, aby odwołać się do 3-go standardowego pola własnego z asortymentu, należy użyć następującego zapytania LINQ:
source
.Select(aso => new Wynik
{
Id = aso.Id,
Nazwa = aso.Nazwa,
PoleProste1 = aso.PolaWlasne.PoleWlasne3
});
W zapytaniu można odwołać się do wartości zaawansowanych pól własnych w wersji 2.
Przykładowo, jeżeli w asortymencie zdefiniowane są następujące pola własne w wersji 2.:
-
pole zaawansowane typu "Tekst" o nazwie: "pz tekst"
-
pole zaawansowane typu "Długi tekst" o nazwie: "pz długi tekst"
-
pole zaawansowane typu "Liczba całkowita" o nazwie "pz int"
-
pole zaawansowane typu "Liczba rzeczywista" o nazwie "pz decimal"
-
pole zaawansowane typu "Wartość logiczna" o nazwie "pz bool"
-
pole zaawansowane typu "Data" o nazwie "pz data"
-
pole zaawansowane typu "Słownik własny" o nazwie "pz słownik", którego wartości pochodzą ze słownika własnego o nazwie "Kolory"
-
pole zaawansowane typu "Słownik własny SQL" o nazwie "pz słownik sql o kluczu Int", którego wartości pochodzą ze słownika własnego o nazwie "Słownik sql int" i typie klucza int
-
pole zaawansowane typu "Słownik własny SQL" o nazwie "pz słownik sql o kluczu Guid", którego wartości pochodzą ze słownika własnego o nazwie "Słownik sql guid" i typie klucza Guid
-
pole zaawansowane typu "Słownik systemowy" walut o nazwie "pz waluta"
-
pole zaawansowane typu "Słownik systemowy" magazynów o nazwie "pz magazyn"
-
pole zaawansowane typu "Słownik systemowy" rachunków bankowych o nazwie "pz rachunek"
wtedy zapytanie LINQ odczytujące wartości powyższych pól wygląda tak:
null; //ta linijka jest wymagana na początku, aby móc wywołać poniższe instrukcje odczytujące pozycje słowników
//pomocnicze instrukcje służące do odczytu pozycji słowników
var kolory = UtworzZapytanieOElementySlownikaWlasnego("Kolory");
var slownikSqlInt = UtworzZapytanieOElementySlownikaWlasnegoSql<int>("Słownik sql int");
var slownikSqlGuid = UtworzZapytanieOElementySlownikaWlasnegoSql<Guid>("Słownik sql guid");
var waluty = UtworzZapytanieOElementySlownikaWalut();
var magazyny = UtworzZapytanieOElementySlownikaMagazynow();
var rachunki = UtworzZapytanieOElementySlownikaRachunkowBankowych();
//właściwe zapytanie do źródła danych - zapytanie musi zostać przypisane do zmiennej result, do której w pierwszej linijce przypisano wartość null
result = source.Select(aso => new Wynik
{
Id = aso.Id,
Nazwa = aso.Nazwa,
PzTekst = aso.PolaWlasneAdv2.Get<string>("pz tekst"),
PzDlugiTekst = aso.PolaWlasneAdv2.Get<string>("pz długi tekst"),
PzInt = aso.PolaWlasneAdv2.Get<int?>("pz int"),
PzDecimal = aso.PolaWlasneAdv2.Get<decimal?>("pz decimal"),
PzBool = aso.PolaWlasneAdv2.Get<bool?>("pz bool"),
PzData = aso.PolaWlasneAdv2.Get<DateTime?>("pz data"),
PzSlownik = kolory.FirstOrDefault(p => p.Id == aso.PolaWlasneAdv2.Get<int?>("pz słownik")).Wartosc,
PzSlownikSqlInt = slownikSqlInt.FirstOrDefault(p => p.Klucz == aso.PolaWlasneAdv2.Get<int?>("pz słownik sql o kluczu Int")).Wartosc,
PzSlownikSqlGuid = slownikSqlGuid.FirstOrDefault(p => p.Klucz == aso.PolaWlasneAdv2.Get<Guid?>("pz słownik sql o kluczu Guid")).Wartosc,
PzWaluta = waluty.Select(w => new { w.Id, Wartosc = w.Symbol + " " + w.Nazwa }).FirstOrDefault(w => w.Id == aso.PolaWlasneAdv2.Get<Guid?>("pz waluta")).Wartosc,
PzMagazyn = magazyny.Select(m => new { m.Id, Wartosc = m.Symbol + " " + m.Nazwa }).FirstOrDefault(m => m.Id == aso.PolaWlasneAdv2.Get<int?>("pz magazyn")).Wartosc,
PzRachunek = rachunki.Select(r => new { r.Id, Wartosc = r.Nazwa }).FirstOrDefault(r => r.Id == aso.PolaWlasneAdv2.Get<int?>("pz rachunek")).Wartosc
});
W powyższym zapytaniu LINQ wykorzystano następujące lokalnie zdefiniowane metody C#:
-
IQueryable<PozycjaSlownikaWlasnego> UtworzZapytanieOElementySlownikaWlasnego(string nazwaSlownikaWlasnego, bool filtrowane = true) - tworzy zapytanie LINQ do źródła danych zwracające pozycje danego słownika własnego
-
IQueryable<ElementSlownikowegoZrodlaDanych<TKey>> UtworzZapytanieOElementySlownikaWlasnegoSql<TKey>(string nazwaSlownikaWlasnegoSql, bool filtrowane = true) - tworzy zapytanie LINQ do źródła danych zwracające pozycje danego słownika własnego SQL, gdzie TKey to typ klucza
-
IQueryable<Waluta> UtworzZapytanieOElementySlownikaWalut() - tworzy zapytanie LINQ do źródła danych zwracające waluty dostępne po przez słownik systemowy walut
-
IQueryable<Magazyn> UtworzZapytanieOElementySlownikaMagazynow() - tworzy zapytanie LINQ do źródła danych zwracające magazyny dostępne po przez słownik systemowy magazynów
-
IQueryable<RachunekBankowy> UtworzZapytanieOElementySlownikaRachunkowBankowych() - tworzy zapytanie LINQ do źródła danych zwracające rachunki dostępne po przez słownik systemowy rachunków bankowych.