При рассылке не всегда отрабатывает установка макросных полей в шаблон Outlook. Может быть можно вставить какую-то проверку, чтобы в случае существования #XXXXX# повторно менять тело письма?
Еще одна замечательная реализация настройки указания определенного поля Средства связи, которое будет участвовать в рассылке.
Итак, предположим, что мы хотим реализовать рассылку по Контактам по Средствам связи 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