Vejledning til sprogreference
Microsoft Dynamics 365 har sit eget indholdsrige og udtryksrige sprog, som kan hjælpe dig med at definere og udtrykke din strategi mod svindel. Dette sprog har mange lighedspunkter med C# og SQL og er designet til at give dig den styrke og fleksibilitet, du skal bruge til at håndtere svindel i dine særlige forretningsscenarier.
Du kan bruge dette sprog i dag til at definere regler og hastigheder. Du kan få flere oplysninger under Administrere regler og Udføre hastighedskontroller.
Denne sprogreferencevejledning indeholder den fuldstændige liste over operatorer, funktioner og opgørelser, der udgør sproget:
- Opgørelser
- Beslutningsfunktioner
- Handlingsfunktioner
- Observationsfunktioner
- Modelfunktioner
- Funktioner, der registrerer volapyk
- Enhedsattributfunktioner
- Referere til attributter og variabler
- Logiske operatorer
- Listefunktioner
- Sammenligningsoperatorer
- BIN-opslagsfunktioner
- Geografiske funktioner
- Strengfunktioner
- Matematiske funktioner
- Typetildelingsoperatorer
- DateTime-funktioner
- Aggregeringsfunktioner
- Funktioner for globale variabler
Vejledningen dækker også andre artikler. Her er nogle eksempler:
Opgørelser
Sætningssyntaks | Betegnelse | Eksempel |
---|---|---|
LET <VariableName> = <Expression> | En LET-sætning bruges til at definere en ny variabel. Området for variablen er den regel eller det hastighedssæt, som den er defineret i. Variabelnavne skal have et præfiks med et dollartegn ($). Yderligere oplysninger finder du i Definere dine egne variabler. Et vilkårligt antal LET-sætninger kan bruges i afsnittet Betingelse og sætningerne for alle regeltyper og sæt af værdier. |
LET $fullName = @"user.firstName" + @"user.lastName" |
OBSERVE OBSERVE <ObservationFunction>(<KeyValuePairs>) |
En OBSERVE-sætning afslutter ikke kørslen af reglen med beslutning. Det logfører blot nøgleværdipar til enten API-svaret eller sporingsloggen. De efterfølgende regler og regeludtog fortsætter med at køre, indtil en RETURN-opgørelse er nået. En OBSERVE-sætning skal efterfølges af en eller flere observationsfunktioner. Hvis en WHEN-sætning vises og evalueres til False, logføres OBSERVE-sætningen ikke. Der kan maksimalt bruges én til hver sætning i følgende regler:
|
OBSERVE Output(reason="high score") OBSERVE TRACE(ip=@"device.ipAddress") WHEN @"riskscore"> 400 |
RETURN <DecisionFunction> [ ,<ObservationFunction>(<KeyValuePairs>) ] [ WHEN <BooleanExpression> ] |
En RETURN-sætning afslutter en regeludførelse med en beslutning. Sætningen skal angive en gyldig beslutningsfunktion: Approve(), Reject(), Challenge() eller Review(). Sætningen kan også angive en eller flere observationsfunktioner: Output() eller Trace() Endelig kan opgørelsen indeholde et WHEN-udtryk for at angive den betingelse, som det skal gøre et af de foregående. Der kan maksimalt bruges én til hver sætning i følgende regler:
|
RETURN Review() RETURN Reject(), Trace(ip=@"device.ipAddress") WHEN @"riskscore"> 400 |
ROUTETO QUEUE <QueueName> [ WHEN <BooleanExpression> ] |
ROUTETO-kommandoen bruges i ruteregler til at dirigere tilsvarende vurderinger til sagsstyringskøer. Den valgfrie WHEN-sætning kan bruges til at beskrive de betingelser, som kommandoen skal udføre ruten under. Der kan maksimalt bruges én til hver sætning i ruteregler. |
ROUTETO Queue("High Value Queue") WHEN @"purchase.request.totalAmount"> 500 |
SELECT <AggregationFunction> AS <VelocityName> FROM <AssesmentType> GROUPBY <GroupExpression> [ WHEN <BooleanExpression> ] |
En SELECT-sætning bruges i en hastighed til at definere en hastighed. Der skal angives en aggregeringsfunktion. Den krævede AS-sætning bruges til at oprette et alias til din hastighed. Der kan derefter refereres til dette alias fra regler. Den krævede FROM-sætning bruges til at angive en vurdering, der skal observeres en hastighed for. Gyldige værdier er Purchase, AccountLogin, AccountCreation, Chargeback, BankEvent og CustomAssessment. Den krævede GROUPBY-sætning angiver en egenskab eller et udtryk. Alle hændelser, der evalueres til den samme værdi i GROUPBY-sætningen, kombineres for at beregne den aggregering, der er angivet i SELECT-sætningen. Hvis du f.eks. vil beregne en aggregering for hver bruger, skal du bruge GROUPBY @"user.userId". Den valgfrie WHEN-sætning angiver et Boolesk udtryk, der bestemmer, om den vurdering, der behandles, skal medtages i den hastighed, der defineres. Der kan maksimalt bruges én til hver sætning i hastighedssæt. |
SELECT antal() AS _Purchase_Rejections_Per_Email SELECT DistinctCount(@"purchaseId") |
WHEN <BooleanExpression> | NÅR WHEN-opgørelsen er som WHEN-udtryk for de andre opgørelser, men den står alene i afsnittet Betingelse med regler og sæt. Den angiver en Boolesk betingelse, der bestemmer, om hele reglen, regelsættet eller rutereglen skal køres. Det kan maksimalt være én i afsnittet Betingelse for alle regeltyper og regelsæt. |
WHEN @"riskscore"> 400 |
DO <-handlingsfunktion> | En DO-sætning bruges til at udføre en eller anden handling ved afslutningen af regeludførelsen. Denne erklæring kan kun bruges til handlinger efter beslutning og skal efterfølges af en handlingsfunktion | DO SetResponse(name = @"fornavn" + @"efternavn") |
Beslutningsfunktioner
Beslutningsfunktioner bruges i regler til at angive en beslutning.
Beslutningstype | Betegnelse | Eksempel |
---|---|---|
Approve() | Denne type angiver beslutningen Godkend. Den kan indeholde en årsag til godkendelsen og en anden understøttende meddelelse. Overbelastninger:
|
RETURN Approve() RETURN Approve("på sikker liste") RETURN Approve ("på sikker liste", "eskaler ikke") |
Reject() | Denne type angiver beslutningen Afvis. Den kan indeholde en årsag til afvisningen og en anden understøttende meddelelse. Overbelastninger:
|
RETURN Reject() RETURN Reject("embargoland") RETURN Reject("embargoland", "eskaler ikke") |
Review() | Denne type angiver beslutningen Gennemgå. Den kan indeholde en årsag til gennemgangen og en anden understøttende meddelelse. Overbelastninger:
|
RETURN Review() RETURN Review("bruger på følgeliste") RETURN Review("bruger på følgeliste", "eskaler ikke") |
Challenge(String challengeType) | Denne type angiver beslutningen Udfordr og en udfordringstype. Den kan også indeholde en årsag til udfordringen og en anden understøttende meddelelse. Overbelastninger:
|
RETURN Challenge ("SMS") RETURN Challenge ("SMS", "mistænkelig robot") RETURN Challenge ("SMS", "mistænkelig robot ","eskaler ikke") |
Handlingsfunktioner
Handlingsfunktioner bruges til at angive den handling, der skal udføres i en handlingsregel efter beslutningen.
Handlingstype | Betegnelse | Eksempel |
---|---|---|
SetResponse(String sectionName, k=v) | Denne funktion kan bruges til at overføre nøgleværdipar til afsnittet CustomProperties i API-svar. Du kan angive navnet på et underafsnitssektionsnavn for de nøgleværdier, som par skal indgå i. Overbelastninger: • SetResponse(k=v) |
SetResponse("Scores", bot = Model.Bot(@deviceContextId), risk=Model.Risk()) SetResponse(test="123") |
Observationsfunktioner
Observationsfunktioner kan bruges til at tage data fra den aktuelle kontekst og skrive dem et andet sted.
Returtype | Betegnelse | Eksempel |
---|---|---|
Output(k=v) | Denne funktion kan bruges til at overføre nøgle/værdipar i API-svar. | Output(key="test", email=@"user.email", countryRegion=Geo.CountryRegion(@"device.ipAddress")) |
Trace(k=v) | Denne funktion kan bruges til at udløse en sporingshændelse og sende nøgleværdipar til navneområdet for hændelsessporing for FraudProtection.Trace.Rule. | Trace(key="Manual Review", ip=@"device.ipAddress") |
Modelfunktioner
Modelfunktioner kører de forskellige svindelmodeller og er nyttige, når din vurdering ikke kører en eller flere svindelmodeller automatisk. Når modelfunktioner køres, er oplysningerne om den model, der kører under regelevaluering, output i API-kaldet til vurdering af svindel. Derefter får reglen adgang til modelresultatet, herunder score, årsager osv., som kan bruges til videre behandling af regler og beslutningstagning.
Modeltype | Beskrivende tekst | Eksempel |
---|---|---|
Risiko | Vurderer sandsynligheden for, at en session er risikabel. | Model.Risk() |
Robot | Vurderer sandsynligheden for, at en session er startet af en robot. Bestået i et enhedskontekst-id, der er sendt til Fraud Protection-enhedsfingeraftryksløsningen. | Model.Bot(@deviceContextId) |
Funktioner, der registrerer volapyk
Disse funktioner hjælper med at forhindre svindel ved hurtigt og effektivt at registrere, om vigtige brugerinputfelter (f.eks. navne og adresser) indeholder volapyk.
Funktion | Beskrivende tekst | Eksempel |
---|---|---|
GetPattern(String).maxConsonants | Det maksimale antal sammenhængende konsonanter i en streng, der ikke er adskilt af en vokal. MaxConsonants for strengen "01gggyturah" er f.eks. 5. | GetPattern(@"user.email").maxConsonants |
GetPattern(String).gibberScore | ML-baseret score mellem 0 og 1. 0 betyder, at det mest sandsynligt er volapyk, og 1 betyder, at det mindst sandsynligt er volapyk. | GetPattern(@"user.email").gibberScore |
Bemærk
Modellen til registrering af volapyk er baseret på hyppigheden af to på hinanden følgende alfanumeriske tegn i offentligt tilgængelige engelske dokumenter. Det antages, at des hyppigere to på hinanden følgende alfanumeriske tegn forekommer i offentlige dokumenter, des mindre er sandsynligheden for, at det er volapyk. Modellen skal give rimelige scorer for engelske tekster og kan bruges til at opdage, om navnene eller adresserne indeholder volapyk. Men modellen er muligvis ikke egnet til forkortelser, f.eks. den korte form for stater (AZ, TX osv.), og den kan heller ikke bruges til at validere navne eller adresser. Endelig er modellen ikke testet for ikke-engelske tekster.
Enhedsattributfunktioner
Operator | Beskrivende tekst | Eksempel |
---|---|---|
Device.GetAttributes(String sessionId) | Returnerer valgte enhedsattributter fra enhedsfingeraftryk. De valgte enhedsattributter er udvalgt af Fraud Protection og er et sæt attributter, der ofte bruges i regler. | Device.GetAttributes(@"deviceContext.deviceContextId).attribute_name |
Device.GetFullAttributes(String sessionId) | Returnerer et fuld sæt enhedsattributter fra enhedsfingeraftryk. Brug kun denne funktion, når det er nødvendigt for at få adgang til hele sættet af enhedsattributter. Du kan få vist hele sættet af enhedsattributter under Konfigurere enhedsfingeraftryk. | Device.GetFullAttributes(@"deviceFingerprinting.id").attribute_name |
Referere til attributter og variabler
Du kan bruge snabel-a-tegnet (@) som operator til at referere til en attribut fra den aktuelle hændelse.
Variabel | Betegnelse | Eksempel |
---|---|---|
@ | Der bruges et snabel a-tegn (@) til at referere til en attribut fra den indgående hændelse. Attributten sendes muligvis som en del af anmodningens nyttedata, eller den genereres af Microsoft Dynamics 365 Fraud Protection. Efter snabel a-tegnet (@) skal du angive den fulde sti for den attribut, du vil referere til. Indsæt stien i anførselstegn (f.eks. @"adresse.by"). Hvis den attribut, der refereres til, ikke er en del af hændelsesnyttedataene, returneres standardværdien: 0,0 for dobbelt, tom streng for strenge osv. Typen af denne attribut udledes af den kontekst, den bruges i. Hvis der ikke angives en tilstrækkelig kontekst, bruges Streng som standardtype. Du kan finde flere oplysninger om typeudledning under Typeudledning af attributter. |
@"adresse.by" |
$ | Et dollartegn ($) bruges til at referere til en variabel, der er defineret i en LET-sætning . Yderligere oplysninger finder du i Definere dine egne variabler. | $fullName |
@"botScore" | Ved alle hændelser af kontooprettelse eller kontologon genererer Fraud Protections AI-modeller en robotscore mellem 0 og 999. En højere score angiver en højere sandsynlighed for, at hændelsen blev startet af en robot. Du kan bruge @botScore til at henvise til denne score i klausuler til efterrobotscoring og klausuler til efterrisikoscoring. |
@"botScore" |
@"riskScore" | Ved alle hændelser for købs- eller kontobeskyttelse genererer Fraud Protections AI-modeller en risikoscore mellem 0 og 999. Et højere resultat angiver en højere risiko. Du kan bruge @riskScore til at henvise til denne score i klausuler til efterrisikoscore. |
@"riskScore" |
@a[x] | Denne variabel bruges til indeksering af matrixvariabler. Hvis anmodningens nyttedata for en vurdering indeholder en matrix af varer, kan du få adgang til individuelle elementer i matrixen ved hjælp af følgende syntaks: @"productList[0]". Hvis du vil have adgang til en attribut for det pågældende element, skal du bruge følgende syntaks: @"productList[0].productId" |
@"productList[0].productId" @"paymentInstrumentList[3].type" |
Exists | Denne operator kontrollerer, om der findes en variabel i hændelsens nyttedata. Exists(String variable) |
Exists(@"user.email") |
Svar.beslutning() | Denne funktion refererer til beslutningen for den aktuelle vurdering, der evalueres. | Response.Decision() == "Godkend" |
Request.CorrelationId() | Denne funktion refererer til det entydige korrelations-id for den hændelse, der evalueres. Du kan bruge denne funktion til at få adgang til korrelations-id'et for en hændelse i regeloplevelsen og videregive den til et eksternt opkald som en parameter eller en overskrift. | External.MyExternalCall(Request.CorrelationId()) |
.GetDiagnostics() | Denne funktion kan bruges til at opdage vigtige diagnostiske oplysninger og fejlfindingsoplysninger fra et eksternt opkald eller et eksternt vurderingssvar. Diagnostics-objektet for et eksternt opkald indeholder Anmodningsnyttedata, Slutpunkt, HTTP-statuskode, Fejlmeddelelse og Ventetid. Slutpunkt er ikke tilgængeligt i objektet Diagnostic for et eksternt vurderingssvar. Alle disse felter kan bruges i reglerne, når diagnosticeringsobjektet er oprettet ved hjælp af den tilsvarende udvidelsesmetode". Hentdiagnostics()" | LET $extResponse = External. myCall(@"device.ipAddress") LET $extResponseDiagnostics = $extResponse.GetDiagnostics() OBSERVE Output(Diagnostics = $extResponseDiagnostics ) WHEN $extResponseDiagnostics. HttpStatusCode != 200 |
Logiske operatorer
Operator | Beskrivende tekst | Eksempel |
---|---|---|
and (&&) | Logisk Og | @"riskScore" > 500 && @"riskScore"< 800 @"riskScore" > 500 and @"riskScore"< 800 |
eller (||) | Logisk Eller | @"email.isEmailUsername" == false || @"email.isEmailValidated" == false @"email.isEmailUsername" == false eller @"email.isEmailValidated" == false |
not | Logisk negation | @"email.isEmailUsername" not(!) @"email.isEmailUsername" |
Listefunktioner
Fraud Protection giver dig mulighed for at uploade brugerdefinerede lister og referere til dem på sproget.
Du kan finde oplysninger om upload af lister i Administrere lister. Du kan finde flere oplysninger om, hvordan du bruger lister i regler, i afsnittet Bruge lister i regler senere i denne artikel.
Operator | Beskrivende tekst | Eksempel |
---|---|---|
ContainsKey( String listName, String columnName, String key) |
Denne operator kontrollerer, om der findes en nøgle i den angivne kolonne på en Fraud Protection-liste. | ContainsKey("Email Support List", "Emails", @"user.email") I dette eksempel kontrolleres det, om kolonnen "Mails" på listen "Mailsupportliste" indeholder variablen @"user.email". |
Lookup( String listName, String keyColName, String valueColName) |
Denne operator søger efter værdien af en nøgle på en Fraud Protection-liste. Både navnet på den kolonne, som indeholder nøglen, og navnet på den kolonne, som indeholder værdien, skal angives. Værdien returneres altid som en streng. Hvis nøglen ikke findes, og parameteren defaultValue ikke er angivet, returneres "Ukendt". |
Lookup("Email Support List", "Emails", @"user.email", "Status",0) Dette eksempel søger efter variablen @"user.email" i kolonnen "Mails" på listen "Mailsupportliste" og returnerer den tilsvarende værdi i kolonnen "Status". Hvis nøglen ikke findes på listen, returnerer Fraud Protection 0. |
LookupClosest( String listName, String keyColumnName, String key, String valueColumnName, String defaultValue) |
Denne operator søger efter værdien af en nøgle på en Fraud Protection-liste. Hvis nøglen ikke findes, returneres værdien for den nøgle, der er tættest i alfabetet på den nøgle, du søger efter. Overbelastninger:
|
LookupClosest("IP Addresses", "IP", @"device.ipAddress", "City") == "Seattle" Dette eksempel søger efter variablen@ipAddress i kolonnen "IP" på listen "IP-adresser" og returnerer den tilsvarende værdi i kolonnen "By". Hvis @ipAddress ikke findes på listen, returnerer udtrykket værdien af den næste nærmeste IP-adresse på listen. |
Indeholdt | Denne operator kontrollerer, om der er indeholdt en nøgle i en kommasepareret liste med værdier. I(streng nøgle, streng liste) |
In(@"user.countryRegion", "US, MX, CA") |
Sammenligningsoperatorer
Fraud Protection understøtter alle C#-standardoperatorer for Sammenligning og Lighed. Denne tabel indeholder nogle eksempler på operatorer, du kan finde nyttige. Hvis disse operatorer anvendes på strenge, resulterer det i leksikografiske sammenligninger.
Operator | Beskrivende tekst | Eksempel |
---|---|---|
== | Denne operatør kontrollerer for lighed. | @"user.countryRegion" == @"shippingAddress.countryRegion" |
!= | Denne operatør kontrollerer for ulighed. | @"user.countryRegion" != @"shippingAddress.countryRegion" |
> | Denne operator kontrollerer, om den første værdi er større end den anden værdi. | @"riskScore"> 500 |
< | Denne operator kontrollerer, om den første værdi er mindre end den anden værdi. | @"riskScore"< 500 |
>= | Denne operator kontrollerer, om den første værdi er større end eller lig med den anden værdi. | @"riskScore">= 500 |
<= | Denne operator kontrollerer, om den første værdi er mindre end eller lig med den anden værdi. | @"riskScore"<= 500 |
BIN-opslagsfunktioner
BIN-opslagsfunktioner indeholder oplysninger om betalingskortkonto (f.eks. kortnetværk, korttype, kortlandekode, kortkategori) baseret på bankens id-nummer (BIN). Data til BIN-opslag stammer fra førende bin-dataprovidere fra tredjepart og kurateres derefter af Fraud Protection.
Operator | Beskrivende tekst | Eksempel |
---|---|---|
BIN.Lookup(String BIN).cardNetwork | Denne funktion slår BIN op og returnerer kortnetværket (f.eks. Visa, Mastercard). |
BIN.Lookup(@"card.bin").cardNetwork |
BIN.Lookup(String BIN).cardType | Denne operator søger i BIN og returnerer korttypen (f.eks. Debet, Kredit). |
BIN.Lookup(@"card.bin").cardType |
BIN.Lookup(String BIN).issuer | Denne operator søger i BIN og returnerer udstedende organisation. |
BIN.Lookup(@"card.bin").issuer |
BIN.Lookup(String BIN).countryCode | Denne operator søger i BIN og returnerer kortets ISO-landekode på to bogstaver. |
BIN.Lookup(@"card.bin").countryCode |
BIN. Lookup(String BIN).cardCategory | Denne operator slår BIN op og returnerer kortkategorien (f.eks. Forudbetalt, Firma, Belønninger). |
BIN. Opslag(@"card.bin").cardCategory |
BIN.Lookup(String BIN).error | Denne operator slår BIN op og returnerer en fejlmeddelelse, hvis BIN ikke blev fundet. |
BIN.Lookup(@"card.bin").error |
Geografiske funktioner
Geografiske funktioner giver en løsning ved at konvertere en IP-adresse til en geografisk adresse. Adgang til funktioner kan kun aktiveres i regler ved hjælp af IP'er, der er del af transaktionsnyttedata, eller som indsamles af Fraud Protection ved hjælp af Enhedsfingeraftryk. Geografiske funktioner kan ikke aktiveres for tilfældige IP-værdier.
Operator | Beskrivende tekst | Eksempel |
---|---|---|
Geo.RegionCode(String ip) | Denne operator konverterer en IPv4-adresse til den amerikanske regionskode (dvs. forkortelsen for navnet på en stat eller et territorium i USA). For en IP-adresse i staten Washington returneres f.eks. "WA". |
Geo.RegionCode(@"device.ipAddress") |
Geo.Region(String ip) | Denne operator konverterer en IPv4-adresse til dens amerikanske region (dvs. navnet på en stat eller et territorium i USA). For en IP-adresse i staten Washington returneres f.eks. "Washington". |
Geo.Region(@"device.ipAddress") |
Geo.CountryCode(String ip) | Denne operator konverterer en IPv4-adresse til lande-/områdekoden. For en IP-adresse i staten Australien returneres f.eks. "AU". |
Geo.CountryCode(@"device.ipAddress") |
Geo.CountryRegion(String ip) | Denne operator konverterer en IP-adresse til et områdenavn. For en IP-adresse i staten Australien returneres f.eks. "Australien". |
Geo.CountryRegion(@"device.ipAddress") |
Geo.City(String ip) | Denne operator konverterer en IPv4-adresse til et bynavn. For en IP-adresse i New York City returneres f.eks. "New York City". |
Geo.City(@"device.ipAddress") |
Geo.MarketCode(String ip) | Denne operator konverterer en IPv4-adresse til IP-adressens markedskode. For en IP-adresse fra Canada returneres f.eks. "NA" (Nordamerika). |
Geo.MarketCode(@"device.ipAddress") |
Strengfunktioner
Fraud Protection understøtter standard C# som strengklasse. Denne tabel indeholder nogle eksempler på funktioner og operatorer, du kan finde nyttige.
Operator | Beskrivende tekst | Eksempel |
---|---|---|
Contains(String substring) | Denne operator kontrollerer, om en streng indeholder en anden streng. Contains(String substring) |
@"productList`.productName".Contains("Xbox") |
ContainsOnly(CharSet) | Denne operator kontrollerer, om en streng kun indeholder det angivne tegnsæt. ContainsOnly(Charset1 Charset2 ...etc.) |
@"zipcode".ContainsOnly(CharSet.Numeric) |
ContainsAll(CharSet) | Denne operator kontrollerer, om en streng indeholder alle de angivne tegnsæt. ContainsAll(Charset1 Charset2 ...etc.) |
@"postnummer". ContainsAll(CharSet.Numeric|CharSet.Hypen) |
ContainsAny(CharSet) | Denne operator kontrollerer, om en streng indeholder nogen af de angivne tegnsæt. ContainsAll(Charset1 Charset2 ...etc.) |
@”zipcode”.ContainsAny(CharSet.Numeric|CharSet.Hypen) |
StartsWith(String prefix) | Denne operator kontrollerer, om en streng begynder med et angivet præfiks. StartsWith(String prefix) |
@"user.phoneNumber".StartsWith("1-") |
EndsWith(String suffix) | Denne operator kontrollerer, om en streng slutter med et angivet suffiks. EndsWith(String suffix) |
@"user.email".EndsWith("@contoso.com") |
IsNumeric() | Denne operator kontrollerer, om en streng er en numerisk værdi. (String).IsNumeric() |
@"user.email".IsNumeric() |
Length | Denne operator returner antallet af tegn i strengen. |
@"user.username".Length |
Convert.ToDateTime(@"user.creationDate").ToString("yyyy-MM-dd HH:mm:ss") | Denne operator konverterer strengen til datetime og konverterer datetime til en streng ved hjælp af det angivne format. |
Convert.ToDateTime(@"user.creationDate").ToString("yyyy-MM-dd") |
Brug af CharSet i ContainsOnly, ContainsAll og ContainsAny
Følgende tegntyper kan bruges i ContainsOnly, ContainsAll og ContainsAny.
Tegntype | Betegnelse |
---|---|
Alfabetisk | a-z, A-Z |
Apostrof | ' |
Snabel-a | @ |
Omvendt skråstreg | \ |
Komma | , |
Bindestreg | - |
Numerisk | 0-9 |
Punktum | . |
Skråstreg | / |
Understregning | _ |
Blanktegn | Enkelt mellemrum |
Matematiske funktioner
Fraud Protection understøtter alle C# matematiske standardmetoder og aritmetiske operatorer. Denne tabel indeholder nogle eksempler på metoder, du kan finde nyttige.
Operator | Beskrivende tekst | Eksempel |
---|---|---|
Math.Min(Double value1, Double value2) | Denne operator beregner den mindste af to værdier. | Math.Min(@"riskScore",@"botScore") |
Math.Max(Double value1, Double value2) | Denne operator beregner den største af to værdier. | Math.Max(@"riskScore",@"botScore") |
RandomInt(Heltal min, Heltal max) | Denne operator returnerer et tilfældigt heltal i det angivne interval, inklusive minimumværdien og eksklusive maksimumværdien. | RandomInt(0, 100) |
DateTime-operatorer
Fraud Protection understøtter C# DateTime-standardegenskaber, -metoder og -operatorer. Denne tabel indeholder nogle eksempler på funktioner og egenskaber, du kan finde nyttige.
Operator | Beskrivende tekst | Eksempel |
---|---|---|
DaysSince(DateTime date) | Denne operator returnerer et heltal, der repræsenterer det antal dage, der er gået mellem den angivne DateTime-værdi og dags dato (udtrykt som Coordinated Universal Time [UTC]). | DaysSince(@"user.CreationDate") |
UtcNow | Denne operator får et DateTime-objekt, der er angivet til den aktuelle dato og det aktuelle klokkeslæt på computeren, udtrykt som UTC. | DateTime.UtcNow |
Today | Denne operator henter et objekt, der er angivet til dags dato, hvor tidskomponenten er angivet til 00:00:00. | DateTime.Today |
År | Denne operator henter årets komponent i den dato, der er repræsenteret af denne forekomst. | @"user.creationDate".Year |
Date | Denne operator får et nyt objekt, der har samme dato som denne forekomst, men tidsværdien er angivet til 00:00:00 (midnat). | @"user.creationDate".Date |
Typetildelingsoperatorer
Du kan finde oplysninger om typeudledning i afsnittet Typeudledning af attributter senere i denne artikel.
Operator | Beskrivende tekst | Eksempel |
---|---|---|
ToDateTime() | Denne operator konverterer en streng til et DateTime-objekt. | @"user.creationDate".ToDateTime() |
ToDouble() | Denne operator konverterer en streng til en Double-værdi. | @"productList.purchasePrice".ToDouble() |
ToInt32() | Denne operator konverterer en streng til en Int32-værdi. | @"riskScore".ToInt32() |
Aggregeringsfunktioner
Funktion | Beskrivende tekst | Eksempel: |
---|---|---|
Count() | Denne funktion returnerer det antal gange, en hændelse er indtruffet. | SELECT Count() AS numPurchases |
DistinctCount(String key) | Denne funkton returnerer antallet af distinkte værdier for den angivne egenskab. Hvis den angivne egenskab er null eller tom for en indgående hændelse, bidrager hændelsen ikke til sammenlægningen. | SELECT DistinctCount(@"device.ipAddress") AS distinctIPs |
Sum(Double value) | Denne funkton returnerer summen af værdier for den angivne numeriske egenskab. | SELECT Sum(@"totalAmount") AS totalSpending |
Funktioner for globale variabler
Funktioner for globale variabler kan bruges til at indstille og få globale variabler inden for regler, hastigheder, routingregler og regler for handling efter beslutning. De variabler, der er indstillet, kan tilgås fra det samme miljø eller fra miljøer nede i stakken. Hvis du f.eks. angiver globale variabler i en regel i rodmiljøet, kan variablerne tilgås i reglerne fra det samme miljø eller fra deres underordnede miljøer. Globale variabler er også specifikke for en vurdering. En variabel, der er angivet i én vurdering, kan ikke få adgang til Hypen fra en anden vurdering.
Operator | Beskrivende tekst | Eksempel |
---|---|---|
SetVariables(k=v) | Denne funktion kan bruges til at angive nøgleværdipar, dvs. angive værdier til variabler. | Do SetVariables(key= 123, email=@"user.email") |
GetVariable("k") | Denne funktion kan bruges til at få adgang til de variabler, der allerede er indstillet. I de tilfælde, hvor vi får adgang til variabler, der aldrig er angivet, returneres en standardværdi. | GetVariable("key").AsInt() GetVariable("email").AsString() GetVariable("key").AsDouble() GetVariable("key").AsBool() GetVariable("key").AsDateTime() GetVariable("key").AsJsonObject() GetVariable("key").AsJsonArray() |
Definere dine egne variabler
Du kan bruge nøgleordet LET til at definere en variabel. Der kan derefter refereres til den pågældende variabel andre steder i reglen. Alle variabler skal have et præfiks med dollartegn ($).
Du kan f.eks. erklære følgende variabel.
LET $fullName = @"user.firstName" + @"user.lastName"
Variabler, der erklæres i en LET-sætning, kan kun bruges inden for området for den regel eller det hastighedssæt, som sætningen er defineret i.
Hvis du f.eks. vil referere til variablen fra forrige eksempel, kan du skrive følgende sætning.
WHEN $fullName == "Kayla Goderich"
Note
Når der er defineret en variabel, kan den ikke opdateres med en ny værdi.
Bruge lister i regler
Du kan bruge ContainsKey og Lookup som operatorer til at referere til lister, du har overført til Fraud Protection. Yderligere oplysninger om at bruge lister finder du under Administrere lister
ContainsKey
Hvis du vil kontrollere, om en af listerne indeholder en bestemt værdi, skal du bruge operatoren ContainsKey. Angiv listenavnet, kolonnen og den nøgle, du vil kontrollere for.
Du uploader f.eks. en liste med en enkelt kolonne over risikobehæftede mailadresser og navngiver den Liste over risikobehæftede mailadresser.
Kayla@contoso.com |
Jamie@bellowscollege.com |
Marie@atatum.com |
Du kan derefter bruge følgende syntaks til at afvise alle posteringer fra de risikobetonede mailadresser på listen.
RETURN Reject("risky email")
WHEN ContainsKey("Risky email list", "Email", @"user.email")
Denne klausul kontrollerer, om kolonnen "Email" på listen "Liste over risikobehæftede mailadresser" indeholder nøglen @email. Hvis det er tilfældet, afvises transaktionen.
Lookup
For lister med flere kolonner kan du bruge operatoren Lookup til at kontrollere værdien i en kolonne for en bestemt nøgle.
Du opretter f.eks. en liste med en kolonne for mailadresser og en anden kolonne, der angiver status for disse mailadresser. Du navngiver denne liste Mailliste.
Status | |
---|---|
Kayla@contoso.com |
Risikabel |
Jamie@bellowscollege.com |
Risikabel |
Marie@atatum.com |
Risikabel |
Camille@fabrikam.com |
Sikker |
Miguel@proseware.com |
Sikker |
Tyler@contoso.com |
Sikker |
Du kan derefter bruge følgende syntaks til at afvise alle transaktioner fra mailadresserne på den liste, som har status Risikabel.
RETURN Reject("risky email")
WHEN Lookup("Email List", "Email", @"user.email", "Status") == "Risky"
Denne klausul søger efter nøglen @"user.email" i kolonnen "Mail" på "Mailliste" og kontrollerer, om værdien i kolonnen "Status" er Risikabel. Hvis den er, afvises transaktionen.
Hvis nøglen @"user.email" ikke findes på listen, returnerer Fraud Protection "Ukendt".
Du kan også angive din egen standardværdi som den femte parameter. Du kan finde flere oplysninger i afsnittet Logiske operatorer i denne artikel.
Operatoren Lookup returnerer altid en streng-værdi. Hvis du vil konvertere denne værdi til en Int-, Double- eller DateTime-værdi, skal du bruge en typetildelingsoperator.
Bruge eksterne kald, eksterne vurderinger og hastigheder
- Hvis du vil referere til et eksternt kald, skal du skrive Eksternt efterfulgt af det eksterne kald, du vil referere til. Du kan finde flere oplysninger under Bruge et eksternt kald i regler.
- Hvis du vil referere til en ekstern vurdering, skal du skrive Vurderinger efterfulgt af den eksterne vurdering, du vil referere til. Du kan finde flere oplysninger under Bruge en ekstern vurdering i regler.
- Hvis du vil referere til en hastighed, skal du skrive Hastighed efterfulgt af den hastighed, du vil referere til. Du kan finde flere oplysninger under Bruge en hastighed i regler.
Typeudledning af attributter
Variabeltyper udledes ud fra den kontekst, de bruges i. Her er nogle eksempler:
- I udtrykket NÅR @isEmailValidated fortolkes variablen som en boolesk værdi.
- I udtrykket @"riskScore" > 500 fortolkes variablen som en Double-værdi.
- I udtrykket @"user.creationDate".Year < DateTime.UtcNow.Year fortolkes variablen som en DateTime-værdi.
Hvis der ikke er tilstrækkelig kontekst til at udlede en variabeltype, betragtes den som en streng-værdi. I udtrykket @"riskScore" <@"botScore" fortolkes begge variabler f.eks. som strenge.
Hvis du vil angive typen af en ikke-strengvariabel, skal du bruge en type castingoperator.
JSON-matrixer og -objekter
FQL har understøttelse af konstruktionen af komplekse strukturerede objekter som lokale variabler, som kan overføres til det eksterne opkald eller den eksterne vurdering i formen JSON. Som med alle andre lokale i FQL, kan arrays og objekter ikke overføres, når de er oprettet.
JSON-arrays
Arrays oprettes ved at omslutte udtryk med kantede parenteser:
LET $arr1 = [ "hello", "world" ]
LET $arr2 = [
"this is also an array",
78.4,
$arr1,
@"user.email",
External.MyExtcall()
]
JSON-objekter
Objekterne oprettes med klammeparenteser:
LET $obj1 = { isObject: true }
LET $obj2 = {
numberField: 7,
fieldIs: "string",
internalObj: $obj1,
inline: {
innerInnerField: "hello"
}
}
FQL-funktioner til JSON-matrixer og -objekter
Syntaks | Beskrivelse | Eksempel |
---|---|---|
myArr[0] | Du kan bruge denne syntaks til at få adgang til et bestemt matrixelement ved hjælp af indekset. | myArr [0].property myArr [0][0] myArr [0][0].property myArr [0].property[0] myArr [0].property[0].property |
Hvor myArr i eksemplerne ovenfor er en matrix. Kilden til denne matrix kan være @@payloadProperty, eksternt vurderingssvar, eksternt opkaldssvar, lokal variabel eller en global variabel.
Følgende er eksempler på, hvordan du bruger syntaksen baseret på forskellige matrixkilder:
- Matrixkilde: Nyttedata
LET $sample = @@"myArr[0]".AsJsonArray()
RETURN Approve()
WHEN $sample[0].AsString() == "a"
- Matrixkilde: Lokal variabel
LET $group1 =["a", "b", "c"] LET $group1 =[{ item1: "a", item2: "b"}, { item1: "c", item2: "d"}] LET $group3 =[{ item1: "a", item2: "b", item3: ["c", "d"]}, {{ item1: "e", item2: "f", item3: ["g", "h"]}] RETURN Approve() WHEN $group1[0].AsString() == "a" && $group1[0].item2.AsString() == "b" && $group3[0].item3[0].AsString() == "c"
Syntaks | Beskrivelse | Eksempel |
---|---|---|
Array.GetValue (TargetArray . AsJsonArray(), matchKey, matchValue, lookupKey) | Med denne funktion kan du få adgang til det første matrixelement, der svarer til en betingelse. Returnerer en værdi |
Array.GetValue(@@"payloadProperty". AsJsonArray(), matchKey, matchValue, lookupKey) |
Array.GetValues(TargetArray . AsJsonArray(), matchKey, matchValue) | Med denne funktion kan du få adgang til et sæt matrixelementer, der svarer til en betingelse. Returnerer en matrix |
Array.GetValues(@@"payloadProperty". AsJsonArray(), matchKey, matchValue) |
Følgende er nogle mere detaljerede eksempler på, hvordan du bruger ovenstående syntaks baseret på forskellige matrixkilder:
Matrixkilde | Array.GetValue | Array.GetValues |
---|---|---|
Eksterne vurderinger | LET $a = Assessments.myAssessment.evaluate() LET $sample = Array.GetValue($a.ruleEvaluations.AsJsonArray(), "rule", "Sample Payload Generation", "clauseNames") RETURN Approve() WHEN $sample[0]. AsString() == "TestData" |
LET $a = Assessments.myAssessment.evaluate() LET $sample = Array.GetValues($a.ruleEvaluations.AsJsonArray(), "rule", "Sample Payload Generation") RETURN Approve() WHEN $sample[0].clauseNames[0]. AsString() == "TestData" |
Nyttedata | Payload-eksempel: {"gruppe":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} LET $sample = Array.GetValue(@@"group". AsJsonArray(), "item1", "a", "item2") RETURN Approve()WHEN $sample. AsString() == "a1" |
Eksempel på nyttedata: { "gruppe":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} LET $sample = Array.GetValues(@@"group". AsJsonArray(), "item1", "a") RETURN Approve() NÅR $sample[0].item2. AsString() == "a1" |
Globale variabler | Brug af samme nyttedataeksempel som ovenfor Do SetVariables(Var=@@"group") LET $group = GetVariable("Var"). AsJsonObject() LET $value = Array.GetValue($group, "item1", "a", "item2") RETURN Approve() WHEN $value. AsString() == "a1" |
Brug af samme nyttedataeksempel som ovenfor Do SetVariables(Var=@@"group") LET $group = GetVariable("Var"). AsJsonObject() LET $arr = Array.GetValues($group. AsJsonArray(), "item1", "a") RETURN Approve() |
Eksternt opkald | Svar på eksternt opkald (myCall): {"gruppe":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} |
Svar på eksternt opkald (myCall): {"gruppe":[{"item1": "a", "item2": "a1"}, {"item1": "b", "item2": "b1"}]} LET $x = External.myCall(). AsJsonObject() LET $arr = Array.GetValues($x.group[0]. AsJsonObject(), "item1", "a") RETURN Approve()WHEN $arr[0].item2. AsString() == "a1" |
Typestøbe til JSON-matrixer og -objekter
Følgende . Som<Type>() understøttes fra JsonObject:
- AsString()
- AsInt()
- AsDouble()
- AsDateTime()
- AsBool()
- AsJsonArray()
- AsJsonObject()
Når du bruger en af de to matrixhjælpemetoder, . GetValue eller . GetValues, du skal skrive cast ved hjælp af . Som<Type>(). Eksempel:
LET $arr = {myArr:[{item1: "red", number: 45}, {item1: "blue", number: 56}, {item1: "green", number: 33}]} LET $sample = Array.GetValues($arr.myArr.AsJsonArray(), "item1", "blue")
Når du har konverteret data til et JSON-objekt eller en matrix eksplicit, kan du bruge . Som<Type>() til at caste til en anden datatype, hvis det er nødvendigt. Eksempel:
RETURN Approve() WHEN $sample[0].number.AsInt() == 56
Når du bruger @@, skrives dataene implicit til et JSON-objekt. Hvis du derefter vil konvertere JSON-objektet til en anden datatype, skal du bruge . Som<Type>(). Eksempel:
LET $sample = @@”user.addresses”.AsJsonArray()
Når du vil skrive i et bestemt format, skal du bruge . Som<Type>(). Eksempel:
LET $sample = @@”user.addresses” Output(abc = $sample.AsJsonArray())
Bemærk
Bedste praksis for typestøbning:
- Skriv altid kast for enden af kæden .
Eksempel:
LET $sample = External.myCall().data[0].Item1[0].AsJsonArray()
Or
LET $sample = @@”accommodations[0].rooms”.AsJsonArray()
- Når du ikke er sikker, skal du altid eksplicit skrive cast ved hjælp af . Som<Type>().