Добрый день! Подскажите, пожалуйста, как корректно внести изменения в процесс выполнения рассылки.
Задача такая, если тип рассылки - Рассылка смс, то емайл для всех адресатов один и тот же, тема - код + мобильный номер контакта, и тема письма с дополнениями.
Вношу изменения в процесс :
var manager = UserConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;
SetMassMailingStatus(MassMailingId, new Guid("ED5F422E-F46B-1410-6590-1C6F65E24BE8"), manager, this.UId);//В работе
Dictionary macrosDictionary = new Dictionary();
PrepareMailSubjectAndBody(manager);
var targetEntitySchemaQuery = new EntitySchemaQuery(manager, "MassMailingContact");
var idMailing = targetEntitySchemaQuery.AddColumn("Id").Name;
var idMassMailing = targetEntitySchemaQuery.AddColumn("MassMailing").Name;

// здесь определяю, если id рассылки для смс, то emailOfMailing или один, или берется у контакта
if (idMassMailing == "c6d6980b-20c3-4b07-8fe9-a2cd44641f7c") {
var emailOfMailing = "sms@massreach.com";
} else {
var emailOfMailing = targetEntitySchemaQuery.AddColumn("Email.Number").Name;
}

var MobilePhoneOfMailing = targetEntitySchemaQuery.AddColumn("MobilePhone.Number").Name;
//var emailOfMailing = targetEntitySchemaQuery.AddColumn("Email.Number").Name;
var accountOwnership = targetEntitySchemaQuery.AddColumn("Contact.Account.Ownership.Name").Name;
var idContactOfMailing = targetEntitySchemaQuery.AddColumn("Contact.Id").Name;
var contactNameOfMailing = targetEntitySchemaQuery.AddColumn("Contact.Name").Name;
var contactGenderNameOfMailing = targetEntitySchemaQuery.AddColumn("Contact.Gender.Name").Name;
targetEntitySchemaQuery.Filters.Add(targetEntitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "MassMailing.Id", MassMailingId));
var listFilter = new EntitySchemaQueryFilterCollection(targetEntitySchemaQuery, LogicalOperationStrict.Or);
listFilter.Add(targetEntitySchemaQuery.CreateIsNullFilter("SendStatus"));
listFilter.Add(targetEntitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.NotEqual, "SendStatus", new Guid("8074FFC0-6107-E011-A646-16D83CAB0980")));
targetEntitySchemaQuery.Filters.Add(listFilter);
var mailingCollection = targetEntitySchemaQuery.GetEntityCollection(UserConnection);
var credentials = new MailCredentials() {
Host = GetSysSettingsValue("SmtpHost"),
Port = Convert.ToInt32(GetSysSettingsValue("SmtpPort")),
UserName = GetSysSettingsValue("SmtpUserName"),
UserPassword = GetSysSettingsValue("SmtpUserPassword"),
};
int smtpTimeout = int.Parse(Terrasoft.Core.Configuration.SysSettings.GetValue(UserConnection, "SmtpTimeout").ToString());
if (smtpTimeout 35) {
smtpTimeout = 35000;
} else {
smtpTimeout *= 1000;
}
credentials.Timeout = smtpTimeout;
object enableSsl = Terrasoft.Core.Configuration.SysSettings.GetValue(UserConnection, "SmtpEnableSsl");
if (enableSsl != null) {
credentials.UseSsl = (bool)enableSsl;
}
var mailClient = new Terrasoft.Mail.SmtpClient(UserConnection, credentials);
foreach (var mailingMacros in mailingCollection) {
Guid targetId = mailingMacros.GetTypedColumnValue(idMailing);
string recepient = mailingMacros.GetTypedColumnValue(emailOfMailing);
if(string.IsNullOrEmpty(recepient)) {
continue;
}
Guid contactId = mailingMacros.GetTypedColumnValue(idContactOfMailing);
ErrorCode = "None";
MacrosHelper.UserConnection = UserConnection;

//аналогично для body
if (idMassMailing == "c6d6980b-20c3-4b07-8fe9-a2cd44641f7c") {
Body = "[Sender]itcol[/Sender][SMS]" + body +"[/SMS]";
} else {
string body = MacrosHelper.ProcessText(
MailBody,
UserConnection.CurrentUser.ContactId,
contactId);
}

string body = MacrosHelper.ProcessText(
MailBody,
UserConnection.CurrentUser.ContactId,
contactId);

//аналогично для title
if (idMassMailing == "c6d6980b-20c3-4b07-8fe9-a2cd44641f7c") {
string title = "794dcc7c3a404454 "+ MobilePhoneOfMailing;
} else {
string title = MailSubject;
}

// string title = MailSubject;
string from = GetSysSettingsValue("MassMailingFromAddress");
MailMessage message = null;
try {
message = new MailMessage {

Subject = title,
Charset = "utf-8",

BodyHtmlText = body,
From = new EmailAddress {
AsString = from
}
};
message.To.Add(new EmailAddress {
AsString = recepient.Trim()
});
FillAttachments(MassMailingId, message.Attachments);
} catch (FormatException e) {
throw new SmtpException("ErrorOnSend", e.Message, e);
}
string mailCodeId = String.Empty;
if (ErrorCode.Equals("None")) {
try {
mailClient.SendMessage(message);
} catch (Exception e) {
ErrorCode = e.Message;
}
}
SetMassMailingContactSendStatus(ErrorCode, targetId, manager);
}
SetMassMailingStatus(MassMailingId, new Guid("FF7F4232-F46B-1410-6690-1C6F65E24BE8"), manager, Guid.Empty);//Завершена
return true;

