Я пытаюсь принести контент из расширения данных, не подлежащего отправке, где я сопоставляю первые 2 местоположения из моего расширения данных для отправки. Пример данных в расширении для отправки данных: Голландия, Бельгия, Люксембург.

Основываясь на этом, я ссылаюсь на первые два местоположения в неотправляемом расширении данных, где у меня есть данные о местоположении в двух полях: поле страны и города.

Я хочу иметь возможность извлекать контент из неотправляемого DE, когда он совпадает с моим основным местоположением (то есть успешно), если у меня нет совпадения с моим основным местоположением, проверьте дополнительное местоположение. Если есть совпадение, принесите контент, связанный со вторичным местоположением; если совпадений не найдено, извлеките область содержимого по умолчанию.

Проблема, с которой я сталкиваюсь на данный момент, заключается в том, что для части содержимого по умолчанию ничего не отображается. У меня была проблема, когда дополнительное местоположение не было выбрано для контента, но я понял, что это было из-за разделителя пробелов, который исходил от BuildRowsetFromString, поэтому мне пришлось использовать Trim, и теперь я могу отображать контент для вторичного местоположения, но ничего не отображается по умолчанию содержание.

Любое руководство очень ценится.

   %%[

SET @Location=AttributeValue('Product: Description')
SET @virgula=','

if IndexOf(@Location,@virgula) > 0 then 

     SET @rs = BuildRowsetFromString(@Location,',')
     SET @PrimaryLocation = Field(Row(@rs,1),1)
     SET @SecondaryLocation = Field(Row(@rs,2),1)
else 
SET @PrimaryLocation=@Location
SET @SecondaryLocation=@Location

endif 

]%%


%%[SET @rows = LookupRows("Blog Post Reference Table","Default","1")
set @rowCount = rowcount(@rows)
if @rowCount > 0 then

  set @match = 0
  set @match2= 0

  for @i = 1 to @rowCount do

    if @match == 0 then
      set @row = row(@rows, @i) /* get row based on counter */
      set @Article = field(@row,"Article Title")
      set @Description = field(@row,"Description")
      set @Image = field(@row,"Image")
      SET @LinkTrip=field(@row,"Permalink")
      set @UrlFinal=RedirectTo(@LinkTrip)
      set @defaultURl='https://www.trafalgar.com'
      set @LocationCity=field(@row,"Location_City")
      set @bara='|'
      set @LocationCountry=field(@row,"Location_Country")


      if IndexOf(@LocationCity,@bara) > 0 then 
        SET @LocationCity2=Substring(@LocationCity,1, Subtract(IndexOf(@LocationCity,@bara),1))
      else 
        SET @LocationCity2=@LocationCity
      endif

       if IndexOf(@LocationCountry,@bara) > 0 then 
        SET @LocationCountry2=Substring(@LocationCountry,1, Subtract(IndexOf(@LocationCountry,@bara),1))
      else 
        SET @LocationCountry2=@LocationCountry
      endif

      if (@PrimaryLocation == @LocationCity2) or (@PrimaryLocation == @LocationCountry2) then
        SET @match = 1
      endif

SET @SecondaryNOspace=trim(@SecondaryLocation)
endif


]%%



%%[if @match==1 and @i == @rowCount then]%%

From the blog piece for primary location: <br>
Article name:%%=v(@Article)=%%<br>

Primary location: %%=v(@PrimaryLocation)=%%<br><br>
Description: %%=v(@Description)=%%
<br>
<a href="%%=RedirectTo(IIF(@nolink,v(@defaultURl),v(@UrlFinal)))=%%"><img src="%%=v(@Image)=%%" width="600" height="400"></a>


%%[elseif  (@SecondaryNOspace == @LocationCity2) or (@SecondaryNOspace == @LocationCountry2) then
        SET @match2 = 1

 if @match2==1 and @i == @rowCount then]%%

From the blog piece for secondary location: <br>
Article name:%%=v(@Article)=%%<br>

Secondary location: %%=v(@SecondaryNOspace)=%%<br>

Description: %%=v(@Description)=%%
<br>
<a href="%%=RedirectTo(IIF(@nolink,v(@defaultURl),v(@UrlFinal)))=%%"><img src="%%=v(@Image)=%%" width="600" height="400"></a>



%%[ else if @i == @rowCount then]%%
DEFAULT CONTENT because there was no match for primary or secondary locations 

%%[
    endif
    endif
    endif
  next @i 
endif
]%%

Джульетта

enter image description here enter image description here

