Czyszczenie kolumn z odnośnikami i osobami w PowerApps
Czy kiedykolwiek męczyłeś się z brakiem możliwości wyczyszczenia wartości z pól typu liczba, osoba lub lookup używając PowerApps? Ostatnio znalazłem się w takiej sytuacji. Logika biznesowa mojej aplikacji wymagała, by usuwać wartości z pól formularza, w tym właśnie liczbowych, osób i lookupów. Niestety przekonałem się, że nie jest to możliwe (albo, jeszcze nie).
Próbowałem każdego podejścia jakie przyszło mi do głowy i jakie znalazłem w internecie: wstawiając puste wartości, używając pustych obiektów dla lookupów:
{ '@odata.type' : "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference", Id: 0, Value: null }
i peoplepicker, jednak wciąż nic nie działało. Gdy już naprawdę miałem się poddać i uznać, że nie jest to możliwe, przypomniałem sobie o bliskiej integracji i współpracy pomiędzy PowerApps i Microsoft Flow.
Rozwiązanie
Używając Flow wyzwalanego poprzez zdarzenie w PowerApps (naciśnięcie na przycisk, zaznaczenie, etc…) okazało się to bardzo proste. Najpierw otwórz kartę “Actions” (1) w interfejsie PowerApps, następnie kliknij “Flow” (2). Teraz kliknij przycisk, z którym ma zostać związana akcja (3). Następnie w wyświetlonej karcie utwórz nowy Flow (4). Wystarczy dodać tu jedną akcję: “Call HTTP endpoint in SharePoint” (zauważ, że jest to nowa akcja w Flow i jest ekstremalnie użyteczna, ponieważ znosi konieczność korzystania z akcji HTTP request, nadawania uprawnień do logowania OAuth, czy ustalania trust w SharePoint. Łatwo i prosto). Następnie powiąż stworzony Flow z przyciskiem (5) i wstaw parametr do wywołania (6):
Dlaczeo użyłem tej akcji? Zorientowałem się, że używanie regularnej akcji „Zaktualizuj element listy” nie pozwala również na wyczyszczenie kolumn osoba i lookup (serio!), co więcej nie pozwala na aktualizację tylko jednego pola, a na raz wszystkich. Żeby więc nie wyczyścić wszystkiego, najpierw trzeba odpytać SharePoint o dane elementu, potem uzupełnić wszystkie pola w akcji aktualizacji. Sporo pracy, gdy chce się aktualizować jedno tylko pole.
Konfiguracja akcji “Call HTTP endpoint in SharePoint” wygląda następująco:
[tds_info] Aby uzyskać wartość „type”, wykonaj zapytanie do /_api/Web/Lists/GetByTitle(’List Name’)?$select=ListItemEntityTypeFullName i pobierz wartość zwróconą przez atrybut ListItemEntityTypeFullName. Ważne jest również to, że pola odnośników (lookup, person) muszą mieć swoje nazwy wewnętrzne zakończone „Id”.[/tds_info]
Następnie dodaj akcję “Return to PowerApps”, dzięki czemu będziesz mógł tworzyć sekwencję zdarzeń w PowerApps lub zwrócić informację z powrotem do swojej aplikacji.
Naprawdę działa to jak marzenie!