Loading

Lógica AMPscript para lidar com valores nulos ou vazios

Data da publicação: Jan 28, 2025
Descrição
As funções AMPscript têm parâmetros obrigatórios. Quando um valor nulo ou vazio é passado para um parâmetro obrigatório, toda a chamada de função falha. Quando uma chamada de função falha, isso normalmente resulta em falha no envio de email, na não renderização de CloudPages ou em outros cenários indesejáveis. Veja abaixo um exemplo de erro que você pode receber.
Valor inválido especificado para parâmetro de função.
  Nome da função: Multiply
  Nome do parâmetro: Value2
  Ordinal do parâmetro: 2
  Tipo de parâmetro: Numérico
  Valor enviado:
Neste erro vemos que o valor enviado para o segundo parâmetro na função Multiply(1,2) é nulo ou vazio.
 
Resolução

Configuração da extensão de dados


Uma maneira de evitar que esse problema apareça é arquitetar suas extensões de dados para proibir valores nulos ou vazios. Quando você cria uma extensão de dados no Contact Builder pela primeira vez, há uma caixa de seleção "Obrigatório" ao criar os campos para sua extensão de dados. A caixa de seleção "Obrigatório" garante que nenhum dado seja adicionado à extensão de dados sem um valor. Também existe uma opção para um "Valor padrão".  Ter um "Valor padrão" para um atributo não permite valores nulos ou vazios, ao mesmo tempo que permite importações ou consultas SQL para adicionar linhas sem valores para os campos obrigatórios. 

Nota: Ter um campo Obrigatório sem um Valor Padrão pode fazer com que processos, como Importações ou Consultas SQL, falhem com um erro semelhante a "Não é possível inserir um valor NULL em uma coluna não anulável". Teste todos os processos que interagiriam com uma extensão de dados com esta configuração antes da ativação. 
 

Lógica AMPscript para lidar com valores nulos ou vazios


Se a extensão de dados já existir e não puder ser recriada, ou se houver cenários para o seu negócio que façam sentido ter um valor nulo ou vazio, ainda existem soluções para resolver esse problema. O AMPscript oferece aos criadores de conteúdo flexibilidade para lidar com esses cenários

Vejamos um exemplo. Digamos que a extensão de dados abaixo chamada "OrderConfirmation" esteja sendo referenciada em um email.
 
ContactKey (abc)EmailAddress (@)OrderNumber (abc)Price (.00)DiscountPrice (.00)
Example1Example1@example.com12345100.0080.00
Example2Example2@example.com23456108.00 

Veja abaixo o código AMPscript que está sendo executado em um email.
 
%%[
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)=%%

Queremos definir a variável @price igual ao valor DiscountPrice na extensão de dados OrderConfirmation com base no ContactKey para o qual estamos enviando. Com o propósito de exibir o comportamento problema, definimos a variável @tax como um valor estático "0.08". Posteriormente, imprimimos a variável @price no email usando a função v(). Para as duas linhas de exemplo, podemos imprimir a variável sem erros. A primeira mostraria "Price: 80.00" e a segunda mostraria "Price: ". Encontramos problemas posteriormente no código quando tentamos calcular a variável @total usando a função Multiply. Quando usamos Ver e testar no primeiro contato "Example1", vemos a linha final renderizada como "Seu imposto é de US$ 6,40". No entanto, quando testamos o "Example2", obtemos um banner de erro semelhante ao abaixo. 
 
Valor inválido especificado para parâmetro de função.
  Nome da função: Multiply
  Nome do parâmetro: Value1
  Ordinal do parâmetro: 1
  Tipo de parâmetro: Numérico
  Valor enviado:

Se adicionarmos uma linha de código para contabilizar DIscountPrice nulo ou vazio, a chamada de função não falhará mais.
 
%%[
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)=%%

A lógica IF/THEN procura a variável @price que foi inicialmente definida como igual ao valor DiscountPrice da extensão de dados OrderConfirmation. Usamos a função Empty() para verificar se o valor é nulo ou vazio. Se for, definimos a variável @price para outro valor de campo, "Preço". Supondo que Preço seja um campo obrigatório, isso deve evitar a ocorrência de erros na função Multiply devido a valores nulos ou vazios. 
 

Recursos

Número do artigo do Knowledge

000393055

 
Carregando
Salesforce Help | Article