PowerApps. Finalna aplikacja

      Brak komentarzy do PowerApps. Finalna aplikacja

Wstęp

Dzisiejszy odcinek kursu jest szczególny. Kończymy nim krótką serię poświęconą PowerApps i Flow. Mam nadzieję, że finał tego kursu będzie dla Ciebie początkiem prawdziwej przygody z Office365. Kończymy z przytupem. Postanowiłem bowiem pokazać Ci kompletny przykład aplikacji wykorzystującej SharePoint Online, PowerApps, Flow i Azure AD. Dużo tych klocków do poskładania, ale uwierz mi, że całość nie jest wcale skomplikowana. Większość z prezentowanych dziś funkcji dobrze już znasz. Te nowe opisuję w dalszej części artykułu.

Przykład

Dzisiaj proponuję zacząć od filmu. Potem ewentualnie zerknij na listę nowych tematów, którą publikuję pod nim.

Zestawienie funkcji

Oto lista nowych i ciekawych moim zdaniem funkcji, które znalazły się w aplikacji:

Grafiki

Jeśli potrzebujesz jakichkolwiek multimediów w swojej aplikacji, zawsze możesz je wrzucić do dedykowanej każdej aplikacji przestrzeni. W ustawieniach aplikacji, poszukaj sekcji Media. Dodaj pliki/pliki, a potem odwołuj się do nich w aplikacji korzystając z nazwy pliku.

Refresh()

Prosta i przydatna funkcja służąca do odświeżania danych. Do jej wywołania wystarczy polecenie Refresh(<NAZWA_ŻRÓDŁA>). Możesz ją podpiąć gdziekolwiek (przycisk, ikona, zmiana kontrolki, itp.).

Lookup()

Kolejna niezastąpiona funkcja w PowerApps. Służy do pobierania danych z powiązanych źródeł. W przykładzie wykorzystuję ją do wyciągania zdjęć zawodników i logotypów drużyn. Te zapisane są na dedykowanych listach (odpowiednio Players i Teams). Na liście transferów istnieją odpowiednie kolumny (typu lookup, ale nie jest to funkcja ograniczona tylko do SharePoint), dzięki którym takie powiązanie jest proste. Wystarczy np. coś takiego:

Lookup(Players,ThisItem.Player.id = ID).imgURL

  • Players – powiązana lista, z której dane pobieram
  • ThisItem – aktualny element na liście Transferów
  • Player.Id – identyfikator zawodnika zapisany na liście Transfery
  • ID – identyfikator zawodnika zapisany na liście Players
  • imgURL – kolumna na liście Players przechowująca link do zdjęcia zawadnika

Zwróć uwagę, że funkcja Lookup() zwraca cały obiekt.

Back()

Funkcja robi jedną prostą rzecz. Pozwala wrócić na poprzedni ekran. Pamiętaj, ze jest jeszcze funkcja Navigate(), która pozwala przechodzić na dowolny ekran. Co do zasady, jest lepsza. Back() używaj tylko wtedy, kiedy jesteś pewien efektu jej działania.

Combobox

Jedna z ciekawszych kontrolek w PowerApps. Zachowuje się jak galeria, ale wygląda jak lista rozwijana (dropdown list). Na wejściu potrzebuje tablicy obiektów. W moim przykładzie wyświetlam w niej pełną listę zawodników i drużyn. Dzięki temu mogłem skorzystać z wbudowanej wyszukiwarki oraz prezentować w liście więcej niż jeden atrybut ze źródłowej listy. Odpowiadają za to dwie właściwości tej kontrolki:

  • SearchFields
  • DisplayFields

W obu przypadkach wartości atrybutów zapisujemy w dziwnym formacie [“NAZWA_POLA”]. Przykład z filmu: DisplayFields = [“Title”, “Position”]. To chyba największa wada tej kontrolki. Nazwy pól trzeba wpisywać ręcznie.

OnVisible

