SS JS Lookup / Retrieve не находит добавленную запись после InsertData внутри оператора al oop - PullRequest
0 голосов
/ 26 мая 2020

Я пишу вам о проблеме, с которой мы столкнулись с небольшим количеством кода, который выполняет поиск / получение.

У нас есть три расширения данных: «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>
...