При компиляции получаю, что имя emailOfMailing отсутствует в текущем контексте, стока ошибки вот эта:
string recepient = mailingMacros.GetTypedColumnValue(emailOfMailing);

аналогично для других переменных - title и body.
Подскажите, пожалуйста, что я делаю неверно. Спасибо!!

Нравится

1 комментарий

Добрый день! Подскажите, пожалуйста, в версии 5.х организована рассылка сообщений. Если у контакта, участвующего в рассылке сообщений, стоит статус "оправлено", разве нельзя еще раз отправить ему сообщение?

Нравится

2 комментария

При нажатии на кнопку «Запустить рассылку» оно специально отфильтровывает те записи с детали, у которых состояние равно «Отправлено», чтобы можно было запустить рассылку второй раз только оставшимся и тем, у кого в первый раз отправилось с ошибкой.

Теоретически, логику можно доработать. Например, вытянуть поле «Состояние отправки» в карточку детали и при необходимости менять вручную.

Спасибо, Александр!

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

Добрый день!

Столкнулся с проблемой, когда представление в BPM наследует таблицу, выводит в интерфейсе мою добавленную колонку, но в SQL таблицу эта колонка не добавляется. Вот как это выглядит:

Добавил колонку "Специальная цена" в таблицу, которую наследует представление:
1

В представлении эта колонка отображается как унаследованная. Все верно:
2

Но в БД ее нет:
3

а следовательно и при выводе колонки в интерфейсе из-под пользователя я получаю ошибку, что колонки нет, что логично.

Вот и вопрос: как добавить эту же колонку в представление?

Нравится

11 комментариев

Виталий,

Во View базы данных колонка добавляется ручками путем правки этого самого View.

Через конфигурацию по сути только настраивается соответствие сущности в системе и представления в БД.

Допустим так... Тогда как этими ручками добавить во View колонку? В контекстном меню ничего нет. В схеме тоже никаких команд. В дизайнере тем более. На MSDN тоже нет ни слова о добавлении во View колонки.

И еще: если доступа к базе у меня нет, а только интерфейс, получается, что я не смогу выполнить свою задачу?

Подскажите, если не трудно. Заранее спасибо!

"Виталий Марушко" написал:Допустим так... Тогда как этими ручками добавить во View колонку? В контекстном меню ничего нет. В схеме тоже никаких команд. В дизайнере тем более. На MSDN тоже нет ни слова о добавлении во View колонки.

Это получилось выполнить через контекстное меню представления и команды ALTER, дописав туда свою колонку. Немного странно, что нету похожей команды, как у таблицы.

Но вопрос о том, как мне это сделать, если у меня нет доступа к БД остается открытым...

Да. Все верно. Можно сделать через ALTER например.

При работе с представлением вам в любом случае придется создавать его самостоятельно в БД.
Если у вас нет прямого доступа к БД, значит нужно искать варианты выполнения SQL-скрипта по модификации/созданию представления из приложения.

Виталий

Если у вас версия 7.x сделать это можно с помощью sql-сценария в пакете
Если у вас версия 5.x то думаю стоит посмотреть в сторону класса CustomQuery.

Дмитрий, спасибо за помощь! Версия у меня 5.х (потому и тему на форуме создал соответственно). А на счет CustomQuery - да, вариант похоже единственный. Думал, что возможно существует способ это выполнить без написания такого сценария... Видимо, нет.

Ессть готовая страница для выполнения произвольных SQL-запросов, её нужно загрузить в конфигурацию.

Во View действительно добавлять колонки только руками.

"Толмачев Дмитрий Юрьевич" написал:Через конфигурацию по сути только настраивается соответствие сущности в системе и представления в БД.

это тоже потом только ручками?

1. Добавляете во View колонку через БД
2. В конфигурации в объект добавляете колонку с тем же именем и типом, публикуете

Объект в конфигурации и View в БД связываются благодаря одинковому названию и наличию галки «Представление».

"Зверев Александр" написал:В конфигурации в объект добавляете колонку с тем же именем и типом, публикуете

bpm мог бы научиться сам считывать колонки View, конечно...

Иногда View вместо таблицы используют в особых случаях, со сложными union и join, триггерами. Там нельзя просто так взять и добавить колонку, нужно думать.

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

Добрый день!

Вопрос по BPMonline Realty 5.4

Подскажите, как правильно настроить автоматическую синхронизацию BPM с почтой. Требуется получение электронных писем с почтового сервера gmail (к примеру). Если синхронизация настраивается, то можно ли задать периодичность/расписание? Возможно, есть какие-то примеры.

Заранее спасибо!

