Добрый день.
При создании е-мейл у меня в HTMLBody указывается подпись. Подскажите, пожалуйста, где и как нужно прописать, чтобы и при копировании е-мейл активности эта же подпись тоже вставлялась?
Нравится
Здравствуйте, Татьяна.
Поищите в исходном коде процесса объекта проверку условия IsCopy.
Найдите скрипт, где осуществляется проверка, и в нем выполняйте заполнение поля HTMLBody копируемой карточки.
Татьяна, в этом условии уже есть другие примеры.
Посмотрите, пожалуйста, по аналогии.
Здравствуйте, Татьяна!
В базовой версии - это метод EnableSendButton в процессе страницы карточки Email.
Если Вы не знаете, где именно искать - легче всего открыть исходный код всей схемы и выполнить поиск по нему.
Добрый день
в IsCopy в EnableSendButton карточки Е-мейл у нас написано:
if (IsCopy) {
var sysSettingsValue = Terrasoft.Core.Configuration.SysSettings.GetValue(UserConnection, "SmtpUserName");
var AuthorId = UserConnection.CurrentUser.ContactId;
var AuthorName = UserConnection.CurrentUser.ContactName;
var startDate = DateTime.Now;
var dataSource = Page.DataSource;
Page.SenderEdit.SetValue(sysSettingsValue);
Page.DataSource.ActiveRow.SetColumnValue("Sender", sysSettingsValue);
dataSource.ActiveRow.SetColumnValue("AuthorId", AuthorId);
dataSource.ActiveRow.SetColumnValue("StartDate", startDate);
dataSource.ActiveRow.SetColumnValue("DueDate", dueDate);
Page.StartDateEdit.SetValue(startDate);
Page.DueDateEdit.SetValue(dueDate);
Page.AuthorEdit.SetValueAndText(AuthorId,AuthorName);
Я не вижу копирования HTMLBody.
Логика копирования этого поля задана в функции CopyFiltes этой же страницы.
В частности, там есть такое:
if(isChangeHtmlBody && fileList.Count > 0){ string columnName = "Body"; if(activeRow.Schema.Columns.FindByName("HtmlBody") != null){ columnName = "HtmlBody"; } string messageBody = activeRow.GetTypedColumnValue<string>(activeRow.Schema.Columns.GetByName(columnName)); messageBody = messageBody.Replace(srcGuid.ToString(), targetGuid.ToString()); foreach(var item in fileList){ messageBody = messageBody.Replace(item.Key.ToString().ToLower(), item.Value.ToString().ToLower()); } var update = new Update(userConnection, activeRow.Schema.Name) .Set(columnName, Column.Parameter(messageBody)) .Where("Id").IsEqual(Column.Parameter(activeRow.PrimaryColumnValue)); update.Execute(); }
То есть HtmlBody копируется, если к письму приложены файлы (проверка fileList.Count > 0). Видимо, это сделано, чтобы вместе с вёрсткой не потерять и картинки. Возможно, стоит попробовать убрать эту часть условия, чтобы HtmlBody копировалось в любом случае.
Видимо, добавить её в переменную messageBody спереди её полученного содержимого.
Добрый день.
Пишу так:
if(isChangeHtmlBody && fileList.Count > 0){
string columnName = "Body";
if(activeRow.Schema.Columns.FindByName("HtmlBody") != null){
columnName = "HtmlBody";
}
//
string messageBody = "Hello";
messageBody = string.Concat(messageBody, activeRow.GetTypedColumnValue(activeRow.Schema.Columns.GetByName(columnName)));
//
//string messageBody = activeRow.GetTypedColumnValue(activeRow.Schema.Columns.GetByName(columnName));
messageBody = messageBody.Replace(srcGuid.ToString(), targetGuid.ToString());
foreach(var item in fileList){
messageBody = messageBody.Replace(item.Key.ToString().ToLower(), item.Value.ToString().ToLower());
}
var update = new Update(userConnection, activeRow.Schema.Name)
.Set(columnName, Column.Parameter(messageBody))
.Where("Id").IsEqual(Column.Parameter(activeRow.PrimaryColumnValue));
update.Execute();
В итоге - опубликовано без ошибок. Но при копировании е-мейл активности - все без изменений, ничего не добавилось. Подскажите, пжста, в чем ошибка?
Татьяна, Вы не поменяли условие, попробуйте убрать «&& fileList.Count > 0»
Добрый день.
Закоментировала. Опубликовано без ошибок, тем не менее, все без изменений. Не подскажете?
//if(isChangeHtmlBody && fileList.Count > 0){
string columnName = "Body";
if(activeRow.Schema.Columns.FindByName("HtmlBody") != null)
{
columnName = "HtmlBody";
}
//
string messageBody = "Hello";
messageBody = string.Concat(messageBody, activeRow.GetTypedColumnValue(activeRow.Schema.Columns.GetByName(columnName)));
//
//string messageBody = activeRow.GetTypedColumnValue(activeRow.Schema.Columns.GetByName(columnName));
messageBody = messageBody.Replace(srcGuid.ToString(), targetGuid.ToString());
foreach(var item in fileList)
{
messageBody = messageBody.Replace(item.Key.ToString().ToLower(), item.Value.ToString().ToLower());
}
var update = new Update(userConnection, activeRow.Schema.Name)
.Set(columnName, Column.Parameter(messageBody))
.Where("Id").IsEqual(Column.Parameter(activeRow.PrimaryColumnValue));
update.Execute();
//}
Поставьте breakpoint, посмотрите, заходит ли в функцию, выполняется ли update, какие там значения переменных и т.п.