Преглед услуге Microsoft Power Fx
Power Fx је језик са мало кодирања који ће се користити широм услуге Microsoft Power Platform. То је општенаменски, јаког типа, декларативни и функционалан програмски језик.
Power Fx је изражен у тексту прилагођеном човеку. То је језик са мало програмирања са којим произвођачи могу директно радити у траци са формулама налик програму Excel или прозору текста услуге Visual Studio Code. „Мало“ у изразу „са мало програмирања“ је због језгровите и једноставне природе језика, што олакшава уобичајене програмске задатке и произвођачима и програмерима. Омогућава читав спектар развоја, од „без кода“ онима који никада раније нису програмирали, до „професионалног кода“ за искусног професионалца, без мучног учења или преправљања између, што омогућава различитим тимовима да сарађују и уштеде време и трошкове.
Белешка
- Microsoft Power Fx је ново име за језик формула за апликације са подлогом у услузи Power Apps. Овај преглед и повезани чланци су у изради док издвајамо језик из апликација на платну, интегришемо га са другим Microsoft Power Platform производима и чинимо га доступним у виду отвореног кода. Да бисте сазнали више о доживели језик већ данас, почните са чланком Почетни кораци са формулама у апликацијама са подлогом у Power Apps документацији и региструјте се за бесплатну пробну верзију услуге Power Apps.
- У овом чланку се позивамо на ауторе када описујемо особину која се може користити на било ком крају спектра програмских вештина. Корисника називамо програмер ако је функција напреднија и вероватно ван оквира типичног корисника програма Excel.
Power Fx повезује објекте са декларативним формулама налик онима у унакрсним табелама. На пример, размислите о својству Видљиво контроле корисничког интерфејса као ћелије на Excel радном листу, са придруженом формулом која израчунава њену вредност на основу својстава других контрола. Логика формуле аутоматски израчунава вредност, слично ономе како то ради прорачунска табела, што утиче на видљивост контроле.
Такође, Power Fx нуди императивну логику када је то потребно. Радни листови обично немају дугмад која могу послати промене у базу података, али апликације то често имају. Исти језик израза користи се и за декларативну и за императивну логику.
Power Fx ће бити доступан као софтвер отвореног кода. Тренутно је интегрисан у апликације са подлогом, а сад смо у процесу издвајања из услуге Power Apps ради коришћења у другим Microsoft Power Platform производима и као отворени кôд. Још информација: Microsoft Power Fx на GitHub-у
Овај чланак даје преглед језика и његових принципа дизајна. Да бисте сазнали више о језику Power Fx, погледајте следеће чланке:
- Типови података
- Оператори и идентификатори
- Табеле
- Променљиве
- Императив логика
- Глобална подршка
- Израз граматика
- ИАМЛ формула граматика
Размишљајте о унакрсним табелама
Шта би било да можете да направите апликацију тако лако као што направите радни лист у програму Excel?
Шта ако бисте могли да искористите своје постојеће знање о табелама?
То су била питања која су инспирисала креирање услуге Power Apps и језика Power Fx. Стотине милиона људи свакодневно стварају радне листове помоћу програма Excel; донесимо им стварање апликација које је лако и користе Excel концепте које они већ знају. Издвајањем језика Power Fx из услуге Power Apps, одговорићемо на ова питања за аутоматизацију градње, виртуелног агента или других домена.
Сви програмски језици, укључујући Power Fx, имају изразе: начин представљања израчунавања преко бројева, низова или других типова података. На пример, mass * acceleration
у већини језика изражава множење параметара mass
и acceleration
. Резултат израза може се ставити у променљиву, користити као аргумент у процедури или угнездити у већи израз.
Power Fx прави и корак даље. Израз сам по себи не говори ништа о томе шта израчунава. На аутору је да га постави у променљиву или да га проследи у функцију. У језику Power Fx, уместо да напишете само израз који нема одређено значење, пишете формулу која везује израз за идентификатор. Пишете force = mass * acceleration
као формулу за израчунавање force
. Када се mass
или acceleration
промене, force
се аутоматски ажурира на нову вредност. Израз је описивао прорачун, формула је том израчуну дала име и користила га као рецепт. Због тога Power Fx називамо језиком формула.
На пример, ова формула из услуге Stack Overflow претражује ниску у обрнутом редоследу. У програму Excel то изгледа као следећа слика.
Снимак екрана траке с формулама у програму Excel са формулом: =RIGHT(A1,LEN(A1)- FIND("|", SUBSTITUTE(A1," ","|", LEN(A1)-LEN(SUBSTITUTE(A1," ","")))) Ћелија А1 садржи текст „Здраво, свете! Сјајно је упознати вас!“ Ћелија A2 садржи текст „ти!“
Power Fx ради са овом истом формулом, са референцама на ћелије које се замењују референцама на контролу својстава:
Снимак екрана Power Fx траке формула у услузи Power Apps. Формула је =RIGHT(Input.Text,Len(Input.Text)- FIND("|", SUBSTITUTE(Input.Text," ","|", Len(Input.Text)-Len(Substitute(Input.Text," ","")))) У пољу за унос испод формуле, текст „Здраво, свете! Сјајно је упознати вас!“ појављује се слово по слово. Истовремено у пољу Ознака појављују се слова последње речи. Када се пуни текст појави у пољу за унос, реч „ви!“ се приказује у пољу Ознака.
Како се вредност контроле Input
мења, контрола Label
аутоматски прерачунава формулу и приказује нову вредност. Овде не постоје руковаоци догађајем OnChange
, као што је то уобичајено у другим језицима.
Још један пример који користи формулу за боју Fill
екрана. Како се мењају клизачи који контролишу црвену, зелену и плаву боју, боја позадине се аутоматски мења током поновног израчунавања.
Не постоје догађаји OnChange
за контроле клизача, као што је то уобичајено у другим језицима. Не постоји начин да се било како експлицитно постави Fill
вредност својства. Ако боја не ради како се очекивало, треба да погледате ову једну формулу да бисте разумели зашто не ради. Не треба да претражујете апликацију да бисте пронашли део кода који поставља својство у неочекивано време; нема временског елемента. Тачне вредности формуле се увек одржавају.
Када се клизачи подесе на тамну боју, ознаке за црвену, зелену и плаву боју постају беле да би остале читљиве. То се постиже једноставном формулом на својству Color
за сваку контролу ознаке.
Оно што је сјајно у овоме је што је изоловано од онога што се догађа за Fill
боју: ово су два потпуно различита прорачуна. Уместо великих монолитних поступака, Power Fx логика се обично састоји од много мањих формула које су независне. То их чини лакшим за разумевање и омогућава побољшања без нарушавања постојеће логике.
Power Fx је декларативни језик, баш као што је и Excel. Произвођач дефинише какво понашање жели, али на систему је да утврди и оптимизује како и када да то постигне. Да би то било практично, већина посла се обавља путем чистих функција без нежељених ефеката, чинећи Power Fx такође функционалним језиком (и опет, баш као што је то и Excel).
Увек активно
Дефинишући аспект радних листова је да су они увек активни и промене се одражавају тренутно. На радном листу не постоји режим компајлирања или покретања. Када се формула модификује или унесе вредност, радни лист се одмах прерачунава да одражава промене. Све откривене грешке одмах се појављују и не ометају остатак радног листа.
Иста ствар се примењује у језику Power Fx. Инкрементални компајлер се користи за континуирано одржавање програма у синхронизацији са подацима на којима ради. Промене се аутоматски преносе кроз графикон програма, утичући на резултате зависних прорачуна, који могу покретати својства на контролама као што су боја или положај. Инкрементални компајлер такође нуди богато искуство уређивања формула са технологијом IntelliSense, предлозима, аутоматским довршавањем и провером типова.
У анимацији у наставку, број налога се приказује у контроли ознаке у зависности од контроле клизача, иако постоје две грешке у ознакама испод ње. Апликација је веома активна и интерактивна. Први покушај поправљања формуле уносом .InvalidName
резултира тренутном црвеном линијом и приказује се грешка, како би требало, али апликација наставља да ради.
Када се унесе .Employee
, ово узрокује да Data
окно дода табелу Запослени, преузимају се метаподаци за ову табелу и одмах се нуде предлози за колоне. Само смо прешли преко релације једне табеле са другом и систем је извршио потребна прилагођавања референци апликације. Иста ствар се дешава када додате а .Customer
.
Након сваке промене, клизач наставља са последњом вредношћу и све променљиве задржавају своју вредност. Све време, број поруџбине се и даље приказује у горњој ознаци како треба. Апликација је била активна све време и обрађивала је стварне податке. Можемо сачувати податке, отићи, а други из могу отворити и користити баш као и у програму Excel. Не постоји корак израде нити компајлирање, постоји само корак објављивања како би се утврдило која верзија апликације је спремна за кориснике.
Мали обим кодирања
Power Fx описује пословну логику у сажетим, али моћним формулама. Већина логике се може свести у један ред са пуно изражајности и контроле за сложеније потребе. Циљ је да се број концепата које аутор мора да разуме сведе на минимум – у идеалном случају, не више него што би то корисник програма Excel већ знао.
На пример, да бисте потражили име запосленог за поруџбину, напишите Power Fx као што је приказано у следећој анимацији. Поред Excel концепата, овде се користи само ознака тачке „.“ за анализу структуре података, у овом случају .Employee.'First Name'
. Анимација приказује мапирање делова Power Fx формуле и концепата који морају бити експлицитно кодирани у еквивалентном JavaScript коду.
Погледајмо детаљније на све ствари које Power Fx ради за нас и на слободу коју треба да оптимизује јер је формула била декларативна:
Асинхроно : Све операције података у Power Fx су асинхроне. Произвођач не мора ово да специфицира, нити мора синхронизовати операције након завршетка позива. Аутор уопште не мора да буде свестан овог концепта, не треба да зна шта је обећање или ламбда функција.
Локално и даљински : Power Fx користи исту синтаксу и функције за податке који су локални у меморији и даљински повеже базу података или сервис. Корисник не мора да размишља о овој разлици. Power Fx аутоматски делегира серверу оно што може да би тамо ефикасније обрадио филтере и сортирао садржај.
Релациони подаци : Поруџбине и купци су две различите табеле, са односом више на један. OData упит захтева „$expand“ са познавањем страног кључа, слично функцији Join у SQL-у. Формула нема ништа од овога, заправо кључеви базе података су још један концепт о којем аутор не мора ништа да зна. Аутор може да користи једноставну нотацију са тачкама да би приступио целом графикону релација из записа.
Пројекција : Када пишете упит, многи програмери пишу
select * from table
, што враћа све колоне података. Power Fx анализира све колоне које се користе у целој апликацији, чак и у зависностима од формула. Пројекција се аутоматски оптимизује и, опет, произвођач не мора да зна шта значи „пројекција“.Преузми само оно што је потребно : У овом примеру,
LookUp
функција подразумева да само један запис треба да буде преузет и то је све што се враћа. Ако се тражи више записа помоћуFilter
функције – за шта би се могло квалификовати хиљаде записа – истовремено се враћа само једна страница података, у распореду од 100 записа по страници. Корисник мора покретима да прође кроз галерију или табелу података да би видео више података и они ће му се аутоматски приказати. Произвођач може да расуђује о великим скуповима података без потребе да размишља о ограничавању захтева за подацима на практичне делове.Покреће се само када је то потребно : Дефинисали смо формулу за
Text
својство контроле ознаке. Чим се изабрана променљива промени, функцијаLookUp
се аутоматски прерачунава и ознака се ажурира. Произвођач није морао да напише OnChange обрађивач за избор и није морао да се сети да ова ознака зависи од њега. Ово је декларативно програмирање, о чему је раније било речи, аутор је прецизирао шта жели да има у ознаци, а не како и када то треба да буде прибављено. Ако ова ознака није видљива јер се налази на екрану који није видљив или је његовоVisible
својство нетачно, можемо израчунавање одложити док ознака не буде видљива и ефикасно га уклонити ако се то ретко догоди.Превод синтаксе Екцел-а: Екцел користе многи корисници, од којих већина зна да се амперсанд ( & ) користи за спајање низова. JavaScript користи знак плус (+), а други језици користе тачку (.).
Приказ имена и локализација :
First Name
користи се у формули Power Fx докnwind_firstname
се користи у ЈаваСцрипт еквиваленту. У услугама Microsoft Dataverse и SharePoint, ту је и име за приказ за колоне и табеле поред јединственог логичког имена. Имена за приказ су често много једноставнија за употребу, као у овом случају, али имају још један важан квалитет јер могу бити локализована. Ако имате вишејезични тим, сваки члан тима може видети имена табела и поља на свом језику. У свим случајевима употребе, Power Fx осигурава да се тачно логичко име аутоматски пошаље у базу података.
Без кода
Не морате читати и писати Power Fx да бисте почели изражавати логику. Постоји пуно прилагођавања и логике која се може изразити једноставним прекидачима и градитељима корисничког интерфејса. Ови алати без кодирања направљени су за читање и писање језика Power Fx како би се осигурало довољно простора за некога да то настави даље, истовремено признајући да алати без кодирања никада неће пружити сву изражајност пуног језика. Чак и када се користи са алаткама за израду без кодирања, трака формула је централна у услузи Power Apps како би аутору показала шта се ради у његово име како би он могао да почне да учи Power Fx.
Погледајмо неке примере. У услузи Power Apps, табла својстава обезбеђује прекидаче и дугмад „без кода“ за својства контрола. У пракси је већина својстава статична. Помоћу алата за изградњу боја можете променити боју позадине за Gallery
. Приметите да трака формуле одражава ову промену, ажурирајући формулу на други RGBA
позив. У било ком тренутку можете отићи на траку формула и направити овај корак даље – у овом примеру, коришћењем ColorFade
за подешавање боје. Својство боје и даље се појављује на табли са својствима, али fx икона се појављује при преласку показивача и преусмерени сте на траку са формулама. Ово у потпуности функционише на два начина: уклањање ColorFade
позива враћа боју нечему што табла својстава може да разуме и можете је поново користити за подешавање боје.
Ево сложенијег примера. Галерија приказује списак запослених из услуге Dataverse. Dataverse обезбеђује приказе података табеле. Можемо одабрати један од ових приказа и формула се мења тако да користи Filter
функцију са овим именом приказа. Два падајућа менија могу се користити за бирање тачне табеле и приказа без додиривања траке са формулама. Али рецимо да желите да идете даље и додате сортирање. То можемо учинити на траци за формуле и табла својстава поново приказује икону fx и усмерава измене на траку за формуле. И опет, ако поједноставимо формулу на нешто што табла својстава може да чита и пише, она се опет може користити.
Ово су били једноставни примери. Верујемо да Power Fx представља одличан језик за описивање интеракција без кодирања. Концизан је, моћан и једноставан за рашчлањивање и пружа довољно слободног простора који је тако често потребан за рад без тешкоћа до нивоа мало кодирања.
Професионални кôд
Аутори са мало кодирања понекад граде ствари за које је потребна помоћ стручњака или их професионални програмер преузима ради одржавања и побољшања. Професионалци такође цене то што развој са мало кодирања може бити лакши, бржи и јефтинији од израде професионалног алата. Није у свакој ситуацији потребна пуна снага система Visual Studio.
Професионалци желе да користе професионалне алате како би били најпродуктивнији. Power Fx формуле се могу чувати у YAML изворним датотекама, које се лако уређују помоћу услуге Visual Studio Code, платформе Visual Studio или било ког другог уређивача текста и омогућавају стављање језика Power Fx под контролу извора помоћу услуга GitHub, Azure DevOps или било ког другог система контроле изворног кода.
Power Fx подржава компоненте засноване на формулама за дељење и поновну употребу. Најавили смо подршку за параметре својствима компоненти, што омогућава стварање чистих корисничких функција, уз више побољшања у будућности.
Такође, Power Fx сјајно спаја компоненте и услуге које су направили професионалци. Готови конектори пружају приступ стотинама извора података и веб-услугама, прилагођени конектори омогућавају да Power Fx разговара са било којом REST веб-услугом, а компоненте кода омогућавају да Power Fx ступи у интеракцију са потпуно прилагођеним JavaScript кодом на екрану и страници.
Принципи дизајна
Једноставна
Power Fx је дизајниран да циља циљну групу аутора, чији чланови нису обучени програмери. Где год је то могуће, користимо знање које би ова циљна група већ знала или може брзо да усвоји. Број концепата потребних за успех сведен је на минимум.
Једноставност је добра и за програмере. За циљну групу програмера, намеравамо да будемо језик са мало кодирања који скраћује време потребно за изградњу решења.
Excel доследност
Microsoft Power Fx језик се у великој мери ослања на језик Excel формула. Настојимо да искористимо Excel знање и искуство многих произвођача који такође користе Excel. Типови, оператори и семантика функција су најближе могуће програму Excel.
Ако Excel нема одговор, окрећемо се језику SQL. После програма Excel, SQL је следећи најчешће коришћени декларативни језик и може пружити смернице о операцијама података и снажном куцању које Excel нема.
Декларативно
Произвођач описује шта жели да његова логика ради, не баш како или када да то уради. То омогућава компајлеру да оптимизује паралелним извођењем операција, одлажући рад док не затреба и преузимајући и поново користећи кеширане податке.
На пример, у Excel радном листу, аутор дефинише односе међу ћелијама, али Excel одлучује када и којим редоследом се процењују формуле. Слично томе, формуле у апликацији могу се сматрати „поновним израчунавањима“ по потреби на основу радњи корисника, промена базе података или догађаја тајмера.
Функционалност
Ми највише волимо чисте функције које немају нежељене ефекте. То резултира логиком коју је лакше разумети и даје компајлеру највећу слободу за оптимизацију.
За разлику од програма Excel, апликације по својој природи мењају статус – на пример, апликације имају дугмад која чувају промене записа у бази података. Стога неке функције имају нежељене ефекте, иако то ограничавамо онолико колико је практично.
Композиција
Тамо где је то могуће, додата функционалност се добро слаже са постојећом функционалношћу. Моћне функције могу се раставити на мање делове који се могу лакше користити самостално.
На пример, контрола Галерија нема одвојена својства Sort
и Filter
. Уместо тога, функције Sort
и Filter
су састављене заједно у једно својство Items
. Кориснички интерфејс за изражавање понашања Sort
и Filter
је слојевит преко својства Items
коришћењем двосмерног уређивача за ово својство.
Строго дефинисање типова
Типови свих вредности су познати у време компајлирања. То омогућава рано откривање грешака и многобројне предлоге у току писања.
Подржани су полиморфни типови, али пре него што се могу користити, њихов тип мора бити закачен за статички тип и тај тип мора бити познат током компајлирања. Функције IsType и AsType су предвиђене за тестирање и конверзију типова.
Закључивање типова
Типови су изведени из употребе, а да нису декларисани. На пример, постављањем променљиве на број резултира да се тип променљиве успостави као број.
Конфликтна употреба типова доводи до грешке током компајлирања.
Децимални сепаратори осетљиви на локални стандард
Неки региони света користе тачку (.) као децимални сепаратор, док други користе зарез (,). То је оно што и Excel ради. То се обично не ради у другим програмским језицима, који обично користе канонску тачку (.) као децимални сепаратор за све кориснике широм света. Да бисте били што приступачнији произвођачима на свим нивоима, важно је да је 3,14
децимални број за особу у Француској која се користи том синтаксом целог свог живота.
Избор децималног сепаратора каскадно утиче на сепаратор листе, који се користи за аргументе позива функције, и на оператер ланчаног повезивања.
Децимални сепаратор на језику аутора | Power Fx знак за раздвајање децимала | Power Fx знак за раздвајање листе | Power Fx оператор ланчаног повезивања |
---|---|---|---|
, (тачка) | , (тачка) | ,(зарез) | ; (тачка-зарез) |
,(зарез) | ,(зарез) | ; (тачка-зарез) | ;; (двострука тачка и зарез) |
Још информација: Глобална подршка
Није објектно оријентисан
Excel није објектно оријентисан, као ни Power Fx. На пример, у неким језицима се дужина стринга изражава као својство стринга, као што је "Hello World".length
у језику JavaScript. Excel и Power Fx уместо тога изражавају ово кроз функцију, као Len( "Hello World" )
.
Компоненте са својствима и методама су објектно оријентисане и Power Fx лако ради са њима. Али тамо где је могуће, више волимо функционални приступ.
Проширивост
Аутори могу да креирају своје компоненте и функције помоћу самог језика Power Fx. Програмери могу да креирају своје компоненте и функције писањем JavaScript кода.
Прилагођен програмерима
Иако су нам аутори примарна циљна група, трудимо се да будемо прилагођени програмерима где год је то могуће. Ако се то не коси са претходно описаним принципима дизајна, радимо ствари на начин који ће програмер ценити. На пример, Excel нема могућност додавања коментара, па користимо редове и редове у облику слова C.
Еволуција језика
Развој програмских језика је и неопходан и незгодан. Сви су – с правом – забринути да би промена, без обзира колико била добронамерна, могла разбити постојећи кôд и захтевати од корисника да науче нови образац. Power Fx озбиљно схвата повратну компатибилност, али такође чврсто верујемо да то нећемо увек погодити из прве и заједнички ћемо као заједница учити шта је најбоље. Морамо се развијати и Power Fx је од самог почетка дизајниран да подржи еволуцију језика.
Ознака верзије језика добија се уз сваки сачувани Power Fx документ. Ако желимо да направимо некомпатибилну промену, написаћемо оно што називамо „конвертер повратне компатибилности“ који аутоматски преправља формулу следећи пут када је уређује. Ако је промена нешто главно о чему треба да едукујемо корисника, приказаћемо и поруку са везом до докумената. Користећи ову могућност, и даље можемо учитати апликације које су направљене помоћу верзија за преглед услуге Power Apps од пре много година, упркос свим променама које су се догодиле од тада.
На пример, увели смо функцију ShowError
за приказ банера грешке са црвеном позадином.
Корисницима се то свидело, али су од нас такође тражили начин за приказивање банера за успех (зелена позадина) или информативног банера (плава позадина). Дакле, смислили смо генеричкију Notify
функцију која узима други аргумент за врсту обавештења. Могли смо само додати Notify
и задржати ShowError
онакав какав је био, али смо уместо тога заменили ShowError
са Notify
. Уклонили смо функцију која се раније производила и заменили је нечим другим. Будући да су постојала два начина да се уради иста ствар, ово би изазвало забуну – посебно за нове кориснике – и, што је најважније, то би додало сложеност. Нико се није жалио, сви су ценили промену, а затим се пребацили на следећу функцију „Notify“.
Ево како изгледа иста апликација када се учита у најновију верзију услуге Power Apps. Корисник није захтевао никакву радњу да би се ова трансформација догодила, она се догодила аутоматски када је апликација отворена.
Помоћу ове функције, Power Fx може да се развија брже и агресивније од већине програмских језика.
Нема недефинисане вредности
Неки језици, попут JavaScript, користе концепт недефинисане вредности за неиницијализоване променљиве или недостајућа својства. Ради једноставности, избегли смо овај концепт. Примери који не би били дефинисани на другим језицима третирају се као грешка или као празна вредност. На пример, све неиницијализоване променљиве почињу празном вредношћу. Сви типови података могу добити празну вредност.
Сродни чланци
Типови података
Оператори и идентификатори
Табеле
Променљиве
Императив логика
Глобална подршка
Израз граматика
ИАМЛ формула граматика
Формуле у апликацијама платна