W świecie Power Platform pojawiło się rozwiązanie, które ma szansę ułatwić tworzenie oraz modyfikację aplikacji, a zarazem sprawić, że będzie to jeszcze przyjemniejsze niż dotychczas. Mowa o low-codowym języku programowania stworzonym przez firmę Microsoft zwanym PowerFX. Jeśli pracujesz z Microsoft Dataverse oraz korzystasz z Power Apps, prawdopodobnie już go widziałeś, nawet jeśli nie wiedziałeś, że to on.
PowerFX to język, który pozwala tworzyć logikę aplikacji w sposób prosty, przejrzysty i… zrozumiały praktycznie dla każdego. Nie musisz być programistą, żeby poczuć się, jakbyś nim był. W artykule przyjrzymy się mu z bliska.
Czym właściwie jest PowerFX?
PowerFX to low-codowy, silnie typowany, deklaratywny język programowania stworzony w 2021 roku przez Microsoft specjalnie na potrzeby Power Platform. Początkowo za jego pomocą można było dodawać logikę do aplikacji kreowanych jedynie w Canvas Apps, jednak z czasem stał się on dostępny w coraz większej ilości miejsc. Aktualnie można go również wykorzystywać, tworząc rozwiązania w Dataverse, Power Virtual Agents, Power Pages czy Power Automate.
Jego największym atutem jest prostota i to właśnie ten cel przyświecał jego powstaniu. W założeniu miał on przypominać formuły znane z programu Microsoft Excel, a zarazem pozwalać na tworzenie rozwiązań w aplikacjach biznesowych w równie łatwy sposób jak tworzenie arkuszy kalkulacyjnych. Dlatego zarówno ktoś z wiedzą programistyczną jak i kompletny laik jest w stanie go zrozumieć i użyć.
Do czego się nada?
Jeśli pracujesz z aplikacjami stworzonymi w środowisku Power Platform, wcześniej czy później staniesz przed potrzebą wprowadzenia własnych modyfikacji. PowerFX jest narzędziem, które da ci taką możliwość bez pisania skomplikowanego kodu. Nie zastąpi on wszystkich rozwiązań, które umożliwiają nam te oparte na kodzie (jak Dataverse Plugins czy Scripts), ale świetnie nada się do mniejszych rzeczy, na przykład:
- walidacja danych,
- aktualizacja danych w wybranych rekordach,
- filtrowanie wyświetlanych informacji w czasie rzeczywistym,
- sortowanie,
- przeliczanie wartości,
- wyświetlanie ostrzeżeń dla użytkownika,
- blokowanie przycisków w zależności od potrzeby,
- przełączanie pomiędzy widokami.
W dodatku PowerFX to rozwiązanie open-sourcowe. Jego kod jest publiczny i jawny. Oznacza to, że każdy może dostosowywać go do własnych potrzeb, współtworzyć, oraz że społeczność Power Platformowa może go ciągle rozwijać. Jest to całkowicie darmowe.
Co musisz wiedzieć, zanim zaczniesz?
Pisząc formuły za pomocą języka PowerFX, trzeba pamiętać, że wszelkie zmiany, które wprowadzają, dzieją się w czasie rzeczywistym. Co za tym idzie – jeśli zmienimy coś w naszym „kodzie”, zmiana ta będzie wprowadzona do aplikacji natychmiastowo. Jednak nie ma czego się bać. Inni użytkownicy nie zobaczą tych zmian dopóki ich nie opublikujemy. My jednak będziemy mieć możliwość sprawdzenia ich od razu w trybie podglądu, który jest nam oferowany.
Ponadto, wszystkie operacje, za które odpowiedzialny jest PowerFX, są asynchroniczne, więc mimo to, że wszystko dzieje się „na żywo”, niektóre operacje mogą być realizowane w tle i na rezultat ich działania musimy chwilę poczekać.
Załóżmy, że chcesz pobrać dane z zewnętrznego źródła, np. z SharePointa. System może potrzebować chwili, żeby dostać się do nich i odpowiednio je przetworzyć, a później poprawnie wyświetlić. Jednak aplikacja nie zawiesi się, czekając na zakończenie tej operacji. Będzie dalej działać normalnie, jedynie dane mogą zostać załadowane odrobinę później. Inaczej mówiąc: Power Fx nie zatrzymuje działania aplikacji, czekając, aż dane zostaną w pełni pobrane.
Składnia
Rozpoczynając pracę z językiem programowania, bez względu na to, czy jest on low-codowy, czy też nie, ważnym jest, aby zwrócić uwagę na jego składnię. Każdy z nich ma swoje zasady na które trzeba uważać.
Tak jest też i w przypadku PowerFX. Pisząc formuły, trzeba pamiętać, że funkcje muszą posiadać nawiasy okrągłe, a często na końcu powinien znaleźć się średnik rozdzielający od siebie dwa zapytania czy dwa warunki np. w funkcji Jeżeli.
Ponadto jest to język, który można opisać jako case sensitive. Innymi słowy – wielkość liter ma tutaj ogromne znaczenie. Zarówno jeśli chodzi o wywoływanie funkcji czy pisanie nazwy zmiennej. Wszystkie nazwy funkcji, których wywoływanie umożliwia PowerFx, muszą zaczynać się od wielkiej litery.
Kolejną ważną rzeczą dotyczącą składni może być to, że dane są tutaj relacyjne. Co to oznacza? PowerFX pozwala na dostanie się do wszelkich relacji rekordu za pomocą prostej notacji kropkowej. Na przykład taki zapis ThisItem. pozwoli nam na dostanie się do wszelkich atrybutów danego rekordu. System automatycznie podpowie nam, jakie pola czy też atrybuty znajdują się w wymienionym przez nas obiekcie.
Przykładowe funkcje
Copy(ThisItem.’Plate number’);; Notify(„Plate number copied to clipboard”);; Set(varPlateNumber; ThisItem.’Plate number’)
Jak można zauważyć, każda z funkcji tj. Copy, Notify oraz Set, aby zostać wywołaną, posiada nawias i dopiero w nim są zawarte przekazywane przez nas argumenty. Ponadto, pomiędzy funkcjami znajdują się podwójne średniki. Gdyby ich nie było albo średnik był pojedynczy, system poinformowałby nas o błędzie, zamiast wywoływać jakąkolwiek z funkcji.

