Добрый день!
Еще одна замечательная реализация настройки указания определенного поля Средства связи, которое будет участвовать в рассылке.
Итак, предположим, что мы хотим реализовать рассылку по Контактам по Средствам связи 4.
Необходимо:
1. Запустить Terrasoft Administrator.
2. Открыть сервис sq_ContactCommunication.
Выделить ветку Parameters, добавить параметр под названием Communication4TypeID, с такими свойствами:
Выделить ветку Where, добавить фильтр сравнения, заполнить свойства подобным образом:
Сохранить изменения.
3. Открыть сервис sq_ContactCommunicationInMassMail. Выделить в ветке Select колонку Email и изменить ее свойства следующим образом:
Сохранить изменения.
4. Открыть сервис wnd_ContactInMassMailGridAreaScrip. Добавить тело скрипта новую функцию, такого содержимого:
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) и изменить ее, как отображено ниже:
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
Нравится