共用方式為


AsType 和 IsType 函式

適用於:畫布應用程式模型導向應用程式 Power Pages Power Platform CLI

檢查記錄參考是否為特定資料表類型 (IsType) 並將該參考視為該類型 (AsType)。

注意

PAC CLI pac power-fx 指令不支援 IsType

Description

AsTypeIsType 函數可用於將記錄參考 (例如 Dataverse 中的多態查詢) 和非類型化物件轉換為可直接使用的類型化物件。

記錄參考

閱讀 瞭解記錄參考和多態查閱 以取得更廣泛的簡介及更多詳細資料。

查詢欄位通常是指特定資料表中的記錄。 因為資料表類型已經建立,所以使用簡單的點符號就可以存取尋找的欄位。 例如,First( Accounts ).'Primary Contact'.'Full Name'帳戶資料表到連絡人資料表中主要連絡人記錄,然後擷取全名欄位。

Microsoft Dataverse 也支援多型查詢欄位,這類查詢欄位可以參考一組資料表中的記錄,如以下範例中所示。

查詢欄位 可參閱
所有人 使用者團隊
客戶 帳戶連絡人
相關 帳戶連絡人知識文章 等。

在畫布應用程式公式中,使用記錄參考來處理多型查詢。 由於記錄參考可以參考不同的表,因此在編寫公式時不清楚執行階段哪些欄位可用。 Record.Field 標記法不可用。 那些公式必須適應當應用程式執行時遇到的記錄。

IsType 函數測試記錄參考是否指向特定的資料表類型。 此函數傳回布林值 TRUE 或 FALSE。

AsType 函數將記錄參考視為特定的資料表類型,也稱為轉換。 您可以將結果當作資料表記錄使用,然後再次使用 Record.Field 標記法存取該記錄的所有欄位。 如果參考不是特定類型,就會發生錯誤。

將這些函數一起使用,以先測試記錄的資料表類型,然後將其視為該類型的記錄,這樣就可以使用欄位:

If( IsType( First( Accounts ).Owner, Users ),
    AsType( First( Accounts ).Owner, Users ).'Full Name',
    AsType( First( Accounts ).Owner, Teams ).'Team Name'
)

僅當存取記錄參考的欄位時才需要這些函數。 例如您可以在 Filter 函數中使用不含 IsTypeAsType 的記錄參考:

Filter( Accounts, Owner = First( Users ) )

同樣地,您可以使用含有 Patch 函數的記錄參考:

Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )

當在記錄上下文中使用時 (例如在 GalleryEdit 表單控制項中),可能需要全域消歧運算子來參考資料表類型。 例如此公式對顯示 Company NameCustomer 查閱的連絡人清單資源庫有效:

If( IsType( ThisItem.'Company Name', Accounts ),
    AsType( ThisItem.'Company Name', Accounts ).'Account Name',
    AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)

對於這兩個函數,透過連接到資料表的資料來源的名稱指定類型。 若要讓公式運作,您也必須將資料來源新增至要測試或強制轉換的任何類型應用程式。 例如,如果您想將 IsTypeAsTypeOwner 查詢和該資料表中的記錄一起使用,則必須新增使用者資料表做為資料來源。 您只能新增您在應用程式中實際使用的資料來源;您不需要新增查詢所參考的所有表格。

如果記錄參考為 空白ISTYPE 會傳回 FALSE,而 AsType 會返回 空白空白記錄的所有欄位也均為空白

非類型化物件

重要

來自 Web API 或 [ParseJSON 函數] 的非類型化物件需要轉換為類型化對象,然後才能在 Power Fx 中使用。 執行此操作的選項包括:

  1. 在使用欄位時隱式地輸入欄位。 例如,如果物件與 + 運算子一起使用,並且可以轉換為數字,則物件將轉換為數字。 此選項可能會發生意外的轉換,並且無法整體轉換記錄和表。
  2. 使用 DecimalTextDateTimeGUID 和其他類型建構函數明確地輸入每個欄位。 這對您的公式來說是最具侵入性的,因為每個欄位都必須單獨完成。
  3. 使用 ParseJSON 函數的第二個參數明確輸入 JSON。 這是一個簡單的選項,可以避免需要無類型物件。
  4. 使用 AsType 函數明確輸入非類型化物件。 您也可以在嘗試使用 IsType 函數進行轉換之前測試類型。

