Настройка средство связи в рассылке по-умолчанию

Добрый день!

Еще одна замечательная реализация настройки указания определенного поля Средства связи, которое будет участвовать в рассылке.

Итак, предположим, что мы хотим реализовать рассылку по Контактам по Средствам связи 4.

Необходимо:
1. Запустить Terrasoft Administrator.
2. Открыть сервис sq_ContactCommunication.
Выделить ветку Parameters, добавить параметр под названием Communication4TypeID, с такими свойствами:

Выделить ветку Where, добавить фильтр сравнения, заполнить свойства подобным образом:

Сохранить изменения.

3. Открыть сервис sq_ContactCommunicationInMassMail. Выделить в ветке Select колонку Email и изменить ее свойства следующим образом:

Сохранить изменения.

4. Открыть сервис wnd_ContactInMassMailGridAreaScrip. Добавить тело скрипта новую функцию, такого содержимого:

function GetContactCommunication4Dataset() {
         if (!Assigned(ContactInMassMailGridArea.ContactCommunicationDataset)) {
                   var Dataset =  
                            GetLookupDatasetCopy(BaseGridArea.GridDataset,
                            'ContactCommunicationID');
                   ContactInMassMailGridArea.ContactCommunicationDataset = Dataset;
                   var Email = GetEmailCommunicationTypeID();
                   ApplyDatasetFilter(Dataset, 'Communication4TypeID', Email, true);
         }
         return ContactInMassMailGridArea.ContactCommunicationDataset;
}

Затем найти функцию под названием function GetSelectGroupResult(Sender, Message) и изменить ее, как отображено ниже:

function GetSelectGroupResult(Sender, Message) {
         var AddedCount = 0;
         var TotalCount = 0;
         var GroupDataset = GetGroupDataset('tbl_ContactGroup');
         ApplyDatasetFilter(GroupDataset, 'OwnerID', Connector.CurrentUser.ContactID,
                   true);
         var GroupIDs = GetSelectDataResultKeyValues(Sender, Message);
         for (var i = 0; i GroupIDs.Count; i++) {
                   var GroupID = GroupIDs.Items(i);
                   if (GroupID == null) {
                            return;
                   }
                   ApplyDatasetFilter(GroupDataset, 'ID', GroupID, true);
                   GroupDataset.Open();
                   if (GroupDataset.Values('IsFiltered') == 1) {
                            var FilterBuilder = GetContactInMassMailFilterBilder();
                            var Dataset = FilterBuilder.Dataset;
                            FilterBuilder.FilterDataset = GroupDataset;
                            FilterBuilder.Load();
                            FilterBuilder.ApplyFilter();            
                   } else {
                            var ParentGroupID = GroupDataset.Values('ParentGroupID');
                            if (ParentGroupID == null) {
                                var Result = ShowConfirmationDialog(
                                               "Данная операция может занять несколько минут. Продолжить?");
                if (Result != mrYes) {
                    GroupDataset.Close();
                    return;
                }
                                      var Dataset = GetSingleItemByCode('ds_AllContactsEmailOpt',
                                               'MassMail');
                                      Dataset.FetchRecordsCount = -1;
                            } else {
                                      var Dataset = GetSingleItemByCode('ds_ContactInGroupEmail',
                                               'MassMail');
                                      Dataset.FetchRecordsCount = -1;
                                      ApplyDatasetFilter(Dataset, 'GroupID', GroupID, true);
                            }
                   }        
                   GroupDataset.Close();
                   Dataset.Open();
                   var CommunicationDataset = GetSingleItemByCode('ds_ContactCommunicationInMassMail',
                            'ContactInMassMailGridArea');
                   var MassMailID = GetAttribute(Self, 'ParentItemID');
                   try {
                            CommunicationDataset.DisableEvents();
                            try {          debugger;
                                      //var ContactCommunicationDataset = GetContactCommunicationDataset();
                                               var ContactCommunicationDataset = GetContactCommunication4Dataset();
                                      var ContactID;
                                      while (!Dataset.IsEOF) {  
                                               TotalCount = TotalCount + 1;
                                               if (!Dataset.Values('EmailOptOut')) {
                                                        ContactID = Dataset.Values('ID');
                                     ApplyDatasetFilter(ContactCommunicationDataset,
                                                                  'ContactID', ContactID, true);
                                               ContactCommunicationDataset.Open();
                                               try {
                                     if (!IsDatasetEmpty(ContactCommunicationDataset)) {
                                 var ContactCommunicationID =
                                                                           ContactCommunicationDataset.Values('ID');
                                                            if (!CheckIsInContact(ContactCommunicationID)) {
                                                                           CommunicationDataset.Append();
                                                                           CommunicationDataset.Values('ID') =
                                                                                     Connector.GenGUID();
                                                                           CommunicationDataset.Values('StatusID') =
                                                                                     ms_WaitingForSending;
                                                                           CommunicationDataset.Values('MassMailID') =
                                                                                     MassMailID;
                                                                           CommunicationDataset.Values(
                                                                                     'ContactCommunicationID') =
                                                                                       ContactCommunicationID;
                                                                           CommunicationDataset.Post();
                                                                           AddedCount = AddedCount + 1;
                                                                  }
                                                        }
                                               } finally {
                                                        ContactCommunicationDataset.Close();
                                               }
                                      }
                                      Dataset.GotoNext();          
                                      }
                            } finally {
                                      CommunicationDataset.EnableEvents();
                            }
                   } finally {
                            Dataset.Close();
                   }        
                   RefreshDataset(BaseGridArea.GridDataset);
         }
         var Message = FormatStr("Добавлено %1 из %2 контактов.", AddedCount,
                   TotalCount);
         if (TotalCount > AddedCount) {
             var NotAdded = TotalCount - AddedCount;
             var AdditionalMessage = FormatStr(
                            "\n%1 контакт(ов) не были добавлены по следующим причинам:\n", NotAdded);
                   var NotAddedReasons = "Установлен флаг Не включать в рассылку,\nили у контакта не указан E-mail,\nили контакт уже добавлен к рассылке";
                   Message = Message + AdditionalMessage + NotAddedReasons;
         }
         ShowInformationDialog(Message);
}

Сохранить внесенные изменения.

5. Перезапустить приложение Terrasoft. Проверить работу функционала.

Приятной работы!

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

Нравится

0 комментариев
Показать все комментарии