Я пишу вам о проблеме, с которой мы столкнулись с небольшим количеством кода, который выполняет поиск / получение.
У нас есть три расширения данных: «feed_test», «ml_contacts_ppr» и «newsletter_subscribers_ppr». Скрипт просматривает l oop в feed_test и сравнивает поле электронной почты с полем электронной почты ml_contacts. Если есть дубликат, то скрипт переходит на уровень newsletter_subscribers_ppr DE, где он проверяет, существует ли идентификатор, если он не существует, добавляет его.
Возьмем случай, когда 10 записей находятся в "feed_test" DE, из которых 2 имеют идентичный адрес электронной почты, а DE newsletter_subscribers_ppr пуст. Как объяснялось выше, поле электронной почты DE "feed_test" сравнивается с полем электронной почты DE "ml_contacts_ppr". Все 9 записей уже существуют, поэтому ни одна не добавляется. Скрипт проверяет, существует ли ml_id в newsletter_subscribers_ppr DE. Его не существует, поэтому он добавляет 9 записей в поле. Для этого мы проверяем с помощью поиска, существуют ли эти ml_id в newsletter_subscribers_ppr. Их не существует, поэтому они добавлены в newsletter_subscribers_ppr DE. . Проблема в том, что при повторном запуске поиска он не находит повторяющуюся запись и пытается снова вставить ту же запись. Затем возникает ошибка.
Пожалуйста, найдите прикрепленный образец кода, а также модель данных, которую мы пытаемся достичь.
Заранее благодарим вас за вашу помощь!
<script runat="server">
Platform.Load("core", "1.1.1");
try{
var env = "ppr"
if (env == "prod"){
var name_de_magento_feed = "end_consumer_contacts_prod";
var name_de_ml_contact = "ml_contacts";
var name_de_newsletter_subscribers = "newsletter_subscribers";
var name_de_website_subscribers = "website_subscribers";
var id_public_list = "543";
var name_de_logs = "logs_prod";
}else{
var name_de_magento_feed = "feed_test";
var name_de_ml_contact = "ml_contacts_ppr";
var name_de_newsletter_subscribers = "newsletter_subscribers_ppr";
var name_de_website_subscribers = "website_subscribers_ppr";
var id_public_list = "542";
var name_de_logs = "logs_ppr";
}
var ml_contact = DataExtension.Init(name_de_ml_contact);
var newsletter_subscribers = DataExtension.Init(name_de_newsletter_subscribers);
var website_subscribers = DataExtension.Init(name_de_website_subscribers);
var logs_de = DataExtension.Init(name_de_logs);
var updateToFalseProcessed = website_subscribers.Rows.Update({processed:"false"}, ["processed"], ["true"]);
var records = retrieveAllRecords(name_de_magento_feed);
function retrieveFieldNames(name) {
var attr = DataExtension.Retrieve({ Property: "Name", SimpleOperator: "equals", Value: name });
var de = DataExtension.Init(attr[0].CustomerKey);
var fields = de.Fields.Retrieve();
fields.sort(function (a, b) { return (a.Ordinal > b.Ordinal) ? 1 : -1 });
var out = [];
for (k in fields) {
out = out.concat(fields[k].Name);
}
return out;
}
function retrieveAllRecords(name) {
var prox = new Script.Util.WSProxy();
var cols = retrieveFieldNames(name);
var config = {
name: name,
cols: cols
}
var records = [],
moreData = true,
reqID = data = null;
while (moreData) {
moreData = false;
if (reqID == null) {
data = prox.retrieve("DataExtensionObject[" + config.name + "]", config.cols);
} else {
data = prox.getNextBatch("DataExtensionObject[" + config.name + "]", reqID);
}
if (data != null) {
moreData = data.HasMoreRows;
reqID = data.RequestID;
for (var i = 0; i < data.Results.length; i++) {
var result_list = data.Results[i].Properties;
var obj = {};
for (k in result_list) {
var key = result_list[k].Name;
var val = result_list[k].Value;
if (key.indexOf("_") != 0) obj[key] = val;
}
var email = obj['email'];
var subscriber_id = obj['subscriber_id'];
var customer_id = obj['customer_id'];
var filter = {Property:"email",SimpleOperator:"equals",Value:email};
var contact = ml_contact.Rows.Retrieve(filter);
//CHECK (EMAIL) IF EXIST IN ML_Contacts
if (contact.length > 0){
var existing_ml_id = contact[0].ml_id;
var existing_email = contact[0].email;
var filter_newsletter = {Property:"email",SimpleOperator:"equals",Value:email};
var lookup_newsletter_subscribers = newsletter_subscribers.Rows.Retrieve(filter_newsletter);
//CHECK (ML_ID) IF EXIST IN NEWSLETTER_SUBSCRIBERS
if (lookup_newsletter_subscribers.length > 0){
var website_subscribers_check = website_subscribers.Rows.Lookup(["email"],[email]);
if (website_subscribers_check.length > 0) {
var update_website_subscribers = Platform.Function.UpdateData(
name_de_website_subscribers,
['ml_id', 'email'],
[existing_ml_id, existing_email],
['status', 'processed'],
['true', 'true']
);
}else{
// ADD CONTACT TO WEBSITE_SUBSCRIBERS
var addedNewwebsite_subscribers_2 = Platform.Function.InsertData(
name_de_website_subscribers,
['ml_id', 'email', 'status', 'processed', 'subscriber_id', 'customer_id'],
[existing_ml_id, email, 'true', 'true', subscriber_id, customer_id]
);
}
}else{
// ADD CONTACT TO NEWSLETTER_SUBSCRIBERS
var added_newsletter_subscribers_1 = Platform.Function.InsertData(
name_de_newsletter_subscribers,
['ml_id', 'email', 'status'],
[existing_ml_id, email, 'true']
);
// ADD CONTACT TO WEBSITE_SUBSCRIBERS
var addedNewwebsite_subscribers_1 = Platform.Function.InsertData(
name_de_website_subscribers,
['ml_id', 'email', 'status', 'processed', 'subscriber_id', 'customer_id'],
[existing_ml_id, email, 'true', 'true', subscriber_id, customer_id]
);
}
}else{
sfUpdateString = '';
sfUpdateString = '%'+'%[ set @myGUID = GUID()]%'+'%';
Platform.Function.TreatAsContent(sfUpdateString);
var newMLID = Platform.Variable.GetValue("@myGUID");
// ADD CONTACT TO ML_CONTACTS
var added_ML_Contacts = Platform.Function.InsertData(
name_de_ml_contact,
['ml_id', 'email'],
[newMLID, email]
);
// ADD CONTACT TO NEWSLETTER_SUBSCRIBERS
var added_newsletter_subscribers = Platform.Function.InsertData(
name_de_newsletter_subscribers,
['ml_id', 'email', 'status'],
[newMLID, email, 'true']
);
// ADD CONTACT TO WEBSITE_SUBSCRIBERS
var addedNewwebsite_subscribers = Platform.Function.InsertData(
name_de_website_subscribers,
['ml_id', 'email', 'status', 'processed', 'subscriber_id', 'customer_id'],
[newMLID, email, 'true', 'true', subscriber_id, customer_id]
);
}
}
}
}
return true;
}
} catch (e) {
var text_desc = "Errors:" + Stringify(e);
var type_desc = "Error";
// LOG ERROR
var log_err = Platform.Function.InsertData(
'logs_ppr',
['text', 'type'],
[text_desc, type_desc]
);
Write(Stringify(e));
}
</script>