語法

AsType (RecordReferenceTableType)

  • RecordReference - 必要項目。 記錄參考通常是查詢欄位,可參考任何多資料表中的記錄。
  • TableType - 必要。 記錄應轉換到的特定資料表。

AsType ( UntypedObject, TypeSpecification )

  • UntypedObject - 必需。 記錄參考通常是查詢欄位,可參考任何多資料表中的記錄。
  • TypeSpecification - 必需。 使用 Type 函數定義的類型名稱或類型規格。

IsType (RecordReferenceTableType)

  • RecordReference - 必要項目。 記錄參考通常是查詢欄位,可參考任何多資料表中的記錄。
  • TableType - 必要。 要測試的特定資料表。

IsType( UntypedObjectTypeSpecification )

  • UntypedObject - 必需。 記錄參考通常是查詢欄位,可參考任何多資料表中的記錄。
  • TypeSpecification - 必需。 使用 Type 函數定義的類型名稱或類型規格。

範例

記錄參考

瞭解記錄參考和多態查閱 包含大量範例。

  1. 為平板電腦建立空白的畫布應用程式。

  2. 在左窗格中,選取資料>新增資料。 然後新增帳戶連絡人資料表。

    含有兩個資料來源的空白應用程式:帳戶和連絡人。

  3. 在左窗格中,選取 + (插入) >版面配置>空白垂直資源庫

    插入含有空白垂直版面配置的資源庫控制項。

  4. 選取連接至資料,然後選取連絡人做為資料來源。

  5. 將資源庫的版面配置設定為 標題和副標題

    從屬性窗格中開啟版面配置選取器。

    將版面配置設定為標題和副標題。

  6. Data 窗格中,開啟 Title1 清單,然後選取 Full Name

    設定標題值。

  7. 選取 Subtitle1 label 控制項。

    設定字幕值。

  8. Subtitle1Text 屬性設定為以下公式︰

    If( IsBlank( ThisItem.'Company Name' ), "--",
        IsType( ThisItem.'Company Name', Accounts ),
            "Account: " & AsType( ThisItem.'Company Name', Accounts ).'Account Name',
        "Contact: " & AsType( ThisItem.'Company Name', Contacts ).'Full Name'
    )
    

    畫面控制項現在完全顯示資源庫中的帳戶和連絡人。

    資源庫中的字幕顯示這些值:

    • "--" 如果 'Company Name'空白
    • 如果公司名稱欄位參考帳戶,則為「帳戶:」,然後是帳戶資料表中的帳戶名稱欄位。
    • 如果公司名稱欄位參考連絡人,則為「連絡人:」,然後是連絡人資料表中的全名欄位。

    您的結果可能會有所不同,因為樣本資料可能已被修改以顯示更多類型的結果。

無類型對象

以下範例展示了 Pac CLI Power Fx REPL 中的 ParseJSONAsTypeIsType 以各種方式解釋的簡單 JSON 記錄。

在第一個例子中,沒有向 ParseJSON 提供類型資訊,因此它傳回一個無類型物件。

>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Untyped: Use Value, Text, Boolean, or other functions to establish the type>

在數字上下文中使用時,該欄位會隱式轉換為數字。

>> 1 + rec.a
2

作為替代方案,此範例使用 ParseJSON 的第二個參數將記錄明確轉換為類型化的 Power Fx 記錄

>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}

另一種選擇是,此範例使用 AsType 明確將記錄轉換為類型 Power Fx 記錄。

>> AsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
{a:1}

最後,如果我們不確定,此範例會在使用 IsType 函數轉換類型之前測試該類型。

>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true