函数

Dynamics 365 欺诈防护使你可以灵活地创建可用于执行特定任务的函数。 例如,可以使用函数将必须一起执行的代码组组合在一起。 或者,可以使用函数重用代码,在其中编写代码一次并从其他地方访问代码,从而使代码更易于维护。 在该示例中,如果要调用外部服务从中提取值,则可以在函数中定义逻辑,并且可以从其他资源调用该函数。

定义函数

函数由输入参数和输出属性组成。

输入参数

函数可以定义在调用时传递给函数的参数。 输入参数在函数定义中定义。 在调用时传入函数的参数数应与为函数定义的参数数完全匹配。 定义的参数可用于输出属性中返回值。 有关详细信息,请参阅 输出属性。 定义输入参数是可选的。

输入参数由以下三个部分组成。

  • 参数名称:可以引用参数的名称。

  • 数据类型:每个输入参数都应具有与之关联的数据类型。 指定的数据类型将参数的值转换为相应的类型。 函数支持下表中列出的数据类型。

    数据类型 示例值
    布尔 True
    DateTime 2 月 22,2024 4:44 下午 4:44
    双精度 10.0
    Integer 10
    字符串 "Hello"
  • 默认值:每个参数都需要默认值。 默认值在“函数评估”期间使用,或者如果函数调用出现问题。

输出属性

可以使用输出属性定义函数的返回值。 输出属性使用“欺诈查询语言(FQL)”逻辑返回函数的值。 然后,可以从调用函数时从其他函数、规则、速度、决策后操作规则和路由规则中访问输出属性。 一个函数最多可以有 30 个输出属性。 有关 FQL 及其用法的详细信息,请参阅 语言参考指南

输出属性由以下四个部分组成。

  • 属性说明:属性的说明。 说明是可选的。

  • 数据类型:从属性返回的值的数据类型。 函数支持所有基元数据类型,例如布尔值、日期时间、双精度、整数和字符串。 每当对其他资源中引用的函数的输出属性进行中断性变更时,原始输出属性“数据类型”的默认值将用作回退以继续执行资源。 建议在重大更改后更新资源。

  • 默认值:在属性计算过程中遇到异常时,将返回默认值作为函数的结果。 例如,除以 0 和 Null 引用异常。

  • 返回值的代码编辑器:代码编辑器用于从函数返回值。 以下是返回输出值的方法。

    1. 函数中定义的输入参数可用于返回值。

      返回输入参数作为返回值的输出属性的示例。 有关如何定义输入参数的详细信息,请参阅本文前面的“ 输入参数 ”部分。

    RETURN _number1 + _number2
    
    1. 包含调用函数的规则的评估的请求和响应属性(包括自定义数据)。 可以使用运算符访问这些属性 @ 。 例如 @"salesTax"。

      使用请求属性的函数示例:

    RETURN @"salesTax"
    
    1. 欺诈保护扩充数据。 例如 Geo.CountryCode()。

      使用 riskscore 的函数示例:

    RETURN Geo.CountryCode(@"deviceContext.ipAddress")
    
    1. 上传到欺诈保护的列表。 有关如何上传列表的详细信息,请参阅 “管理列表”。

      使用列表的函数示例:

    RETURN Lookup("Country_Score", "Country", "US", "ScoreCutOff")
    
    1. 欺诈保护中定义的速度。 有关详细信息,请参阅执行速度检查

      使用速度的函数示例:

    RETURN Velocity.IPs_Per_User(@"deviceContext.ipAddress", 30s)
    
    1. 在欺诈保护中创建的外部调用。 有关详细信息,请参阅 外部调用

      使用外部调用的函数示例:

    RETURN External.weather("Seattle").id
    
    1. 在欺诈保护中创建的外部评估。 有关详细信息,请参阅 外部评估

      调用外部评估的函数示例:

    LET $result = Assessments.myAssessment.Evaluate($baseInput = @@)
    RETURN $result.ToStr()
    
    1. 函数中的 Access 函数。

      调用另一个函数的函数示例:

    RETURN Functions.MyFunction(@"totalAmount", @"salesTax").Calculate_Sum
    

注意

可以在多层次结构堆栈中的任何环境中创建函数。 当函数引用环境中可用的资源(如速度、外部调用、列表和外部评估)时,调用该函数的较低环境也会继承函数引用的资源。 例如,如果在根中创建引用外部调用以返回值的函数,则调用该函数的子环境也可以访问该外部调用的结果。 有关如何继承和调用函数的详细信息,请参阅 本文后面的“函数继承 ”部分。

发布函数

  1. 欺诈保护门户中,在 导航栏中选择“函数 ”,然后选择“ 新建函数”。 欺诈保护会创建一个草稿函数,该函数仅显示给你(函数的创建者)。 将自动保存对草稿所做的所有更改。

  2. 若要从头开始定义新函数,请参阅 本文前面的“定义函数 ”部分。

  3. 若要发布函数,请选择“ 发布”。

  4. 在确认对话框中,可以更改名称和说明。 选择发布

注意

发布函数后,所有用户都可以看到该函数。 然后,可以在其他函数、规则、速度、决策后规则和路由规则中调用该函数。

