Delen via


De functies AsType en IsType

Van toepassing op: Canvas-apps Modelgestuurde apps Power Pages Power Platform CLI

Controleert of een recordverwijzing een specifiek tabeltype (IsType) is en behandelt de verwijzing als dat type (AsType).

Notitie

Opdrachten PAC CLI pac power-fx ondersteunen IsType niet.

Omschrijving

De functies AsType en IsType kunnen worden gebruikt om recordverwijzingen (bijvoorbeeld polymorfe opzoekacties in Dataverse) en niet-getypeerde objecten om te zetten in getypeerde objecten die direct kunnen worden gebruikt.

Referenties vastleggen

Lees Recordverwijzingen en polymorfe zoekopdrachten voor een uitgebreidere introductie en meer details.

Een opzoekveld verwijst meestal naar records in een bepaalde tabel. Omdat het tabeltype goed ingeburgerd is, kunnen de velden van de opzoekactie worden geopend met behulp van een eenvoudige puntnotatie. Bijvoorbeeld First( Accounts ).'Primaire contactpersoon'.'Volledige naam' gaat van de tabel Accounts naar de record Primaire contactpersoon in de tabel Contactpersonen en extraheert het veld Volledige naam.

Microsoft Dataverse ondersteunt ook polymorfe opzoekvelden, die kunnen verwijzen naar records uit een reeks tabellen, zoals in deze voorbeelden.

Opzoekveld Kan verwijzen naar
Eigenaar Gebruikers of Teams
Klanten Accounts of Contactpersonen
Betreft Accounts, Contactpersonen, Kennisartikelen, enzovoort.

Gebruik in canvas-appformules recordreferenties om met polymorfe zoekopdrachten te werken. Omdat een recordverwijzing naar verschillende tabellen kan verwijzen, weet is onduidelijk welke velden beschikbaar zijn tijdens runtime wanneer u een formule schrijft. De notatie Record.Field is niet beschikbaar. Die formules moeten zich aanpassen aan de records die de app tegenkomt wanneer deze wordt uitgevoerd.

De functie IsType test of een recordverwijzing naar een specifiek tabeltype verwijst. De functie retourneert een booleaanse waarde: TRUE of FALSE.

De functie AsType behandelt een recordverwijzing als een specifiek tabeltype, ook wel casting genoemd. U kunt het resultaat gebruiken alsof het een record van de tabel is en opnieuw de notatie Record.Veld gebruiken om toegang te krijgen tot alle velden van deze record. Er treedt een fout op als de verwijzing niet van het specifieke type is.

Gebruik deze functies samen om eerst het tabeltype van een record te testen en behandel het dan als een record van dat type zodat de velden beschikbaar zijn:

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

Deze functies zijn alleen nodig bij gebruik van de velden van een recordverwijzing. U kunt recordverwijzingen bijvoorbeeld gebruiken in de functie Filter zonder IsType of AsType:

Filter( Accounts, Owner = First( Users ) )

Evenzo kunt u recordverwijzingen gebruiken met de functie Patch:

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

Indien gebruikt in een recordcontext, zoals binnen een besturingselement Gallery of Edit form, moet u mogelijk de algemene ondubbelzinnigheidsoperator gebruiken om naar het tabeltype te verwijzen. Deze formule zou bijvoorbeeld effectief zijn voor een galerie waarin een lijst wordt weergegeven van contacten waarbij Bedrijfsnaam een zoekopdracht voor Klant:

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

Geef voor beide functies het type op via de naam van de gegevensbron die aan de tabel is gekoppeld. De formule werkt alleen als u ook een gegevensbron aan de app toevoegt voor alle typen die u wilt testen of casten. U moet bijvoorbeeld de tabel Gebruikers toevoegen als een gegevensbron als u IsType en AsType wilt gebruiken met een opzoekveld Eigenaar en records uit die tabel. U kunt alleen de gegevensbronnen toevoegen die u daadwerkelijk in uw app gebruikt. U hoeft niet alle tabellen toe te voegen waarnaar een opzoekactie zou kunnen verwijzen.

Als de recordverwijzing leeg is, retourneert IsType FALSE en retourneert AsTypeleeg. Alle velden van een lege record zijn eveneens leeg.

Niet-getypeerde objecten

Belangrijk

