Использую действие Добавление данных (AddDataUserTask1)
Мне нужно создать активность по клиенту типа SMS (в допустимых действиях только Задача, Звонок и E-mail)

var Body = (string)SysSettings.GetValue(UserConnection, "RKO_OpeningAccount");
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" невозможно

Нравится

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

Если Вы хотите просто создать в скрипте новую активность с нужными значениями полей, а потом сохранить в базу с отработкой всей логики на объекте, то можно воспользоваться методами Entity. См., например, как это сделано:

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<string>(shortDescColumn.Name);
				if(isEmail) {
					var contactEmail = serviceRequestEntity.GetTypedColumnValue<string>(emailColumnName.Name);
					if (!string.IsNullOrEmpty(contactEmail)) {
						communication.Recepient = string.Format("{0} <{1}>; ", serviceRequestEntity.GetTypedColumnValue<string>(contactNameColumn.Name), contactEmail);
					}
					communication.HtmlBody = communication.Title; 
				} else if(isSms) {
					communication.Recepient = serviceRequestEntity.GetTypedColumnValue<string>(contactPhoneColumn.Name);
				}
				communication.ContactId = serviceRequestEntity.GetTypedColumnValue<Guid>(contactIdColumn.Name);
				communication.TypeId = activityTypeId;
				communication.ActivityCategoryId = ActivityConsts.ToDoCategoryUId;
				communication.MessageTypeId = ActivityConsts.OutgoingEmailtypeUId;
				communication.ServiceCallId = recordUId;
				communication.Save();

Александр, я поступила по-другому - создала новый процесс на добавление данных и передаю туда данные из основного событийного подпроцесса.
Есть вопросы по поводу сериализациии в БД - для чего она нужна и везде ли она нужна?

При добавление в событийный подпроцесс процесса по добавлению данных получена ошибка: Элемент "CreatedSMS" не может быть сериализован в БД, т.к. не сериализуется процесс.
Методом перебора вариантов получилось сохранить страницу только после того, как в процессе по добавлению данных убрала галочку «сериализовать в БД», все сохранилось и работает.
НО! Мне нужно в основной событийный подпроцесс после создания объекта добавить еще один процесс (старый, написан не мной) и опять такая же проблема: Элемент "SendSmsProcess" не может быть сериализован в БД, т.к. не сериализуется процесс.

Сериализация элемента процесса в БД нужна для того, чтобы после перерыва в выполнении процесса (например, пока пользователь не выполнит задачу) в нём хранились те же значения, что и до.

Могу ли я убрать из старого процесса галочку сериализации? Или как мне лучше всего поступить?

Анастасия, это зависит от конкретного процесса.
Уточните у того, кто его делал.

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