Power Fx 微軟低程式碼開發平臺

Power Fx 是將跨 Microsoft Power Platform 使用的低程式碼語言。 它是一種強型別、宣告性、一般用途的函數語言程式設計語言。

Power Fx 用對人類友好的文字表示。 它是一種低程式碼語言,製作者可以直接在類似 Excel 的公式欄或 Visual Studio Code 文字視窗中使用。 低程式碼中的“低”是由於語言的簡潔性和簡單性,讓製作者和開發人員都可以輕鬆進行一般的程式設計任務。 它可以進行從面向沒有程式設計經驗的使用者的無程式碼到面向經驗豐富的專業人士的“專業程式碼”的全面開發,無需透過學習或重寫來解決二者之間的差異,從而使不同的團隊可以協作並節省時間和費用。

Power Fx 將物件與類似於宣告性電子表格的公式繫結在一起。 例如,將 UI 控制元件的

Visible

屬性視為 Excel 工作表中的單元格,它具有基於其他控制元件的屬性來計算其值的關聯公式。 公式邏輯會自動重新計算該值,這與電子表格的方式類似,這會影響控制元件的可見性。

此外,Power Fx 也根據需要提供命令性邏輯。 工作表通常沒有可以將更改提交到資料庫的按鈕,但是應用通常會有。 相同的表示式語言用於宣告性和命令性邏輯。

Power Fx 將作為開源軟體提供。 它目前已整合到畫布應用中,您現在就可以在其中體驗一下。 我們正在從 Power Apps 中提取它,以用於其他 Microsoft Power Platform 產品並用作開放原始碼。

讓我們更深入地瞭解 Power Fx 可為我們執行的所有工作,以及因為公式是宣告性的而必須最佳化的自由度:

非同步

:Power Fx 中的所有資料操作都是非同步的。 製作者不需要對此進行指定,也不需要在呼叫結束後同步操作。 製作者根本不需要知道此概念,也不需要了解什麼是 promise 或 lambda 函式。

本地和遠端

:Power Fx 使用與資料庫或服務中本地記憶體中和遠端資料相同的語法和函式。 使用者不需要考慮此區別。 Power Fx 自動將相關內容委派到伺服器以更有效地處理篩選器和排序。

關係資料

:訂單和客戶是兩個不同的表,具有多對一關係。 OData 需要“$expand”以及有關外來鍵(類似於 SQL 中的聯接)的知識。 公式中沒有此內容,實際上,資料庫金鑰是製作者無需瞭解的另一個概念。 製作者可以使用簡單的點表示法從記錄中訪問關係的整個圖形。

投影

:編寫查詢時,很多開發人員會編寫 select * from table,這會返回所有資料列。 Power Fx 分析在整個應用中,甚至跨公式依賴關係使用的所有列。 投影會自動最佳化,同樣,製作者不需要知道“投影”的含義。

僅檢索所需內容

:在此示例中,LookUp 函式意味著只應檢索一條記錄,這就是返回的全部內容。 如果使用 Filter 函式請求更多記錄—可能有數千條記錄符合條件,一次將僅返回一頁資料,每頁大約 100 條記錄。 使用者必須對庫或資料表進行手勢操作來檢視更多資料,系統會自動為他們引入資料。 製作者可以推出大型資料集,而無需考慮將資料請求限制為可管理的區塊。

僅在需要時執行

:我們為標籤控制元件的 Text 屬性定義了一個公式。 當所選變數發生更改時,LookUp 將自動重新計算並且標籤將更新。 製作者不需要為“選擇”編寫 OnChange 處理程式,也不需要記住此標籤依賴於它。 這是如前所述的宣告性程式設計:製作者指定他們想要在標籤中包括哪些內容,而沒有指定獲取它的方式或時間。 如果此標籤不可見是因為它在螢幕上不可見,或者它的 Visible 屬性為 false,我們可以將此計算推遲到標籤可見之後,來有效地消除這種情況(如果這種情況很少發生)。

Excel 語法翻譯

:很多使用者都使用 Excel,其中大多數人都知道與號 (

&

) 用於字串連線。 JavaScript 使用加號 (

+

),其他語言使用點 (

.

)。

顯示名稱和本地化

:First Name 用於 Power Fx 公式,而 nwind_firstname 用於 JavaScript 等效項。 在 Microsoft Dataverse 和 SharePoint 中,除了唯一的邏輯名稱外,還有列和表的顯示名稱。 在這種情況下,顯示名稱通常要對使用者友好得多,但是它們還有另一個重要的品質,就是它們可以本地化。 如果您有一個多語言團隊,每個團隊成員都可以使用自己的語言查看錶和欄位名稱。 在所有用例中,Power Fx 都會確保將正確的邏輯名自動傳送到資料庫。

無程式碼

