Добрый день
Просьба подсказать, где находится процесс по копированию карточки е-мейл? Имеется в виду процесс, к-ый происходит при нажатии на кнопку "Копировать" . Я хотела бы посмотреть, как описаны действия по копированию данных из "старой" е-мейл в новую? Заранее спасибо
Нравится
Это не процесс, а логика в нескольких карточках.
Базовая для всех разделов логика копирования полей записи находится в «BaseModuleEditPage» в скрипте «ScriptPageLoadComplete» после строки «if (IsCopy)».
Для Email также есть отдельно логика копирования файлов в «EmailEditPage» в скрипте «FilesCopyScriptTask».
В обоих случаях проверяется истинность параметра IsCopy в БП карточки и в зависимости от этого производятся те или иные действия.
Подскажите, пожалуйста, как лучше сделать процесс пересылки е-мейл активности? Новую кнопку "Переслать" (здесь нужно скопировать данные е-мейл-активности в новую е-мейл активность, перед этими данными написать, как в outlook
From:
Sent:
To:
Cc:
Subject: .
в полях карточки е-мейл Кому и копия = скопированные адреса) ?
Или же модифицировать имеющиеся скрипты?
Татьяна, такое можно сделать и с новой кнопкой, аналогичной кнопке копирования, и с переделкой логики существующей кнопки.
Вы можете заказать такие доработки у компании Terrasoft или кого-то из партнёров.
[csharp]
public virtual bool FilesCopyScriptTaskExecute(ProcessExecutingContext context) {
var targetGuid = Page.DataSource.ActiveRow.PrimaryColumnValue;
var srcGuid = new Guid(Page.GetParameterValue("recordId").ToString());
CopyFiltes(UserConnection, Page.DataSource.ActiveRow, srcGuid, targetGuid, "Activity", string.Empty, true);
return true;
}
[/csharp]
Из неё вызывается:
[csharp]
public virtual void CopyFiltes(UserConnection userConnection, Entity activeRow, Guid srcGuid, Guid targetGuid, string srcSchema, string targetSchema, bool isChangeHtmlBody) {
if(string.IsNullOrEmpty(targetSchema)){
targetSchema = srcSchema;
}
var targetEntitySchema = userConnection.EntitySchemaManager.GetInstanceByName(string.Format("{0}File", targetSchema));
Dictionary fileList = new Dictionary();
var srcESQ = new EntitySchemaQuery(userConnection.EntitySchemaManager, string.Format("{0}File", srcSchema));
srcESQ.IsDistinct = true;
var idColumn =srcESQ.AddColumn(srcESQ.RootSchema.GetPrimaryColumnName());
var nameColumn = srcESQ.AddColumn("Name");
var dataColumn = srcESQ.AddColumn("Data");
var notesColumn = srcESQ.AddColumn("Notes");
var versionColumn = srcESQ.AddColumn("Version");
var sizeColumn = srcESQ.AddColumn("Size");
var typeColumn = srcESQ.AddColumn("Type");
srcESQ.Filters.Add(srcESQ.CreateFilterWithParameters(FilterComparisonType.Equal, srcSchema, srcGuid));
var srcList = srcESQ.GetEntityCollection(userConnection);
foreach(var src in srcList) {
var idSchemaColumn = src.Schema.Columns.GetByName(idColumn.Name);
var fileId = src.GetTypedColumnValue(idSchemaColumn.ColumnValueName);
var nameSchemaColumn = src.Schema.Columns.GetByName(nameColumn.Name);
var fileName = src.GetTypedColumnValue(nameSchemaColumn.ColumnValueName);
var dataSchemaColumn = src.Schema.Columns.GetByName(dataColumn.Name);
var fileData = src.GetBytesValue(dataSchemaColumn.ColumnValueName);
var notesSchemaColumn = src.Schema.Columns.GetByName(notesColumn.Name);
var fileNotes = src.GetTypedColumnValue(notesSchemaColumn.ColumnValueName);
var versionSchemaColumn = src.Schema.Columns.GetByName(versionColumn.Name);
var fileVersion = src.GetTypedColumnValue(versionSchemaColumn.ColumnValueName);
var sizeSchemaColumn = src.Schema.Columns.GetByName(sizeColumn.Name);
var fileSize = src.GetTypedColumnValue(sizeSchemaColumn.ColumnValueName);
var typeSchemaColumn = src.Schema.Columns.GetByName(typeColumn.Name);
var fileTypeId = src.GetTypedColumnValue(typeSchemaColumn.ColumnValueName);
var targetEntity = targetEntitySchema.CreateEntity(userConnection);
targetEntity.SetDefColumnValues();
Guid newGuid = targetEntity.PrimaryColumnValue;
targetEntity.SetColumnValue(string.Format("{0}Id", targetSchema), targetGuid);
targetEntity.SetColumnValue("Name", fileName);
targetEntity.SetColumnValue("Data", fileData);
targetEntity.SetColumnValue("Notes", fileNotes);
targetEntity.SetColumnValue("Version", fileVersion);
targetEntity.SetColumnValue("Size", fileSize);
targetEntity.SetColumnValue("TypeId", fileTypeId);
if(targetEntity.Save()){
fileList.Add((Guid)fileId, newGuid);
}
}
if(isChangeHtmlBody && fileList.Count > 0){
string columnName = "Body";
if(activeRow.Schema.Columns.FindByName("HtmlBody") != null){
columnName = "HtmlBody";
}
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();
}
}
[/csharp]
В базовой странице реестра. Это можно увидеть, задав в поиске по исходникам схемы по слову "Copy" (с кавычками). А далее в странице редактирования вычитывается это же слово из параметров в URL.
Добрый день
Создала параметр my (логический), который при нажатии на кнопку "Переслать" принимает значение true.
Опубликовывает без ошибок, но файлы не копируются при нажатии на "Переслать".
// в Скрипте подготовки процесса действия Открыть карточку указано:
my = true;
var defValuesId = Guid.NewGuid();
var defValues = new Dictionary ();
defValues.Add("Contact", Page.ContactEdit.Value.ToString());
defValues.Add("Account", Page.AccountEdit.Value.ToString());
defValues.Add("CopyRecepient", Page.CopyRecepientEdit.Value.ToString());
defValues.Add("Title",Page.TitleEdit.Value.ToString());
if (new Guid (Page.IncidentEdit.Value.ToString()) != Guid.Empty)
{defValues.Add("Incident",Page.IncidentEdit.Value.ToString());}
Guid contactId = UserConnection.CurrentUser.ContactId; //id контакта текущего пользователя
string contactName = UserConnection.CurrentUser.ContactName; //имя контакта текущего пользователя
string contactmail = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "Email", contactId);
string contactdol = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "JobTitle", contactId);
string contactphone = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "Phone", contactId);
string contactMobilePhone = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "MobilePhone", contactId);
string s6 = "
С уважением,
"+ contactName + "
" + contactdol + "
Департамент информационных технологий
АО «ДКС»"+ "
Tel :"+ contactphone + ", " + contactMobilePhone + "
e-mail :"+ contactmail +" , www.dkc.ru";
string text1 = Page.RecepientEdit.Value.ToString();
text1 = text1.Replace(",", "");
text1 = text1.Replace("", "");
text1 = text1.Replace("'СТП'", "");
text1 = text1.Replace("СТП", "");
string text2 = Page.SenderEdit.Value.ToString();
text2 = text2.Replace("support.it@dkc.ru", "");
string text = text2 + "," + text1;
defValues.Add("Recepient", text);
string s1 = "
From :"+ Page.SenderEdit.Value.ToString();
string s2 = "
Sent :"+ (DateTime)Page.DueDateEdit.Value +"(мск)";
string s3 = "
To :" + Page.RecepientEdit.Value.ToString()+"
Cc :"+ Page.CopyRecepientEdit.Value.ToString();
string s4 = "
Subject :"+Page.TitleEdit.Value.ToString()+"
";
string s5 = "
______________________________________________________________________________________________________________
";
string s = s6 + s5 + s1 + s2 + s3 + s4;
string html = Page.DataSource.ActiveRow.GetTypedColumnValue("HtmlBody");
string str = String.Concat(s,html);
defValues.Add("HtmlBody", str);
var ActivityId = Guid.NewGuid();
UserConnection.SessionData[defValuesId.ToString()] = defValues;
var parameters =
new Dictionary {
{"createWithUId", ActivityId.ToString()},
{"entitySchemaUId", "c449d832-a4cc-4b01-b9d5-8a12c42a9f89"},
{"defValuesId", defValuesId.ToString()}
};
OpenTaskEditPage1.OpenerInstanceId = InstanceUId;
OpenTaskEditPage1.UseCurrentActivePage = true;
OpenTaskEditPage1.PageUId = new Guid("dcdda065-321b-4560-aacb-05f6cc72cd80");
OpenTaskEditPage1.PageParameters = parameters ;
return true;
Безусловно, это печально.
Попробуйте отладиться, посмотреть, в какие элементы процесса происходит заход. Может, по этой стрелке движения нет.
