Loading

处理 Null 或空值的 AMPscript 逻辑

发布日期: Jan 28, 2025
描述
AMPscript 函数具有必需的参数。将 Null 或空值传递给必需的参数时,会导致整个函数调用失败。函数调用失败时,通常会导致电子邮件发送失败、CloudPages 不出现或其他意外情况。下面是一个您可能遇到的错误的示例。
为函数参数指定的值无效。
  函数名称:Multiply
  参数名称:Value2
  参数序号:2
  参数类型:数字
  提交的值:
在这个错误中,我们看到为 Multiply(1,2) 函数中的第二个参数提交的值为 NULL 或空值。
 
解决方案

数据扩展配置


防止出现这种问题的一种方法是不允许在数据扩展的架构中出现 NULL 或空值。首次在 Contact Builder 中创建数据扩展时,会在为您的数据扩展创建字段时出现一个“必填”复选框。“必填”复选框可确保不向没有值的数据扩展添加任何数据。还有一个“默认值”选项。  为属性设置“默认值”选项可以实现不允许 NULL 或空值的效果,同时还允许导入或进行 SQL 查询,以便为必填字段添加没有值的行。 

注意:设置一个没有“默认值”的“必填”字段会导致导入或 SQL 查询之类的进程失败,以及类似于“不能将 NULL 值插入到不可为空的列中”的错误。在上线之前,请测试所有使用此配置与数据扩展交互的进程。 
 

处理 Null 或空值的 AMPscript 逻辑


如果数据扩展已经存在并且不能重新创建,或者对于您的公司来说,有一个 NULL 或空值是有意义的,那么仍然有解决这个问题的解决方案。AMPscript 可为内容创建者提供考虑到这些场景的灵活性

我们来看一个示例。假设下面这个名为“OrderConfirmation”的数据扩展在一个电子邮件中被引用。
 
ContactKey (abc)EmailAddress (@)OrderNumber (abc)Price (.00)DiscountPrice (.00)
Example1Example1@example.com12345100.0080.00
Example2Example2@example.com23456108.00 

下面是在电子邮件中执行的 AMPscript 代码。
 
%%[
Set @price = Lookup("OrderConfirmation","DiscountPrice","ContactKey",_subscriberkey)

Set @tax = "0.08"
]%%

Price: %%=v(@price)=%%
<br><br>

%%[SET @total = FormatNumber(multiply(@price,@tax),"C2", "en-US")]%%

Price with Logic: %%=v(@price)=%%
<br><br>

Your tax is %%=v(@total)=%%

我们希望根据要发送给的 ContactKey 将 @price 变量设置为等于 OrderConfirmation 数据扩展中的 DiscountPrice 值。为了展示有问题的行为,我们将 @tax 变量设置为静态值 “0.08”。稍后,我们使用 v() 函数打印电子邮件中的 @price 变量。对于这两个示例行,我们能够打印变量,不会出错。第一个示例会显示 "Price:80.00",第二个示例会显示 "Price: "。在后面的代码中,当我们试图使用 Multiply 函数计算 @total 变量时,就会遇到问题。当我们对第一个联系人“Example1”进行预览和测试时,我们看到最后一行呈现为“Your tax is $6.40”。但当我们测试“Example2”时,我们会得到一个类似于下文的错误横幅。 
 
为函数参数指定的值无效。
  函数名称:Multiply
  参数名称:Value1
  参数序号:1
  参数类型:数字
  提交的值:

如果我们添加一行代码来处理 NULL 或空的 DIscountPrice,函数调用就不会再失败。
 
%%[
Set @price = Lookup("OrderConfirmation","DiscountPrice","ContactKey",_subscriberkey)

Set @tax = "0.08"
]%%

Price: %%=v(@price)=%%
<br><br>

%%[IF empty(@price) THEN 
SET @price= Lookup("OrderConfirmation","Price","ContactKey",_subscriberkey)
ENDIF]%% 

%%[SET @total = FormatNumber(multiply(@price,@tax),"C2", "en-US")]%%

Price with Logic: %%=v(@price)=%%
<br><br>

Your tax is %%=v(@total)=%%

IF/THEN 逻辑可以查找最初设置为等于 OrderConfirmation 数据扩展中的 DiscountPrice 值的 @price 变量。我们使用 Empty() 函数来检查值是否为 NULL 或为空。如果为 NULL 或为空,我们将 @price 变量设置为另一个字段值“Price”。假设 Price 是必填字段,这应该可以防止 Multiply 函数因 NULL 或空值而出错。 
 

资源

知识文章编号

000393055

 
正在加载
Salesforce Help | Article