有关如何使用其他资源(如函数、规则、速度、决策操作和路由规则)中的函数的信息,请参阅本文后面的“从资源调用函数”部分。

“示例”窗格

创建或编辑函数时,示例窗格将显示在页面一侧。

  • 函数不与任何评估相关联。 示例有效负载作为一个有用的指南提供给显示可在函数中引用的所有事件属性的用户。 在窗格顶部的“事件”字段中选择事件类型

  • 有效负载示例部分包含可在请求 API 中发送评估的属性示例。

管理函数

  1. 若要编辑以前发布的函数,请选择该函数,然后选择“ 编辑”。 已发布函数的草稿已创建,仅供你使用。 对草稿所做的所有更改都会自动保存。 若要将更改推送到生产环境,请选择“ 发布”。 以前发布的函数将被更改覆盖。 若要取消卡草稿,请选择“取消卡”。

  2. 若要删除现有函数,请选择省略号 (...),然后选择“ 删除”。

  3. 若要更新函数的名称或说明,请选择省略号(...),然后选择“ 重命名”。

  4. 若要搜索函数,请在“搜索”字段中输入关键字 (keyword)。 搜索所有函数名称和说明,并根据搜索关键字 (keyword)筛选结果。

评估函数

在发布函数之前,可以使用 “函数评估 ”窗格来确保它返回预期的结果。

  • 若要打开函数评估窗格,请在“函数”选项卡中选择“展开”。
  • 若要关闭窗格,请选择“ 折叠”。

当评估窗格打开时,输出属性的列表将显示其结果。 在确定应返回的内容时,评估使用示例有效负载部分中的输入参数和值的默认值。 如果这些值中的任何一个都已更改,则输出也会更改。 这样,就可以确保返回每个输出属性的正确值。

从资源调用函数

可以从规则、速度、决策后操作和路由规则等资源调用已发布的函数。 通过调用函数可以访问函数中定义的所有输出属性。 然后,这些值可用于决策。

规则

可以从同一环境中的任何规则和下面的层次结构中的子环境调用函数(在任何评估中)。 有关规则的详细信息,请参阅 规则

LET $sum = Functions.MyFunction(@"totalAmount", @"salesTax").Calculate_Sum
RETURN Approve()
WHEN $sum > 5

速度

可以从同一环境和层次结构中的子环境的任何速度调用函数。 有关速度的详细信息,请参阅执行速度检查

SELECT DistinctCount(@"device.deviceContextId") AS Devices_Per_IP
FROM AccountLogin
WHEN Functions.MyFunction(@"totalAmount", @"salesTax").Calculate_Sum > 5
GROUPBY @"device.ipAddress"

决策后规则

可以从同一环境中的任何决策后操作规则(在任何评估中)以及从下面的层次结构中的子环境调用函数。 有关决策后操作规则的详细信息,请参阅 “决策后操作规则”。

DO SetResponse()
WHEN Functions.MyFunction(@"totalAmount", @"salesTax").Calculate_Sum == 5

路由规则

可以从同一环境中的任何路由规则和下面的层次结构中的子环境调用函数。 有关路由规则的详细信息,请参阅 案例管理

ROUTETO Queue("General Queue")
WHEN Functions.MyFunction(@"purchase.request.totalAmount", @"purchase.request.salesTax").Calculate_Sum > 5

函数继承

可以在同一环境中从下面的层次结构中的子环境调用函数。 调用语法取决于函数存在的位置及其调用位置。 下面是在多层次结构设置中调用函数的不同方法。

注意

如果函数引用速度、列表、外部调用和外部评估等资源,则当调用函数时,这些资源也会从下面的层次结构中的子环境继承。

调用在同一环境中创建的函数

下面的示例从规则调用函数,该规则和函数都存在于同一环境中。

LET $sum = Functions.MyFunction(@"totalAmount", @"salesTax").Calculate_Sum
RETURN Approve()
WHEN $sum > 5

调用在根环境中创建的函数

下面的示例从子环境调用在根目录中创建的函数。

LET $sum = Functions.root.MyFunction(@"totalAmount", @"salesTax").Calculate_Sum
RETURN Approve()
WHEN $sum > 5

调用在父环境中创建的函数

以下示例从直接父环境调用函数。

LET $sum = Functions.parent.MyFunction(@"totalAmount", @"salesTax").Calculate_Sum
RETURN Approve()
WHEN $sum > 5

调用在堆栈上方的任何环境中创建的函数

以下示例调用在堆栈上方的环境中创建的函数,并从较低环境中的规则继承。

LET $sum = Functions.environment["environmentid"].MyFunction(@"totalAmount", @"salesTax").Calculate_Sum
RETURN Approve()
WHEN $sum > 5

函数和资源限制

欺诈保护对每个环境可以创建的函数数以及可在函数中引用的资源数有限制。

资源 限制
可在环境中发布的最大函数数 30
函数中可存在的输出属性的最大数目 30
函数可以引用的最大唯一速度数 15
函数可以引用的最大外部调用数 2
函数可以引用的最大唯一列表查找数 5
函数可以引用的唯一外部评估的最大数目 2
规则集可以调用的最大函数数 10
路由规则可以调用的最大函数数 10
发布决策操作可以调用的最大函数数 10
速度可以调用的最大资源数 10