У меня проблема с оператором IF/ELSE в Ampscript, так как он не проходит через оператор else

Я создал DE для кода купона Заявка на купон DE детали (CouponCodeRedeem) CouponCode — CouponCode EmailAddress — адрес электронной почты, на который отправляется купон IsClaimed — устанавливается в Y раз emai; with отправляется покупателю IsRedeemed-обновляется на основе ответа внешней системы; используется для отправки напоминания по электронной почте, если купон не погашен.

Детали получателя DE EmailAddress — адрес электронной почты получателя Name — имя получателя

Я заполнил «код купона для 3 строк в моем DE, где для IsRedeemed установлено значение Y для 1 кода купона, а оставшиеся 2 строки имеют значение false.

Я пытаюсь отправить купон клиентам, для которых появились новые клиенты (IsRedeemed = "False"), но он не проходит через мой оператор else, проверяет мой оператор if и отправляет купон для (Isredeemed = True) для 1 получателя.

введите здесь описание изображения
Синтаксис кода:

%%[
var @email,@row,@couponRow, @couponCode,@ClaimedDate,@IsRedeemed,@barcode

set @rows = LookupRows("CouponCodeRedeem","IsRedeemed","Y")
set @rowCount = rowcount(@rows)



if @rowCount > 0 then
output(concat("rowcount: ", @rowcount))
  for @i = 1 to @rowCount do

    var @emailAddress, @couponCode
    set @row = row(@rows, @i) /* get row based on counter */
    set @emailAddress = field(@row,"EmailAddress")
    set @couponCode = field(@row,"CouponCode")
    ]%%

    <br>Row %%=v(@i)=%%, couponCode: %%=v(@couponCode)=%%, emailAddress: %%=v(@emailAddress)=%%

    %%[

  next @i ]%%

%%[ else ]%%/*setting coupon against new customers*/

set @email = AttributeValue("emailAddr")
output(concat("email: ", @email))
set @couponRow = ClaimRow("CouponCodeRedeem", "IsClaimed", "EmailAddress", @email)

if not empty(@couponRow) then

  set @couponCode = Field(@couponRow, "CouponCode")
set @barcode = BarcodeURL(@couponCode, "Code128Auto", 300, 100)
set @ClaimedDate = Field(@couponRow, "ClaimedDate")
else

  RaiseError("No coupons available")

%%[ endif ]%%
0
Gortonington 23 Июн 2020 в 17:36

1 ответ

Проблема в вашем операторе поиска. в сочетании с оператором if

set @rows = LookupRows("CouponCodeRedeem","IsRedeemed","Y")
set @rowCount = rowcount(@rows)

if @rowCount > 0 then
  //do something
else

Вы только подсчитываете столбцы, где IsRedeemed == true, а затем перебираете эти результаты. Ваш код достигнет части остального только тогда, когда не будет найдено никаких результатов.

0
Daniel Koch 23 Июн 2020 в 21:17
Привет, Даниэль, но у меня есть только одна кодировка для проверки и разделения строк на основе значения IsRedeemed. Должен ли я добавить условие AND в начальный блок if, например if(rowcount > 0 AND IsRedeemed = "Y"). if( rowcount > 0){ сделать что-то } else { if(@copuon строка не пуста){ сделать что-то } else { выдать ошибку } }
 – 
prasanna sekar
24 Июн 2020 в 16:19
Привет, я думаю, вы должны сделать что-то вроде этого: установить @rows = LookupRows("CouponCodeRedeem","IsClaimed","False"), тогда вы можете перебирать строки и для каждой из них вы можете решить, что делать в зависимости от значения искуплен
 – 
Daniel Koch
25 Июн 2020 в 09:15