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
- Het gebruik van AsType en IsType met niet-getypeerde objecten is een experimentele functie.
- Experimentele functies zijn niet bedoeld voor productiegebruik en zijn mogelijk niet volledig. Deze functies zijn beschikbaar voor een officiële release zodat u vroeg toegang kunt krijgen en feedback kunt geven. Meer informatie: Experimentele, preview- en buiten gebruik gestelde functies in canvas-apps begrijpen
- Het gedrag dat in dit artikel wordt beschreven, is alleen beschikbaar wanneer de experimentele functie Door gebruiker gedefinieerde typen in Instellingen > Aanstaande functies > Experimenteel is ingeschakeld (deze is standaard uitgeschakeld).
- Uw feedback is waardevol voor ons. Laat via het Power Apps-communityforum voor experimentele functies weten wat u ervan vindt.
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:
- 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. - 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.
- Typ expliciet JSON bij het tweede argument van de functie ParseJSON. Dit is een eenvoudige optie waarbij het niet-getypeerde object niet nodig is.
- 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.
Maak een lege canvas-app voor tablets.
Selecteer in het linkerdeelvenster de optie Gegevens>Gegevens toevoegen. Voeg vervolgens de tabellen Accounts en Contactpersonen toe.
Selecteer in het linkerdeelvenster + (Invoegen) >Lay-out>Lege verticale galerie.
Selecteer Verbinding maken met gegevens en selecteer vervolgens Contactpersonen als de gegevensbron.
Stel de lay-out van de galerie in op Titel en ondertitel.
In het deelvenster Gegevens opent u de lijst Titel 1 en selecteert u Voor- en achternaam.
Selecteer het labelbesturingselement Subtitel 1.
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' )
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