Добрый день
Просьба подсказать, где находится процесс по копированию карточки е-мейл? Имеется в виду процесс, к-ый происходит при нажатии на кнопку "Копировать" . Я хотела бы посмотреть, как описаны действия по копированию данных из "старой" е-мейл в новую? Заранее спасибо
Нравится
Это не процесс, а логика в нескольких карточках.
Базовая для всех разделов логика копирования полей записи находится в «BaseModuleEditPage» в скрипте «ScriptPageLoadComplete» после строки «if (IsCopy)».
Для Email также есть отдельно логика копирования файлов в «EmailEditPage» в скрипте «FilesCopyScriptTask».
В обоих случаях проверяется истинность параметра IsCopy в БП карточки и в зависимости от этого производятся те или иные действия.
Подскажите, пожалуйста, как лучше сделать процесс пересылки е-мейл активности? Новую кнопку "Переслать" (здесь нужно скопировать данные е-мейл-активности в новую е-мейл активность, перед этими данными написать, как в outlook
From:
Sent:
To:
Cc:
Subject: .
в полях карточки е-мейл Кому и копия = скопированные адреса) ?
Или же модифицировать имеющиеся скрипты?
Татьяна, такое можно сделать и с новой кнопкой, аналогичной кнопке копирования, и с переделкой логики существующей кнопки.
Вы можете заказать такие доработки у компании Terrasoft или кого-то из партнёров.
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(); } }
В базовой странице реестра. Это можно увидеть, задав в поиске по исходникам схемы по слову "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;
Безусловно, это печально.
Попробуйте отладиться, посмотреть, в какие элементы процесса происходит заход. Может, по этой стрелке движения нет.