Atrybut ekranu, który idealnie nadaje się do ustawienia kontekstu działania kontrolek na nim się znajdujących. Ustawienie wartości domyślnych, pobranie wymaganych danych, ukrycie niepotrzebnych informacji, to tylko kilka prostych scenariuszy jego użycia. W aplikacji wykorzystuję ten atrybutu na ekranie dodawania nowego transferu. Wykorzystuję do tego funkcję UpdateContext(), która pozwala tworzyć pomocnicze zmienne (pamiętaj, że dostępne są tylko na danym ekranie). Zmienne sterują następnie wyświetlaniem dodatkowych informacji (podpięte są bezpośrednio pod właściwość Visible kontrolek, które chcę dynamicznie pokazywać/ukrywać). To prosty i bardzo przydatny trik.

Azure Active Direcotry

Bardzo często jestem pytany w jaki sposób pokazywać/ukrywać różne informacje w aplikacji na podstawie przynależności do grupy. W przypadku pojedynczego użytkownika jest to proste. Funkcja User() zwraca obiekt reprezentujący aktualnie zalogowanego użytkownika. Wystarczy zatem porównać User().FullName do konkretnej wartości i problem z głowy. W przypadku grup jest trudniej, ale wcale nie tak strasznie. Wystarczy bowiem dodać odpowiednie połączenie (pamiętaj, że może to zrobić tylko osoba mająca uprawnienia do rejestrowania aplikacji w Azure AD) i wykorzystać metodę AzureAd.GetGroupMembers(“<GUID>”), gdzie GUID to identyfikator Twojej grupy. Znajdziesz go konsoli Azure AD:

Protip.AzureAD.Groups

Sama funkcja zwraca tablicę użytkowników. Wystarczy zatem porównać, czy dane aktualnego użytkownika znajduje się w tej tablicy (np. korzystając z operatora In)

Reset

Krótko i na temat: Reset(NAZWA_KONTROLKI) resetuje/zeruje zawartość wskazanej kontrolki.

Patch

Główny bohater tego odcinka. Dzięki niemu możesz modyfikować i/lub dodawać nowe elementy do wskazanego źródła. W przykładzie wykorzystuję tę metodę do dodawania nowego transferu na listę SharePoint. Wymaga to podania dodatkowego parametru Defaults(NAZWA_ŹRÓDŁA). Poza tym, reszta to opis w formacie JSON schematu listy i wartości poszczególnych pól, które chcesz uzupełnić (nie musisz oczywiście wszystkich). Wartymi uwagi wyjątkami są pola typu lookup i managed metadata. Jeśli Twoja lista takowe posiada, to trzeba wykorzystać dedykowaną tym polom składnię. Zerknij do poniższych źródeł, aby znaleźć więcej informacji:

  • Lookup:

https://powerusers.microsoft.com/t5/General-Discussion/Patch-values-to-SharePoint-Lookup-column/td-p/127312

  • Managed Metadata:

https://powerusers.microsoft.com/t5/PowerApps-Community-Blog/Saving-to-SharePoint-Managed-Metadata-columns-using-Patch/ba-p/78754

Podsumowanie

Pozostaje mi tylko pożegnanie. Nie mówię “do widzenia”, a raczej “do zobaczenia”. Na pewno tematy związane z Office365 będą powracały na łamach tego bloga i kanału. Obserwuj i zasubskrybuj to co trzeba, aby dostawać odpowiednie powiadomienia. Jeśli masz jakieś tematy, które Cię wyjątkowo interesują, to daj znać w komentarzach. Chętnie czytam wszelkiego rodzaju uwagi (także te krytyczne) i odpowiadam na pytania. Nie ukrywam, że jest to też super mocna motywacja do dalszych działań. Liczę zatem na Ciebie 🙂 Tymczasem pozdrawiam i do następnego razu!

Dodaj komentarz

avatar
1000

This site uses Akismet to reduce spam. Learn how your comment data is processed.