Dela via


AsType- och IsType-funktioner

Gäller: Arbetsyteappar Modellbaserade appar Power Pages Power Platform CLI

Kontrollerar en postreferens för en specifik tabelltyp (IsType) och kontrollerar referensen som en typ (AsType).

Obs

PAC CLI pac power-fx-kommandon stöder inte IsType.

Description

Funktionerna AsType och IsType kan användas för att konvertera postreferenser (till exempel polymorfa uppslag i Dataverse) och objekt utan angiven typ till typifierade objekt som kan användas direkt.

Postreferenser

Läs mer Förstå postreferenser och polymorfa uppslag för en bredare introduktion och mer information.

Ett uppslagsfält refererar vanligtvis till poster i en viss tabell. Eftersom tabelltypen är väletablerad kan du komma åt fälten i uppslagsfältet med hjälp av en enkel dot notation. Till exempel, First( Accounts ).'Primary Contact'.'Full Name' går från tabellen Konton till posten Primär kontakt i fältet Kontakter och extraherar fältet Fullständigt namn.

Microsoft Dataverse stöder även polymorfiskt uppslagsfält som kan referera till poster från en uppsättning tabeller.

Sökfält Kan referera till
Ägare Användare eller Team
Kund Konton eller Kontakter
Ämne Konton, kontakter, kunskapsartiklar, etc.

I formler för arbetsyteappar använder du postreferenser för att arbeta med polymorfiska uppslag. Eftersom en postreferens kan referera till olika tabeller är det oklart vilka fält som är tillgängliga vid körning när man skriver en formel. Formatet Record.Field är inte tillgänglig. Dessa formler måste anpassas till posterna som programmet stöter på när det körs.

Funktionen IsType testar om en postreferens refererar till en viss tabelltyp. Funktionen returnerar boolesk TRUE eller FALSE.

AsType-funktionen används för att skapa en postreferens som en specifik tabelltyp, kallas även omvandling. Du kan använda resultatet som om det var en post i tabellen och använda formatet Record.Field för att komma åt alla fält för den posten. Ett fel uppstår om referensen inte är av en specifik typ.

Använd dessa funktioner tillsammans om du först vill testa en posts tabelltyp och sedan registrera den som en post av den typen så att fälten är tillgängliga:

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

Dessa funktioner behövs endast om man kommer åt fälten i en postreferens. Du kan till exempel använda postreferenser i funktionen Filter utan IsType eller AsType:

Filter( Accounts, Owner = First( Users ) )

På samma sätt kan du använda postreferenser med funktionen Patch:

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

Om det används i en postkontext, till exempel i kontrollen Gallery eller Edit form kanske du behöver använda global disambiguationsoperator för att referera till tabelltypen. Den här formeln gäller till exempel för ett galleri som visar en lista över kontakter där Företagsnamn är ett uppslag för Kund:

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

För båda funktionerna anger du typen via namnet på datakällan som är ansluten till tabellen. För att formeln ska fungera måste du också lägga till en datakälla i programmet för de typer som du vill testa eller omvandla. Du måste till exempel lägga till tabellen Användare som en datakälla om du vill använda IsType och AsType med uppslag Ägare och poster från den tabellen. Du kan endast lägga till de datakällor som du faktiskt använder i programmet. Du behöver inte lägga till alla tabeller som en sökning kan referera till.

Om postreferensen är tom returnerar IsType FALSE och AsType returnerar tom. Alla fält i en tom post blir också tomma.

Typlösa objekt

Viktigt