Нравится

1 комментарий

Добрый день!

вопрос по bpm online realty версии 5.4.1.728

Подскажите, какие есть варианты настройки автоматического получения электронных писем с почтового сервера gmail. Если синхронизация настраивается, то можно ли задать периодичность/расписание?

Нравится

1 комментарий

Здравствуйте!

Вопрос по bpm online realty 5.4.1.728

Интересует возможность настройки синхронизации с gmail (для входящих писем). Какие существуют способы настройки синхронизации, возможно ли задавать расписание на автоматическое получение входящих писем?
Спасибо!

Нравится

2 комментария

Добрый день
При открытии Задачи авт-ки отправляется уведомление (е-мейл) ответственному по этой Задаче. Можно ли сделать так, чтобы этот е-мейл делал запись в календаре в Outlook или чтобы была пометка зафиксировать это в календаре в Outlook ?

Нравится

1 комментарий

Добрый день
Есть новый раздел. Помогите, пожалуйста, как сделать возм-ть просмотра расписания?

Нравится

13 комментариев

Чтобы сделать возм-сть просмотра расписания, можно посм. как это сделано в разд. активностей.
См. схему «ActivitiesShedulerPage» и то, как там использ. контрол «ScheduleEdit». Также см., как эта страница встраивается в раздел «ActivitiesModulePage».

Правильно ли я понимаю, что мне нужно создать новые "Группу" и "Элемент в Группе" ?

Группы и расписание вроде бы никак не связаны. Как хотите.

Делаю страницу расписания нового раздела, сохранила/опубликовала. Почему расписания нет в нужном разделе?

Думаю, расписания нет, поскольку Вы его добавили неправильно.
Может, стоит заказать разработку этого раздела у Terrasoft или компаний-партнёров?

Нет, не стоит.

Date: 04.12.2015 9:45:55 Date (UTC): 04.12.2015 6:45:55 Exception Message: В типе "ZapShedulerPageEventsProcess" отсутствует свойство "IsModuleProcessesTuningMode" Exception Type: Terrasoft.Common.InvalidObjectStateException Exception Source: Terrasoft.Common

подскажите, пожалуйста, что это за ошибка?

Добрый день!
Скорее всего у Вас есть несоответствие с параметрами процесса. Где-то в коде он используется, но отсутствует среди параметров

Добрый день
Если проводить аналогию с расписанием Активности - этот же параметр где можно найти?

"TatianaM" написал:

Date: 04.12.2015 9:45:55 Date (UTC): 04.12.2015 6:45:55 Exception Message: В типе "ZapShedulerPageEventsProcess" отсутствует свойство "IsModuleProcessesTuningMode" Exception Type: Terrasoft.Common.InvalidObjectStateException Exception Source: Terrasoft.Common

подскажите, пожалуйста, что это за ошибка?

- эта ошибка исчезла.

Теперь при переходе в Расписание почему-то не отображаются записи. Что может быть причиной?

Записи могут не отображаться из-за того, что идет некорректный запрос. При входе проверьте профайлером, что запрос идет верный и возвращает данные. Если все Ок, то тогда нужно искать в интерфейсе

P.S. Да и идет ли запрос вообще

Подскажите, а где должен идти запрос?

В профайлере SQL Server'а

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

Добрый день!
7.6
В карточке редактирования Базы знаний есть такое поле Решение ( с HTML-тегами)
Можно ли увеличить его размер? - высоту увеличить

Не через мастер не получается увеличить(почему-то обратно потом уменьшается), ни через дизайнер.
Это максимальный размер такого поля?

Нравится

4 комментария

Дарья, оно конфигурируется в карточке, надо искать где и пробовать мержить...

Александр, вот это поле в карточке

{
"operation": "insert",
"parentName": "KnowledgeBasePageGeneralBlock",
"propertyName": "items",
"name": "Notes",
"values": {
"contentType": Terrasoft.ContentType.RICH_TEXT,
"layout": {"column": 0, "row": 0, "colSpan": 24},
"labelConfig": {
"visible": false
},
"controlConfig": {
"imageLoaded": {
"bindTo": "insertImagesToKnowledgeBase"
},
"plainTextValue": {
"bindTo": "NotHtmlNote"
},
"images": {
"bindTo": "knowBaseImagesCollection"
},
"plainTextMode": {
"bindTo": "plainTextMode"
}
}
}
}

Как можнно увеличить его размер?

Вероятно как-то так:
сontentType": Terrasoft.ContentType.RICH_TEXT,
"layout": {"column": 0, "row": 0, "colSpan": 24},
"height": "600px",

Спасибо

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

Добрый день
Стоит задача: сделать новую деталь в разделе "Запрос на изменение". В этой детали должен быть как бы реестр изменения поля "состояние" этого ЗИ: наименование состояния и дата его изменения. Пожалуйста, помогите с порядком действий при добавлении этой детали. она должна быть новая или связанная? Заранее спасибо

Нравится

1 комментарий

Вам нужно добавить новую деталь.
Связанная — это отображение в виде детали существующего раздела.
О создании детали написано в инструкции на стр. 206.

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