Wstęp
Nasza aplikacja nabiera kształtów. W poprzednim odcinku dodaliśmy do niej nowe źródło danych. Umożliwiło to wyświetlanie listy zawodników w formularzu szczegółów drużyny. PowerApps radzi sobie z tym całkiem nieźle. Jedyny problem jaki pozostał, to poprawne filtrowanie danych. Naszym celem jest wyświetlenie składu konkretnej drużyny. Sam scenariusz powtarza się w zdecydowanej większości aplikacji. Klient i jego zamówienia, pracownik i jego wnioski, dostawca i realizowane przez niego dostawy,…można tak wymieniać w nieskończoność.
Łączenie danych
Kontekstowe łączenie danych jest możliwe tylko wtedy, gdy źródło na to pozwala. W naszym przypadku zarówno lista drużyn, jak i zawodników posiada kolumnę TeamID. Zasada działania w tym przypadku jest prosta. Wystarczy porównać oba pola i już. być. Po raz kolejny muszę wspomnieć o nadrzędnej zasadzie – poznaj swoje źródło danych. Bez tego nic nie zrobisz. Mając już pomysł jak dane powiązać, wystarczy umiejętnie wykorzystać funkcję Filter. Pokazuję to dokładnie na filmie, więc tutaj ograniczę się tylko do opisania kluczowej zasady. Łącz dane odwołując się bezpośrednio do źródła, a nie kontrolki/kontrolek je wyświetlających. Te drugie zawsze mogą być zmodyfikowane, inaczej sformatowane, czy usunięte.
Galeria
W nagraniu zobaczysz, że szczegóły wybranej drużyny dostajemy z kontekstu galerii. To ciekawa funkcja, bo pozwala sprawdzić na jednym ekranie, jaki wiersz galerii znajdującej się na innym ekranie został kliknięty. Pozwoli Ci to dokładnie namierzyć akcje użytkownika i w bardzo prosty sposób filtrować dane. Funkcja jest udostępniana przez właściwość Selected każdej galerii PowerApps.
Przykład
W poniższym przykładzie zobaczysz jak przefiltrować galerię zawodników oraz dodać nowy formularz wyświetlający ich szczegóły. Po raz pierwszy, użyjemy także funkcji Navigate, która pozwala na przechodzenie pomiędzy ekranami PowerApps. Jest bardzo prosta i jestem pewien, że po obejrzeniu jednego przykładu będziesz umiał ją zastosować samodzielnie.
Podsumowanie
Nasza aplikacja jest praktycznie gotowa. Proponuję, abyś dostosował ją jeszcze do swoich potrzeb. Wiesz już jak zmieniać galerie i formularze. Poświeć chwilę na zmianę ich wyglądu i zachowania. Po tym pozostanie nam do zrobienia jeszcze jedna rzecz. Naszą aplikację trzeba jeszcze zapisać i opublikować, aby mogli z niej korzystać inni użytkownicy. Tym zajmiemy się już w następnym odcinku. Do następnego razu!
Próbuję posortować zgodnie z przykładem galerię graczy. W źródłowej liście graczy kolumna contract.amount jest pojedynczym wierszem tekstu. Przy sortowaniu np. malejącym zwraca kolejno wartości np. 91, 900, 8, 7992. Czyli traktuje dane z kolumny jako tekst nie liczbę. W tym wypadku widzi 91 że jest większe od 900. Jak można to poprawić? Używam tak jak w filmie formuły: SortByColumns(Filter(Players;TeamID=galTeams.Selected.TeamID);”Contract_x002e_amount”;Descending)
Tu faktycznie mogłem zrobić błąd. Najprościej byłoby zamienić to pole na liczbowe po stronie SharePoint.
Próbuje odfiltrować dane z galerii. Tzn. chciałbym aby w galerii pokazały się wartości wszystkie inne niż w wartość pola formularza:
Filter(Gallery;
IsBlank(ComboBox1.Selected.Value) || IsEmpty(ComboBox1.Selected.Value) || Opis in ComboBox1.Selected.Value;
IsBlank(ComboBox2.Selected.Value) || IsEmpty(ComboBox2.Selected.Value) || 'Miejsce wykonania’ in ComboBox2.SelectedItems;
IsBlank(DataCardValue24.Selected.Value) || IsEmpty(DataCardValue24.Selected.Value) ||’Spółka macierzysta’ in (DataCardValue24.Selected.Value)
Ostatnie pogrubione filtrowanie wyświetla mi wartości równe polu DataCardValue24 a chciałbym aby wyświetlał wszystkie po za tymi w które są w tym polu. Funkcja Not nie sprawdza się. Nigdzie nie mogę znaleźć rozwiązania w przypadku odfiltrowywania danych.
Będę wdzięczny za sugestie.
Not() powinno zadziałać. Alternatywnie możesz użyć znaku ! Uważaj tylko na operator in. Jeśli dane są przechowywane na SharePoint, a pewnie są, to nie jest to delegowane. W przypadku większej liczby rekordów obsłuży tylko 500 (max 2000 jeśli to zmienisz) pierwszych. Generalnie zastanów się, czy nie można tego uprościć. Skomplikowane filtrowanie będzie mocno wpływało na wydajność, a i utrzymywanie takiego kodu nie będzie proste. Nie widząc aplikacji trudno mi coś konkretnego podpowiedzieć, ale spróbowałbym innego podejścia.