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

Ну и пример для лучшего понимания.

 

Нравится

4 комментария
Лучший ответ

Описание методов класса ENTITY привелены тут

Обратите внимание на:

virtual object Clone() - Создает клон текущего экземпляра Entity.

 

Примеры использования:

var newEntity = entity.Clone();

var newEntity = entity.Clone() as Terrasoft.Configuration.Document;

Описание методов класса ENTITY привелены тут

Обратите внимание на:

virtual object Clone() - Создает клон текущего экземпляра Entity.

 

Примеры использования:

var newEntity = entity.Clone();

var newEntity = entity.Clone() as Terrasoft.Configuration.Document;

Григорий Чех,

Спасибо, об этом методе знаю, думала, что есть ещё какие-то варианты.

Приведенный пример Entity newEntity = entity.Clone() не рабочий.

Чтобы потом работать с newEntity нужно применить явное приведение, примерно так:

Entity newEntity = (Entity)entity.Clone()

В коде встречаются и по такому варианту, похожему на предложенный Григорием:

var newGoodsEntity = goodsEntity.Clone() as Terrasoft.Core.Entities.Entity;
newGoodsEntity.SetDefColumnValues();
newGoodsEntity.SetColumnValue("Id", Guid.NewGuid());
newGoodsEntity.SetColumnValue("ChangeRequestId", newChangeRequestId);
newGoodsEntity.Save();

или вот:

row = dataSource.Rows[0].Clone() as Terrasoft.Core.Entities.Entity;
Guid currentUserContactId = Page.UserConnection.CurrentUser.ContactId;
EntityPrimaryColumnValue = Guid.NewGuid();
Page.DataSource.CacheItemName = Page.SchemaName + "_" + EntityPrimaryColumnValue.ToString();
row.SetColumnValue(primaryColumnName, EntityPrimaryColumnValue);
row.SetColumnValue("CreatedOn", DateTime.Now);
row.SetColumnValue("CreatedById", currentUserContactId);
row.SetColumnValue("ModifiedOn", DateTime.Now);
row.SetColumnValue("ModifiedById", currentUserContactId);
var columnNames = new List<string>();
foreach (var column in row.Schema.Columns) {
	if (column.HasDefValue && (column.IsLookupType || column.IsMultiLookupType) && !columnNames.Contains(column.Name)) {
		columnNames.Add(column.Name);
	}
}
row.LoadLookupDisplayValues(columnNames);
dataSource.Insert(row);

 

Зверев Александр,

Имела ввиду, первый пример без приведения.

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