Popularny post. Katarzyna Rozmarynowska 174 Napisano 14 Grudnia 2022 Popularny post. Udostępnij Napisano 14 Grudnia 2022 w Nowości w Sferze w wersji 43.0.0 Szanowni Państwo! W wersji 43 uzbierało się na tyle istotnych nowości w Sferze, że uznaliśmy, że warto zrobić osobny wątek, w którym napiszemy o wszystkim. Mamy dla Państwa dwie kategorie zmian: nowe typy i funkcje w API, usprawnienia w projektach tworzonych z naszych szablonów. Nowości w API Dodaliśmy do klasy MenedzerPolaczen (długo wyczekiwaną) metodę SprawdzHaslo, która umożliwia sprawdzenie poprawności hasła wybranego użytkownika bez wcześniejszego załadowania Uchwytu sferycznego. Występuje ona w dwóch wersjach: z loginem użytkownika albo z identyfikatorem. Oto przykład jej użycia: var danePolaczenia = DanePolaczenia.Jawne(...); var mp = new MenedzerPolaczen(); bool wynikSprawdzeniaZLoginem = mp.SprawdzHaslo(danePolaczenia, "Szef", "robocze"); bool wynikSprawdzeniaZHaslem = mp.SprawdzHaslo(danePolaczenia, Guid.Parse("745A2355-EC3A-4706-9F62-F9BDEC840C0E"), "robocze"); Idąc dalej tropem umożliwiania pracy na bazie nexowej przed załadowaniem Uchwytu, dodaliśmy do klasy DanePolaczenia metodę rozszerzającą o nazwie PodajPolaczenie, która umożliwia uzyskanie instancji połączenia SQLowego z bazą danych. Używa się jej w ten sposób: var danePolaczenia = DanePolaczenia.Jawne(...); var polaczenie = dane.PodajPolaczenie(); Kolejną nowością jest typ InsERT.Moria.Uzytkownicy.IZalogowanyUzytkownik, który - bez niespodzianki - umożliwia sprawdzenie danych aktualnie zalogowanego użytkownika. Przykład użycia: using (var uchwyt = menedzerPolaczen.Polacz(danePolaczenia, produkt)) { if (uchwyt.ZalogujOperatora(idSzefa, hasloSzefa)) { var daneZalogowanego = uchwyt.PodajObiektTypu<IZalogowanyUzytkownik>(); if (daneZalogowanego != null) { Console.WriteLine($"Zalogowany użytkownik: {daneZalogowanego.Dane.Login}"); } } } W raportach sferycznych umożliwiliśmy definiowanie kolumn raportu od razu w kodzie przygotowującym dane do raportu. Poniżej wstawiam przykładowy kod, który oczywiście znajdą Państwo także w pliku pomocy do Sfery. Przy okazji przypominam, że raporty sferyczne są ciągle w Laboratorium i ta część API może się jeszcze zmienić. public class MetadaneAtrybutow : IDaneRaportu { public class Wynik { public int Id { get; set; } /// <summary> /// Kolumna tekstowa ze zmodyfikowanym tytułem i szerokością /// </summary> [Tekstowa(Tytul = "Prezentacja metadanych", Szerokosc = 75)] public string Opis => $"Zestaw #{Id}"; /// <summary> /// Kolumna kwotowa o stałej precyzji 3 i symbolu 'm3' i tekście 'brak wartości' gdy nie ma wartości /// </summary> [Kwotowa(Tytul = "Kwota dopuszczająca brak wartości", Precyzja = 3, TekstDlaBrakuWartosci = "brak wartości")] public decimal? NullableDec { get; set; } /// <summary> /// Kolumna kwotowa ze zmienną precyzją (wiersz zawiera precyzję kwoty) i zmiennym symbolem /// </summary> [Kwotowa(Tytul = "Kwota ze zmienną precyzją i symbolem", PolePrecyzji=nameof(Precision), PoleSufiksu =nameof(Sufix))] public decimal Dec { get; set; } /// <summary> /// Atrybut z precyzją wartości Dec z wyłączonym tworzeniem kolumny dla tego atrybutu. /// </summary> [BezKolumny] public int Precision { get; set; } /// <summary> /// Atrybut z symbolem wartości Dec z wyłączonym tworzeniem kolumny dla tego atrybutu /// </summary> [BezKolumny] public string Sufix { get; set; } /// <summary> /// Kolumna z wartością logiczną, tytuł 'S', dymek z opisem kolumny 'Status czegoś', zmodyfikowane teksty dla wartości true i foalse /// </summary> [Logiczna(Tytul = "S", TekstPodpowiedzi = "Status czegoś", TekstDlaPrawda = "Zrobione", TekstDlaFalsz = "Czeka na zrobienie")] public bool BoolValue { get; set; } /// <summary> /// Kolumna z datą z tytułem kolumny 'Data utworzenia'. Pozostałe atrybuty domyślnie. /// </summary> [Datowa(Tytul ="Data utworzenia")] public DateTime DataUtworzeniaCzegos { get; set; } /// <summary> /// Kolumna z datą dopuszczającą brak wartości, domyślnie ukryta, z tekstem dla braku wartości /// </summary> [Datowa(Tytul = "Data wykonania operacji", Widoczna =false, TekstDlaBrakuWartosci = "nie wykonano jeszcze")] public DateTime? DataWykonaniaCzegos { get; set; } } public Type TypWyniku => typeof(Wynik); public Type TypGlownegoElementu => null; public Guid Identyfikator => new Guid("F39C311D-D3D0-44C1-BCE6-6F6B756B3863"); public string Nazwa => $"Użycie domyślnych definicji kolumn w {nameof(TypWyniku)}"; public string Opis => Nazwa; public IDostawcaPluginow Dostawca => new DostawcaPluginow(); public void DefiniujParametryRaportu(IBudowniczyParametrowRaportu fabrykaParametrowRaportu) { } public IQueryable PodajDaneRaportu(IParametryDanychRaportu parametryDanychRaportu) { var list = new List<Wynik>(); list.Add(new Wynik() { Id = 1, BoolValue = true, DataUtworzeniaCzegos = new DateTime(2021, 1, 3), DataWykonaniaCzegos = null, Dec = 123.456m, NullableDec = null, Precision = 1, Sufix = "m3" }); list.Add(new Wynik() { Id = 2, BoolValue = false, DataUtworzeniaCzegos = new DateTime(2022, 10, 5), DataWykonaniaCzegos = new DateTime(2022, 10, 6), Dec = 5432.1023m, NullableDec = 11111.666666m, Precision = 3, Sufix = "t" }); list.Add(new Wynik() { Id = 3, BoolValue = true, DataUtworzeniaCzegos = new DateTime(2022, 5, 15), DataWykonaniaCzegos = null, Dec = 1111.11111m, NullableDec = null, Precision = 1, Sufix = "?" }); list.Add(new Wynik() { Id = 4, BoolValue = false, DataUtworzeniaCzegos = new DateTime(2022, 3, 30), DataWykonaniaCzegos = new DateTime(2022, 4, 30), Dec = 555.555m, NullableDec = 777.777m, Precision = 4, Sufix = "coś" }); return list.AsQueryable(); } } Po wczytaniu plugina z takim kodem w programie automatycznie generuje się taka lista kolumn: A tak wygląda wynik raportu: Szablony i QuickInstaller SDK w wersji 43 zawiera nową wersję naszego rozszerzenia z szablonami projektów sferycznych. Od teraz projekty utworzone z szablonu mogą generować - poza plikiem mpkg i instalatorem rozszerzenia - skrypty, które umożliwiają szybkie instalowanie, aktualizowanie i odinstalowanie rozszerzenia w wybranej bazie lub bazach. Jest to opcjonalna funkcja dla programistów, która ma ułatwić tworzenie i testowanie rozwiązań. Aby z niej skorzystać, należy w pliku Konfiguracja.xml odpowiednio skonfigurować węzeł ParametryInstalacji: <ParametryInstalacji StworzPlikiBat="Tak" AutomatycznaInstalacja="Nie"> <PlikParametrowInstalacji>..\..\..\ParametryInstalacji.txt</PlikParametrowInstalacji> </ParametryInstalacji> Wyjaśnienia zacznijmy od pliku ParametryInstalacji.txt. Jest on automatycznie dołączany do projektu i zawiera parametry połączenia z bazą danych, w której chcemy testowo zainstalować rozszerzenie. Wyglądają one tak: Serwer=(local) UwierzytelnianieWindows=Tak #Uzytkownik= #Haslo= BazaDanych=Nexo_Demo_1 #BazaDanych=Nexo_Demo_2 Jeśli w Kongfiguracja.xml ustawimy StworzPlikiBat="Tak", to po zbudowaniu projektu w folderze z instalatorem będziemy mieć także pliki o nazwach Zainstaluj_Aktualizuj.bat oraz Odinstaluj.bat. Są to skrypty, które uruchamiają instalację/aktualizację/deinstalację rozszerzenia w bazie lub bazach podanych właśnie w pliku ParametryInstalacji.txt, z podanymi tam parametrami połączenia SQL. Dodatkowo, jeśli ustawimy AutomatycznaInstalacja="Tak", to po skompilowaniu projektu skrypt aktualizujący rozszerzenie będzie automatycznie uruchamiany. To oznacza, że można tak skonfigurować projekt, że od razu skończonej kompilacji aktualna wersja rozwiązania będzie już w bazie. W wersji 43 odświeżyliśmy także wygląd QuickInstallera: Przypominam, że aby skorzystać z tych nowości, trzeba zaktualizować nasze rozszerzenie do Visual Studio. Znajdziecie je Państwo w SDK, w folderze Narzedzia. Zachęcam do korzystania i dzielenia się swoimi uwagami 4 Link to postu
Polecane posty