2016-07-09 2 views
1

У меня есть расширение данных, содержащие строки и столбцы, такие как:Объединить 1 поле из нескольких строк с помощью AmpScript

emailAddress  orderNumber firstName lastName customerOrder 
[email protected] 1111   Bill  Adams  2 brown shoes 
[email protected] 1111   Bill  Adams  2 green socks 
[email protected] 1111   Bill  Adams  1 orange backpack 
[email protected] 2222   Bill  Adams  2 pink gloves 
[email protected] 3333   David  Sherwood 5 yellow hats 

То, что я пытаюсь сделать, это создать заказ получил электронную почту от этих данных, предпочтительно не изменяя его из источника. Поэтому в идеале выход электронной почты будет группировать customerOrder для каждого клиента, основываясь на номере orderNumber. Затем CustomerOrder объединяется и вставляется в сообщение электронной почты (обратите внимание, что это упрощено совсем немного, CustomerOrder на самом деле является HTML для вставки в HTML-таблицу в электронном письме).

До сих пор я был в состоянии сделать это гораздо очень простой ход:

%%[ 
Set @customerOrder = 
LookupOrderedRows("transactionsList", 
"0", 
"customerOrder", 
"orderNumber", 
"1111") 
]%% 

С помощью этого кода я вижу, что у меня есть 3 записей для номера заказа 1111. Но теперь я застрял. Нужно ли создавать цикл if/then? Или есть способ извлечь результат из функции LookupOrderedRows и проанализировать ее для использования в таблице HTML в электронном письме?

+1

Вы получите гораздо больше глаз на вопросы РФМК над на [salesforce.stackexchange.com] (HTTP: //salesforce.stackexchange.com), в частности с [marketing-cloud] (http://salesforce.stackexchange.com/questions/tagged/marketing-cloud) и [ampscript] (http://salesforce.stackexchange.com/questions/tagged/ampscript). –

ответ

1

Используя один из lookup examples на моем блоге, вы можете сделать что-то вроде этого:

%%[ 
var @rows, @row, @rowCount, @numRowsToReturn, @emailAddress, @i, @prevOrderNumber 

set @emailAddress = AttributeValue("emailaddr") 
set @numRowsToReturn = 0 /* 0 means all */ 
set @rows = LookupOrderedRows("transactionsList", @numRowsToReturn, "orderNumber", "emailAddress", @emailAddress) 

set @rowCount = rowcount(@rows) 

if @rowCount > 0 then 

    set @prevOrderNumber = "" 

    for @i = 1 to @rowCount do 

     var @orderNumber, @firstName, @lastName, @customerOrder 
     set @row = row(@rows,@i) /* get row based on loop counter */ 

     set @orderNumber = field(@row,"orderNumber") 
     set @firstName = field(@row,"firstName") 
     set @lastName = field(@row,"lastName") 
     set @customerOrder = field(@row,"customerOrder") 

     /* output headings for first order or when order # changes */ 
     if empty(@prevOrderNumber) or @prevOrderNumber != @orderNumber then 
      outputline(concat("<br>Order #:", @orderNumber)) 
      outputline(concat("<br>Name: ", @firstName, " ", @lastName)) 
      outputline(concat("<br>Line items:<br>")) 
      set @prevOrderNumber = @orderNumber 
     endif 

     outputline(concat("<br>",@customerOrder)) 

    next @i 

else 

    outputline(concat("<br>No transactionsList rows found")) 

endif 
]%% 
+0

Я думаю, что это довольно близко к тому, что я пытаюсь сделать. Могли бы вы пройти через эту логику цикла? Я хорошо знаком с циклами JavaScript, но по какой-то причине это не имеет для меня большого смысла. –

+0

На самом деле, я думаю, что сейчас все понимаю. Но один бит: для @ i = 1 для @rowcount в основном я

+0

[Руководство по симулятору SFMC AMPScript] (http://help.marketingcloud.com/en/documentation/exacttarget/content/ampscript/ampscript_syntax_guide/) –

Смежные вопросы