Копирование е-мейл

Добрый день

Просьба подсказать, где находится процесс по копированию карточки е-мейл? Имеется в виду процесс, к-ый происходит при нажатии на кнопку "Копировать" . Я хотела бы посмотреть, как описаны действия по копированию данных из "старой" е-мейл в новую? Заранее спасибо

Нравится

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

Это не процесс, а логика в нескольких карточках.

Базовая для всех разделов логика копирования полей записи находится в «BaseModuleEditPage» в скрипте «ScriptPageLoadComplete» после строки «if (IsCopy)».
Для Email также есть отдельно логика копирования файлов в «EmailEditPage» в скрипте «FilesCopyScriptTask».

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

Подскажите, пожалуйста, как лучше сделать процесс пересылки е-мейл активности? Новую кнопку "Переслать" (здесь нужно скопировать данные е-мейл-активности в новую е-мейл активность, перед этими данными написать, как в outlook
From:
Sent:
To:
Cc:
Subject: .
в полях карточки е-мейл Кому и копия = скопированные адреса) ?
Или же модифицировать имеющиеся скрипты?

Татьяна, такое можно сделать и с новой кнопкой, аналогичной кнопке копирования, и с переделкой логики существующей кнопки.

Вы можете заказать такие доработки у компании Terrasoft или кого-то из партнёров.

Спасибо, я хочу сама попробовать это сделать

"Зверев Александр" написал:Для Email также есть отдельно логика копирования файлов в «EmailEditPage» в скрипте «FilesCopyScriptTask».

не нашла такого скрипта в EmailEditPage

А он есть.

Можете выслать, что именно написано в FilesCopyScriptTask?
ВОзм-но, в EmailEditPage этот скрипт не так называется.

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;
		}

Из неё вызывается:

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<Guid, Guid> fileList = new Dictionary<Guid, Guid>();
 
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<Guid>(idSchemaColumn.ColumnValueName);
 
	var nameSchemaColumn = src.Schema.Columns.GetByName(nameColumn.Name);
	var fileName = src.GetTypedColumnValue<String>(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<String>(notesSchemaColumn.ColumnValueName);
 
	var versionSchemaColumn = src.Schema.Columns.GetByName(versionColumn.Name);
	var fileVersion = src.GetTypedColumnValue<System.Int32>(versionSchemaColumn.ColumnValueName);
 
	var sizeSchemaColumn = src.Schema.Columns.GetByName(sizeColumn.Name);
	var fileSize = src.GetTypedColumnValue<System.Int32>(sizeSchemaColumn.ColumnValueName);
 
	var typeSchemaColumn = src.Schema.Columns.GetByName(typeColumn.Name);
	var fileTypeId = src.GetTypedColumnValue<Guid>(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<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();
}
		}

А схема процесса какая?

EmailEditPage.
схема БП карточки

Добрый день
подскажите, пожалуйста, где в системе указывается, что при нажатии на кнопку "Копировать" срабатывает условие IsCopy ? т.е. где связь кнопки и условия?

В базовой странице реестра. Это можно увидеть, задав в поиске по исходникам схемы по слову "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;

Безусловно, это печально.
Попробуйте отладиться, посмотреть, в какие элементы процесса происходит заход. Может, по этой стрелке движения нет.

Ну не расстраивайтесь, есть многое, чему можно и радоваться :wink: Если хотите порассуждать на эту тему - я еще тот психолог :idea:

Да, зато опубликовалось без ошибок!:mrgreen:

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