您不必讀取和寫入 Power Fx 就可以開始表達邏輯。 可以透過簡單切換和 UI 生成器表達許多自定義和邏輯。 這些無程式碼工具被構建為讀取和寫入 Power Fx,以確保有足夠的淨空讓使用者進一步利用它,同時也要承認無程式碼工具將永遠無法提供完整語言的全部表達能力。 即使與無程式碼生成器一起使用,公式欄也在 Power Apps 中處於前沿和中心位置,用於培訓製作者將代表他們執行哪些操作,以便他們可以開始瞭解 Power Fx。

讓我們來看看一些示例。 在 Power Apps 中,屬性窗格為控制元件的屬性提供無程式碼切換和旋鈕。 實際上,大多數屬性值都是靜態值。 您可以使用顏色生成器來更改 Gallery 的背景顏色。 請注意,公式欄將反映此更改,將公式更新為其他 RGBA 呼叫。 您隨時可以轉到公式欄,進一步進行操作—在本示例中,是使用 ColorFade 調整顏色。 顏色屬性仍會顯示在屬性面板中,但是將滑鼠懸停在上面時會顯示

fx

圖示,您將被定向到公式欄。 這可以透過兩種方式完全實現:刪除 ColorFade 呼叫將使顏色返回到屬性面板可以理解的內容,您可以再次使用它來設定顏色。

Power Fx 微軟低程式碼開發平臺

下面是一個更復雜的示例。 庫顯示來自 Dataverse 的員工列表。 Dataverse 提供表資料的檢視。 我們可以選擇這些檢視之一,公式將更改為使用包含此檢視名稱的 Filter 函式。 兩個下拉選單可用於撥入正確的表和檢視,而無需接觸公式欄。 但是,假設您需要進一步處理,新增排序。 我們可以在公式欄中執行此操作,屬性面板將再次顯示 fx 圖示並將修改定向到公式欄。 同樣,如果我們將公式簡化為屬性面板可以讀取和寫入的內容,可以再次使用它。

Power Fx 微軟低程式碼開發平臺

這些都是簡單的示例。 我們認為 Power Fx 是描述無程式碼互動的良好語言。 該語言簡明、強大且易於分析,並提供對低程式碼“無差異”所需的常用淨空。

專業程式碼

低程式碼製作者有時會構建需要專家幫助或由專業開發人員接管的東西,以進行維護和增強。 專業人士也贊同,與生成專業工具相比,低程式碼開發更容易、更快速且成本更低。 並非所有情況都需要 Visual Studio 的完整功能。

專業人士希望使用專業工具來提高效率。 Power Fx 公式可以儲存在 YAML 原始檔中,這些檔案可以使用 Visual Studio Code、Visual Studio 或任何其他文字編輯器輕鬆地進行編輯,並支援透過 GitHub、Azure DevOps 或任何其他原始碼控制系統將 Power Fx 置於原始碼管理下。

Power Fx 微軟低程式碼開發平臺

Power Fx 微軟低程式碼開發平臺

Power Fx 支援基於公式的元件,以便共享和重用。 我們宣佈了支援元件屬性的引數,支援建立純使用者定義的函式,並在此過程中進行更多增強。

此外,Power Fx 還適用於將專業人士生成的元件和服務組合在一起。 現成聯結器提供對數百個資料來源和 Web 服務的訪問許可權,自定義聯結器使 Power Fx 可以與任何 REST Web 服務通訊,程式碼元件使 Power Fx 可以與螢幕和頁面上完全自定義的 JavaScript 進行互動。

設計原則

簡單

Power Fx 主要針對未受過開發人員培訓的製作者受眾。 如果可能,我們使用此訪問群體已知或者可以快速汲取的知識。 成功所需的概念數將降到最低。

設計簡單對開發人員也有益。 對於開發人員訪問群體,我們旨在設計一種可以減少生成解決方案所需時間的低程式碼語言。

Excel 一致性

Microsoft Power Fx 語言大量借用 Excel 公式語言。 我們尋求利用很多也使用 Excel 的製作者的 Excel 知識和經驗。 型別、運算子和函式語義儘可能與 Excel 接近。

如果 Excel 沒有答案,我們接下來會期待 SQL。 在 Excel 之後,SQL 是下一種最常用的宣告性語言,它可以提供有關 Excel 不提供的資料操作和強鍵入的指導。

宣告性

製作者描述他們希望自己的邏輯做

什麼

,而不是確切的

如何

何時

做。 這讓編譯器可以透過並行執行操作,將工作推遲到需要時以及預取和重用快取的資料來進行最佳化。

例如,在 Excel 工作表中,作者定義單元格之間的關係,但是 Excel 決定何時以及以什麼順序對公式進行求值。 類似地,應用中的公式可以根據需要基於使用者操作、資料庫更改或計時器事件,被視為的“recalc-ing”。

函式式

我們偏愛沒有副作用的純函式。 這樣可以使邏輯更容易理解,併為編譯器提供最大的最佳化自由。

