Использую действие Добавление данных (AddDataUserTask1)
Мне нужно создать активность по клиенту типа SMS (в допустимых действиях только Задача, Звонок и E-mail)
Guid SchemaId = new Guid("C449D832-A4CC-4B01-B9D5-8A12C42A9F89");
var DefValues= new Dictionary
string, object>();
DefValues.Add("Recepient", Phone);
DefValues.Add("MsgSubject", "Информирование об открытии счета");
DefValues.Add("Body", Body);
DefValues.Add("StartDate", DateTime.Now);
DefValues.Add("DueDate", DateTime.Now);
DefValues.Add("OwnerId", "410006E1-CA4E-4502-A9EC-E54D922D2C00");//Петр Петрович Петров
DefValues.Add("AuthorId", "410006E1-CA4E-4502-A9EC-E54D922D2C00");//Петр Петрович Петров
DefValues.Add("StatusId", "4BDBB88F-58E6-DF11-971B-001D60E938C6");//Завершена
DefValues.Add("DetailedResult", "Cмс отправлено");
DefValues.Add("ContactId", Contact);
DefValues.Add("AccountId", Account);
DefValues.Add("EmployeeFolder", Otdelenie);
DefValues.Add("LeadId", LeadId);
AddDataUserTask1.EntitySchemaId = SchemaId;
AddDataUserTask1.RecordDefValues = DefValues;
return true;
Выходит ошибка : Неявное преобразование типа "System.Collections.Generic.Dictionary" в "Terrasoft.Core.Process.EntityColumnMappingValues" невозможно
Нравится
Если Вы хотите просто создать в скрипте новую активность с нужными значениями полей, а потом сохранить в базу с отработкой всей логики на объекте, то можно воспользоваться методами Entity. См., например, как это сделано:
[csharp]
var communication = new Activity(userConnection);
communication.SetDefColumnValues();
if (isEmail) {
communication.Title = (string)Terrasoft.Core.Configuration.SysSettings.GetValue(userConnection, "EmailTypeCommunicationPrintingFormText");
} else if (isImmidiateProcessing) {
communication.StatusId = ActivityConsts.CompletedStatusUId;
communication.Title = "Коммуникация по обработке на месте" ;
} else {
communication.Title = "Коммуникация с письменным ответом";
}
communication.Commentary = serviceRequestEntity.GetTypedColumnValue(shortDescColumn.Name);
if(isEmail) {
var contactEmail = serviceRequestEntity.GetTypedColumnValue(emailColumnName.Name);
if (!string.IsNullOrEmpty(contactEmail)) {
communication.Recepient = string.Format("{0} <{1}>; ", serviceRequestEntity.GetTypedColumnValue(contactNameColumn.Name), contactEmail);
}
communication.HtmlBody = communication.Title;
} else if(isSms) {
communication.Recepient = serviceRequestEntity.GetTypedColumnValue(contactPhoneColumn.Name);
}
communication.ContactId = serviceRequestEntity.GetTypedColumnValue(contactIdColumn.Name);
communication.TypeId = activityTypeId;
communication.ActivityCategoryId = ActivityConsts.ToDoCategoryUId;
communication.MessageTypeId = ActivityConsts.OutgoingEmailtypeUId;
communication.ServiceCallId = recordUId;
communication.Save();
[/csharp]
Александр, я поступила по-другому - создала новый процесс на добавление данных и передаю туда данные из основного событийного подпроцесса.
Есть вопросы по поводу сериализациии в БД - для чего она нужна и везде ли она нужна?
При добавление в событийный подпроцесс процесса по добавлению данных получена ошибка: Элемент "CreatedSMS" не может быть сериализован в БД, т.к. не сериализуется процесс.
Методом перебора вариантов получилось сохранить страницу только после того, как в процессе по добавлению данных убрала галочку «сериализовать в БД», все сохранилось и работает.
НО! Мне нужно в основной событийный подпроцесс после создания объекта добавить еще один процесс (старый, написан не мной) и опять такая же проблема: Элемент "SendSmsProcess" не может быть сериализован в БД, т.к. не сериализуется процесс.
Сериализация элемента процесса в БД нужна для того, чтобы после перерыва в выполнении процесса (например, пока пользователь не выполнит задачу) в нём хранились те же значения, что и до.
Могу ли я убрать из старого процесса галочку сериализации? Или как мне лучше всего поступить?
Анастасия, это зависит от конкретного процесса.
Уточните у того, кто его делал.