Een niet-getypeerd object van een web-API of de [functie ParseJSON] moet worden omgezet naar een getypeerd object voordat het kan worden gebruikt in Power Fx. Mogelijkheden hiervoor zijn:

  1. Typ impliciet het veld op het punt dat het gebruikt wordt. Een object wordt bijvoorbeeld geconverteerd naar een getal bij gebruik met de operator +, als het naar een getal kan worden geconverteerd. Deze optie kan onverwachte conversies tot gevolg hebben en kan records en tabellen niet als geheel converteren.
  2. Typ elk veld afzonderlijk expliciet met de constructorfuncties Decimal, Text, DateTime, GUID en andere typen. Dit is de meest ingrijpende wijziging in uw formules, omdat elk veld afzonderlijk moet worden ingevuld.
  3. Typ expliciet JSON bij het tweede argument van de functie ParseJSON. Dit is een eenvoudige optie waarbij het niet-getypeerde object niet nodig is.
  4. Typ expliciet een object zonder type met behulp van de functie AsType. U kunt het type ook testen voordat u de conversie uitvoert met de functie IsType .

Syntaxis

AsType( RecordReference, TabelType )

  • RecordReference: vereist. Een recordverwijzing, vaak een opzoekveld dat kan verwijzen naar een record in meerdere tabellen.
  • TableType - Vereist. De specifieke tabel waarnaar de record moet worden gecast.

AsType( UntypedObject, TypeSpecification )

  • UntypedObject: vereist. Een recordverwijzing, vaak een opzoekveld dat kan verwijzen naar een record in meerdere tabellen.
  • TypeSpecification: vereist. Een typenaam of typespecificatie die is gedefinieerd met de functie Type.

IsType( RecordReference, TableType )

  • RecordReference: vereist. Een recordverwijzing, vaak een opzoekveld dat kan verwijzen naar een record in meerdere tabellen.
  • TableType - Vereist. De specifieke tabel waarvoor u wilt testen.

IsType( UntypedObject, TypeSpecification )

  • UntypedObject: vereist. Een recordverwijzing, vaak een opzoekveld dat kan verwijzen naar een record in meerdere tabellen.
  • TypeSpecification: vereist. Een typenaam of typespecificatie die is gedefinieerd met de functie Type.

Voorbeelden

Referenties vastleggen

Recordverwijzingen en polymorfe zoekopdrachten bevat uitgebreide voorbeelden.

  1. Maak een lege canvas-app voor tablets.

  2. Selecteer in het linkerdeelvenster de optie Gegevens>Gegevens toevoegen. Voeg vervolgens de tabellen Accounts en Contactpersonen toe.

    Lege app met twee gegevensbronnen: accounts en contactpersonen.

  3. Selecteer in het linkerdeelvenster + (Invoegen) >Lay-out>Lege verticale galerie.

    Een besturingselement Gallerie invoegen met een lege verticale lay-out.

  4. Selecteer Verbinding maken met gegevens en selecteer vervolgens Contactpersonen als de gegevensbron.

  5. Stel de lay-out van de galerie in op Titel en ondertitel.

    De lay-outkiezer in het eigenschappenvenster openen

    De lay-out instellen op Titel en ondertitel

  6. In het deelvenster Gegevens opent u de lijst Titel 1 en selecteert u Voor- en achternaam.

    Waarde van Titel instellen

  7. Selecteer het labelbesturingselement Subtitel 1.

    Waarde van subtitel instellen

  8. Stel de eigenschap Text van Subtitel 1 in op deze formule:

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

    Het scherm is nu compleet met accounts en contacten die in de galerie zijn vermengd

    De ondertitel in de galerie toont deze waarden:

    • "--" als Bedrijfsnaamleeg is.
    • "Account: " en dan het veld Accountnaam uit de tabel Accounts als het veld Bedrijfsnaam verwijst naar een account.
    • "Contactpersoon: " en dan het veld Volledige naam uit de tabel Contactpersonen als het veld Bedrijfsnaam verwijst naar een contactpersoon.

    Uw resultaten kunnen afwijken omdat de voorbeeldgegevens mogelijk zijn aangepast om meer typen resultaten weer te geven.

Niet-getypeerde objecten

De volgende voorbeelden tonen een eenvoudige JSON-record die op verschillende manieren wordt geïnterpreteerd door ParseJSON, AsType en IsType in de Pac CLI Power Fx REPL.

In dit eerste voorbeeld wordt er geen type-informatie verstrekt aan ParseJSON, dus wordt er een niet-getypeerd object geretourneerd.

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

Het veld wordt impliciet omgezet naar een getal wanneer het in een numerieke context wordt gebruikt.

>> 1 + rec.a
2

Als alternatief converteert dit voorbeeld de record expliciet naar een getypeerde Power Fx-record met het tweede argument voor ParseJSON.

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

En nog een alternatief: dit voorbeeld converteert de record expliciet naar een getypeerde Power Fx-record met behulp van AsType.

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

Bij twijfel testen we dit voorbeeld het type voordat het wordt geconverteerd met de functie IsType.

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