Podobnie wygląda sprawa z nieodpowiednią wielkością liter. Jeżeli w systemie istnieje zmienna zapisana jako Plate number, a my spróbujemy ją wyszukać, wpisując plate number albo Plate Number, to system nie będzie w stanie znaleźć takiego pola.

Odrobinę inną informację dostaniemy, jeżeli nazwa funkcji będzie napisana małą literą. System poinformuje nas, że rozpoznał daną funkcję, ale jej nie obsługuje.
Pomimo wszystkich tych zasad, napisanie prostego zapytania w PowerFX jest naprawdę bardzo łatwe. Pisząc Dataverse Plugin, jeśli chcielibyśmy wykonać proste działanie matematyczne, które zaktualizowałoby wartość w jednym z pól w wybranym przez nas rekordzie, musielibyśmy przejść przez kilka kroków. Natomiast za pomocą PowerFX cała ta operacja może być zapisana w jednej linijce:
Patch(’Exam; ExamGallery.Selected; {’Cost price’:Value(TextBox2.Value) * Value(TextBox1.Value)});;
Taka prosta formuła pomnożyłaby wartości z pól TextBox1 i TextBox2, po czym zaktualizowałaby pole o nazwie Cost price znajdujące się w tabeli Exam w Dataverse.
Operatory
W PowerFX występują podstawowe operatory arytmetyczne i logiczne, które często są takie same jak w programie Excel. Szczególnie, jeśli chodzi o operatory arytmetyczne np. +, -, *, /, ^,% . Chociaż są też pomiędzy nimi różnice. PowerFX pozwala nam na wybór zapisu w przypadku trzech operatorów logicznych, na co Microsoft Excel by nam nie pozwolił.
Te operatory to:
- && czy And
- || czy Or
- ! czy Not
W tradycyjnym Excelu musielibyśmy użyć słowa AND, OR lub NOT, ale w PowerFX możemy wybrać, który zapis nam bardziej odpowiada i jest dla nas czytelniejszy. Angielskie nazwy bardziej kojarzą się nam z formułami Excela, a drugi sposób bardziej przypomina operatory używane w innych językach programowania. Ten przykład pokazuje również, że PowerFX jest czymś pomiędzy programowaniem a pisaniem formuł.
Przykładowo w PowerFX możemy napisać:

Jednak ten sam warunek możemy również zapisać jako:

Oba zapisy są prawidłowe i zadziałają tak samo. System sprawdzi, czy podany wiek użytkownika mieści się w przedziale pomiędzy 18 a 65, a następnie na podstawie tej informacji wyświetli odpowiedni komunikat.

PowerFX posiada również specjalne operatory typowe jedynie dla siebie. Takim przykładem mogą być in oraz exactin. Oba są odpowiedzialne za sprawdzenie, czy dana wartość występuje w kolekcji (np. w danej tabeli czy liście). Różnica między nimi jest taka, że in jest case-insensitive, a exactin jest case-sensitive. Innymi słowy exactin jest dokładniejszy w przeszukiwaniu kolekcji przez to, że zwraca uwagę na dokładny zapis danych wyrażeń, co czasami też jest niezbędne.
Typy danych
Kolejną ważną rzeczą są dostępne typy danych. Musimy je mieć na uwadze zarówno wtedy, kiedy działamy na danych występujących w Dataversie, jak i wtedy, gdy za pomocą języka Power Fx odczytujemy dane z zewnętrznego źródła np. środowiska Sharepoint. Wszystkie dane z Sharepointa są wtedy mapowane na te dostępne w PowerFX.
Występują tu standardowe typy, które dostępne są w wielu innych językach, takie jak:
- DateTime,
- Number,
- Decimal,
- Text,
- Boolean.
Jednak są też te mniej oczywiste:
- Color,
- Hyperlink,
- GUID,
- Media,
- Image,
- Record.

Podsumowanie
Rozwiązanie jakim jest PowerFX nie zastąpi innych języków programowania i nie daje nam nieskończonych możliwości modyfikacji logiki znajdującej się w naszej aplikacji stworzonej w środowisku Power Platform. Jednak jest to low-codowy język, który umożliwia tworzenie oraz modyfikację aplikacji biznesowych osobom nietechnicznym.
Jego siła leży w prostocie i bliskości do programu Microsoft Excel. Jeśli pracujesz w środowisku Power Platform i chcesz zacząć tworzyć lub modyfikować aplikacje biznesowe bez zagłębiania się w klasyczne języki programowania, PowerFX jest idealny dla ciebie.
Super artykuł! Świetne wskazówki dla początkującego i średniozaawansowanego PowerPlatformowca 🙂