與 Excel 不同,應用本質上確實會改變狀態—例如,應用具有將更改儲存到資料庫中記錄的按鈕。 因此,某些函式確實有副作用,儘管我們已儘可能限制它。

組合

在可能的情況下,新增的功能可以與現有功能很好地結合在一起。 強大的函式可以分解為較小部分,它們更易於單獨使用。

例如,

控制元件沒有單獨的 Sort 和 Filter 屬性。 相反,Sort 和 Filter 函式將組合成一個 Items 屬性。 表達 Sort 和 Filter 行為的 UI 透過為此屬性使用雙向編輯器,被放置在 Items 屬性的上層。

強型別

所有值的型別在編譯時已知。 這允許在創作時及早檢測到錯誤並提供豐富的建議。

支援多型型別,但是必須先將其型別固定為靜態型別,並且必須在編譯時知道該型別,才能夠使用它們。 提供

IsType

AsType

函式以測試和轉換型別。

型別推理

型別從其使用中派生,不需要宣告。 例如,將變數設定為數字會導致變數的型別被建立為數字。

型別使用衝突會導致編譯時錯誤。

區域設定相關小數分隔符

世界上有些區域使用點 (

.

) 作為小數點分隔符,而其他區域使用逗號 (

,

)。 這也是 Excel 功能。 其他程式語言通常不會這樣做,這些語言通常為全球所有使用者使用公認的點 (

.

) 作為小數點分隔符。 為了儘可能使所有級別的製作者都可以上手使用,對於一生中一直使用該語法的一個法國人來說,3,14 是一個十進位制數字很重要。

選擇小數分隔符對用於函式呼叫引數的列表運算子和連結運算子具有級聯影響。

區域設定相關小數分隔符

作者的語言小數分隔符

Power Fx 小數分隔符

Power Fx 列表分隔符

Power Fx 連結運算子

.

(點)

.

(點)

,

(逗號)

;

(分號)

,

(逗號)

,

(逗號)

;

(分號)

;;

(雙分號)

詳細資訊:全球支援

不面向物件

Excel 不面向物件,Power Fx 也是。 例如,在某些語言中,字串的長度表示為字串的屬性,例如 JavaScript 中的 “Hello World”。length。 Excel 和 Power Fx 則以函式形式將其表達為 Len( “Hello World” )。

具有屬性和方法的元件面向物件,Power Fx 可輕鬆使用它們。 但是,如果可能,我們更願意使用函式式方法。

可擴充套件

製作者可以使用 Power Fx 本身來建立元件和函式。 開發人員可以透過編寫 JavaScript 建立其元件和函式。

對開發人員友好

雖然製作者是我們的主要目標,但我們也嘗試儘可能對開發人員友好。 如果與前面描述的設計原則不衝突,那麼我們將以開發人員喜歡的方式來設計。 例如,Excel 沒有添加註釋的功能,因此我們使用類似於 C 的行和內聯註釋。

語言演變

不斷髮展的程式語言既必要又棘手。 每個人都—有理由—擔心更改可能破壞現有程式碼,而且需要使用者學習新模式,無論更改的背後有多大的好意。 Power Fx 十分重視後向相容性,但我們也堅信,雖然,我們不會總是在一開始就能做對,但我們會共同去了解作為一個社群怎樣做是最好的。 我們必須進行演變,Power Fx 從一開始就設計了對語言演變的支援。

儲存的每個 Power Fx 文件都包含一個語言版本標記。 如果我們要進行不相容的更改,我們會編寫稱之為“反向相容轉換器”的功能,在下次公式被編輯時自動重寫該公式。 如果更改是我們需要培訓使用者的主要內容,我們還將顯示一條訊息,其中包含指向文件的連結。使用此功能,我們仍然可以載入多年前使用 Power Apps 預覽版構建的應用,不管那之後發生了多少更改。

例如,我們引入了 ShowError 函式來顯示帶有紅色背景的錯誤橫幅。

Power Fx 微軟低程式碼開發平臺

雖然使用者喜歡它,但他們還請求我們提供一種顯示成功橫幅(綠色背景)或資訊性橫幅(藍色背景)的方法。 因此,我們提出了一個更通用的 Notify 函式,來為通知型別獲取第二個引數。 我們本來可以新增 Notify 並按原樣保留 ShowError,但是我們改為用 Notify 代替 ShowError。 我們刪除了以前一直使用的函式,用其他函式代替了它。 由於有兩種方法可以做同一件事,因此,這會引起混亂—特別是對於新使用者,最重要的是,這會增加複雜性。 沒有人抱怨,所有人都贊成此更改,然後遷移到下一個通知功能。

這是相同的應用在載入到最新版本的 Power Apps 中時的外觀。 使用者無需執行任何操作即可進行此轉換,它將在開啟應用時自動發生。

Power Fx 微軟低程式碼開發平臺

憑藉這一才能,Power Fx 可以比大多數程式語言更快、更進取。