Ett typlöst objekt från ett webb-API eller funktionen [ParseJSON] måste konverteras till ett typat objekt innan det kan användas i Power Fx. Alternativen för att göra detta är:

  1. Skriv fältet implicit vid den punkt där det används. Ett objekt konverteras till exempel till ett tal om det används med operatorn +, om det kan konverteras till ett tal. Det här alternativet kan ge oväntade konverteringar och kan inte konvertera poster och tabeller som helhet.
  2. Skriv uttryckligen varje fält individuellt med funktionerna Decimal, Text, DateTime, GUID och andra typkonstruktorfunktioner. Detta är det mest invasiva för dina formler eftersom varje fält måste göras separat.
  3. Skriv uttryckligen JSON med det andra argumentet till funktionen ParseJSON. Det här är ett enkelt alternativ som gör att du slipper det typlösa objektet.
  4. Skriv uttryckligen ett objekt utan angiven typ med hjälp av funktionen AsType. Du kan också försöker konvertera typen innan du testar med funktionen IsType.

Syntax

AsType( RecordReference, TableType )

  • RecordReference – krävs. En postreferens, ofta ett uppslagsfält som kan referera till en post i någon av flera tabeller.
  • TableType - Obligatoriskt. Den specifika tabell som posten ska användas i.

AsType( UntypedObject, TypeSpecification )

  • UntypedObject – Krävs. En postreferens, ofta ett uppslagsfält som kan referera till en post i någon av flera tabeller.
  • TypeSpecification – Krävs. Ett typnamn eller en typspecifikation definierat med funktionen Typ.

IsType( RecordReference, TableType )

  • RecordReference – krävs. En postreferens, ofta ett uppslagsfält som kan referera till en post i någon av flera tabeller.
  • TableType - Obligatoriskt. Den specifika tabell som ska testas.

IsType( UntypedObject, TypeSpecification )

  • UntypedObject – Krävs. En postreferens, ofta ett uppslagsfält som kan referera till en post i någon av flera tabeller.
  • TypeSpecification – Krävs. Ett typnamn eller en typspecifikation definierat med funktionen Typ.

Exempel

Postreferenser

Kunskaper om postreferenser och polymorfa uppslag innehåller omfattande exempel.

  1. Skapa en tom arbetsyteapp för surfplattor.

  2. I det vänstra fönstret väljer du Data>Lägg till data. Lägg sedan till tabeller konton och kontakter.

    Tom app med två datakällor: konton och kontakter.

  3. I vänster ruta, välj + (Infoga) >Layout>Tomt lodrätt galleri.

    Infoga en gallerikontroll med en tom vertikal layout.

  4. Välj Anslut till data och välj Kontakter som datakälla.

  5. Ange galleriets layout till rubrik och underrubrik.

    Öppna layoutväljaren från egenskapsfönstret.

    Ställ in layout till titel och undertext.

  6. I fönstret Data, öppna listan Title1 och välj sedan Fullständigt namn.

    Ställ in titelvärde.

  7. Välj label-kontrollen Subtitle1.

    Ställ in undertexter.

  8. Ange egenskapen Text för Subtitle1 till denna formel:

    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'
    )
    

    Skärmen är nu klar med konton och kontakter blandade i galleriet.

    Underrubriken i galleriet visas följande värden:

    • "--" om 'Företagsnamn' är tomt.
    • "Konto: " och sedan fältet Kontonamn från tabellen Konton om fältet Företagsnamn refererar till ett konto.
    • "Konto: " och sedan fältet Fullständigt namn från tabellen Kontakter om fältet Företagsnamn refererar till en kontakt.

    Dina resultat kan skilja sig åt eftersom exempeldata kan ha ändrats för att visa fler typer av resultat.

Typlösa objekt

I följande exempel visas en enkel JSON-post som tolkas på olika sätt av ParseJSON, AsType och IsType i Pac CLI Power Fx REPL.

I det här första exemplet tillhandahålls ingen typinformation till ParseJSON så det returnerar ett typlöst objekt.

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

Fältet konverteras implicit till ett tal när det används i en numerisk kontext.

>> 1 + rec.a
2

Alternativt konverterar det här exemplet uttryckligen posten till en typad Power Fx-post med det andra argumentet till ParseJSON.

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

Och ett annat alternativ, det här exemplet konverterar uttryckligen posten till en typad Power Fx-post med hjälp av AsType.

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

Slutligen, om vi inte var säkra, testar det här exemplet typen innan den konverteras med funktionen IsType.

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