0
Giulietta 13 Май 2020 в 17:03
Было бы здорово, если бы вы могли поделиться столбцами расширения целевых данных и найти расширение неотправляемых данных. Мне очень сложно визуализировать без колонок.
 – 
Naveen VM
13 Май 2020 в 13:56

1 ответ

Насколько я понимаю, вы на самом деле слишком много делаете внутри цикла for.

По сути, то, что вам нужно, это просто цикл FOR, который содержит немного очистки данных и одно условие if/elseif/else.

Я немного подчистил код, чтобы отразить это. Переменные @match полностью удалены. Я думаю, что основная проблема заключалась в том, что внутри вашего цикла вы проверяли ненужные переменные «соответствия» и проверяли, соответствует ли @i @rowCount.

@i — текущий запуск цикла. @rowCount — последний запуск.

Эффект: код внутри цикла выполняется только один раз, а именно для последнего запуска. Что не имеет смысла в вашем случае использования, я считаю. Вы хотите проверить совпадения для каждого найденного местоположения в неотправляемом DE, а не только для последнего.

Также:

  • Некоторые переменные перенесены из цикла for, теперь их не нужно определять на каждой итерации цикла.
  • Добавлены отступы, чтобы сделать код более читабельным и структурно понятным.
  • Изменена «логика IIF» в ссылках на более простую логику IF EMPTY.

Я не тестировал этот код, но он должен стать хорошей отправной точкой.

%%[

/* global variables */

SET @defaultURL ='https://www.trafalgar.com'
SET @bara= '|'
SET @virgula=','
SET @location = AttributeValue('Product: Description')


IF IndexOf(@Location,@virgula) > 0 THEN 
  SET @rs = BuildRowsetFromString(@Location,@virgula)
  SET @primaryLocation = Field(Row(@rs,1),1)
  SET @secondaryLocation = Field(Row(@rs,2),1)
ELSE
  SET @primaryLocation = @location
  SET @secondaryLocation = @location  
ENDIF 
/*
]%%

Primary location: %%=v(@primaryLocation)=%%
<br>
Secondary location: %%=v(@secondaryLocation)=%%
<br>
%%[
*/

SET @rows = LookupRows("Blog Post Reference Table","Default","1")
SET @rowCount = rowcount(@rows)

IF @rowCount > 0 then
/* entry found in nonsendable DE */

  FOR @i = 1 to @rowCount do
  /* get all references */
    SET @row = row(@rows, @i) /* get row based on counter */
    SET @Article = field(@row,"Article Title")
    SET @Description = field(@row,"Description")
    SET @Image = field(@row,"Image")
    SET @linkTrip = field(@row,"Permalink")
    SET @locationCity = field(@row,"Location_City")
    SET @locationCountry = field(@row,"Location_Country")

    /* fallback */
    IF empty(@linkTrip) THEN
      SET @linkTrip = @defaultURL
    ENDIF

    /* cleanup data */
    if IndexOf(@locationCity,@bara) > 0 THEN 
      SET @locationCity = Substring(@locationCity,1, Subtract(IndexOf(@locationCity,@bara),1))
    endif

    if IndexOf(@locationCountry,@bara) > 0 THEN 
      SET @locationCountry = Substring(@locationCountry,1, Subtract(IndexOf(@locationCountry,@bara),1))
    endif
    /* end cleanup */

    IF (@primaryLocation == @locationCity) 
    or (@primaryLocation == @locationCountry) THEN
    ]%%
      From the blog piece for primary location:<br>
      Article name:%%=v(@Article)=%%<br>
      <br>
      Primary location: %%=v(@primaryLocation)=%%<br>
      <br>
      Description: %%=v(@Description)=%%
      <br>
      <a href="%%=RedirectTo(@linkTrip)=%%"><img src="%%=v(@Image)=%%" width="600" height="400"></a>
      %%[
    ELSEIF (@secondaryLocation == @locationCity) 
    or (@secondaryLocation == @locationCountry) THEN
      ]%%
        From the blog piece for secondary location:<br>
        Article name: %%=v(@Article)=%%<br>
        <br>
        Description: %%=v(@Description)=%%
        <br>
        <a href="%%=RedirectTo(@linkTrip)=%%"><img src="%%=v(@Image)=%%" width="600" height="400"></a>
      %%[ 
    ELSE 
      ]%%
        DEFAULT CONTENT because there was no match for primary and secondary location
      %%[
    ENDIF
  NEXT @i 
ELSE
]%%
  DISPLAY SOME ERROR MESSAGE, no data found.
%%[  
ENDIF
]%%

Hope this helps!
0
Jonas Lamberty 13 Май 2020 в 17:06