Udostępnij
Czy kiedykolwiek próbowałeś/próbowałaś znaleźć w Power Automate funkcję sortującą tablice?
Jeśli tak, najprawdopodobniej wiesz, że go tam nie ma.
W tym momencie nie ma nic takiego jak sort(array) lub sort(array, ascending) w Power Automate. A to może być dość problematyczne.
Ktoś może zwrócić uwagę, że tak naprawdę nie stanowi to problemu, ponieważ można posortować tablicę w innym miejscu, na przykład w PowerApps, a następnie przekazać ją do przepływu lub bazy danych, już posortowaną.
Ale co w przypadku, jeśli dane są już przechowywane w bazie danych w nieposortowany sposób, szczególnie zapisane w formie sekcji powtarzającej się?
Porozmawiajmy o przykładzie z życia wziętym
W Developico jednym z naszych klientów jest duża organizacja pozarządowa. Ta organizacja pozarządowa otrzymała dotację od rządu na określony program. W programie tym było około 1000 uczestników, których pewne umiejętności zostały zmierzone na początku programu. Następnie uczestnicy wzięli udział w kursach i innych działaniach, które miały na celu poprawę tych umiejętności. Pod koniec programu uczestnicymusieli wykonać kilka testów, aby ponownie zmierzyć poziom tych umiejętności.
Następnie organizacja pozarządowa i rząd były w stanie sprawdzić, czy program odniósł sukces w poprawie tych umiejętności.
Wyniki tych testów były przechowywane na liście SharePoint w sekcji powtarzanej.
Problem zaczął się, gdy rząd wysłał wymaganie, aby te umiejętności zostały posortowane od największych wyników do najniższych, a następnie wydrukowane w dokumencie.
Mieliśmy już dane przechowywane w bazie danych, w powtarzającej się sekcji i musieliśmy stworzyć przepływ, który posortuje wyniki testu, a następnie utworzy plik pdf dla każdego członka programu jako dokumentację dla rządu.
W tej pozycji moglibyśmy albo stworzyć aplikację, która pobierałaby przechowywane dane, sortowała je, przekazywała do Przepływu, a następnie tworzyła z niego plik PDF, albo w jakiś sposób zrobić to wszystko w przepływie, tworząc własne sortowanie w przepływie.
Zdecydowaliśmy się na to drugie.
Zacznijmy od ogólnego przykładu, jak to zrobić.
Musimy utworzyć przepływ, który ma zainicjowane dwie tablice.
W jednym kroku inicjujemy Tablicę Nieposortowaną z kilkoma liczbami losowymi, a w następnym, Sorted Array (Posortowana Tablica), która w tym momencie jest pusta. W Sorted Array będziemy przechowywać posortowane liczby.
Następnie musimy zastosować pętle „Zastosuj dla każdego” i jako dane wyjściowe wybrać wartości z Nieposortowanej tablicy.
Pierwszym krokiem w „Zastosuj dla każdego” jest „Filtruj tablicę”. Jako źródło musimy wybrać Sorted Array. Następnie musimy określić filtr. Item() musi być mniejsza lub równa items(‘Zastosuj_dla_każdego’). Spowoduje to odfiltrowanie wszystkich wartości w sortowanej tablicy (która w tym momencie jest pusta, ale umieścimy tutaj wartości w późniejszych krokach), które są równe lub mniejsze od bieżącego elementu w nieposortowanej tablicy.
W następnym kroku musimy umieścić kolejną „Filtruj tablicę”. Jest to krok taki sam jak poprzednio, z tą różnicą, że musimy umieścić Item() jest większy niż items(‘Zastosuj_dla_każdego’). Ten krok spowoduje odfiltrowanie wszystkich elementów, które są większe niż bieżąca iteracja Nieposortowanej tablicy.
Ostatnim krokiem w pętli jest Zmienna Set, która zaktualizuje sortowaną tablicę
Tutaj jako wartość znajduje się wyrażenie: union(body(‘Filter_array_less_than’),createArray(items(‘Zastosuj_dla_każdego’)), body(‘Filter_array_greater_than’))
Ten krok ustawi wartość Sorted Array, która jest połączeniem wartości w Sorted Array, które są mniejsze lub równe niż bieżąca iteracja pętli, bieżąca iteracja pętli, która jest przekształcana w Tablicę, createArray(items(‘Zastosuj_dla_każdego’))) oraz wartości w Sorted Array, które są większe lub równe niż bieżąca iteracja pętli.
Zobaczmy kilka kroków tego procesu, aby zilustrować, co się tutaj dzieje.
Pierwsza liczba naszej nieposortowanej tablicy to 2. Pierwsza iteracja pętli będzie wyglądać następująco:
- Filtruj tablicę mniejszą lub równą 2. Ponieważ w tym kroku pobierane są elementy z tablicy posortowanej, a w tym momencie tablica posortowana jest pusta, ten krok zwróci pustą tablicę. Ponieważ w pustej tablicy nie ma elementów mniejszych lub równych 2.
- Tablica filtrów większa niż 2. Dokładnie tak, jak w poprzednim kroku, ten krok zwróci pustą tablicę. Ponieważ w pustej tablicy nie ma elementów większych niż 2.
- W ostatnim kroku tej iteracji Sorted Array zostanie ustawiona na połączenie trzech tablic. Filtruj tablicę mniejszą niż, czyli pustą, tablicę utworzoną z bieżącej iteracji pętli [2] i inną pustą tablicę, którą jest Tablica filtrów większa niż 2.
Tak więc sortowana tablica ma teraz jedną wartość i jest to [2].
Zobaczmy kolejną iterację pętli. Następna liczba w nieposortowanej tablicy to 6.
- Filtruj tablicę mniejszą lub równą 6. W Sorted Array jest tylko liczba 2, więc ten krok zwróci [2], ponieważ 2 jest mniejsze niż 6.
- Tablica filtrów większa niż 6. W sortowanej tablicy jest tylko liczba 2, więc ten krok zwróci pustą tablicę, ponieważ 2 jest mniejsza niż 6.
- W ostatnim kroku tej iteracji Sorted Array zostanie ustawiona na połączenie trzech tablic. Filtruj tablicę mniejszą niż [2], tablicę utworzoną z bieżącej iteracji pętli [6] i pustą tablicę, która jest tablicą Filtruj większą niż.
Tak więc sortowana tablica zawiera teraz dwie wartości – [2, 6].
Przejdźmy teraz do trzeciej iteracji pętli. Następną liczbą w tablicy nieposortowanej jest 4.
- Filtruj tablicę mniejszą lub równą 4. W sortowanej tablicy są [2, 6], więc ten krok zwróci [2], ponieważ tylko 2 jest mniejsze niż 4.
- Tablica filtrów większa niż 4. W Sorted Array są [2, 6], więc ten krok zwróci [6], ponieważ 6 jest większe niż 4.
- W ostatnim kroku tej iteracji Sorted Array zostanie ustawiona na połączenie trzech tablic. Filtruj tablicę mniejszą niż [2], tablicę utworzoną z bieżącej iteracji pętli [4] i [6], która jest tablicą filtru większą niż.
Po 3 krokach iteracji Sorted Array wygląda teraz tak – [2, 4, 6].
Ten proces dotyczy wszystkich wartości w nieposortowanej tablicy. Na końcu sortowana tablica zawiera wszystkie wartości z nieposortowanej tablicy, ale teraz posortowane w porządku rosnącym.