Изменение данных карточки

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

Базовый API

Изменение данных карточки в обычном режиме:
CardData card = userSession.CardManager.GetCardData(cardId); (1)

RowData sectionRow = card.Sections[sectionId].FirstRow; (2)

sectionRow["Field"] = "Новое значение поля"; (3)
1 Получаем данные карточки с идентификатором cardId.
2 В качестве примера получим первую строку секции с идентификатором sectionId.
3 Изменяем содержимое поля с псевдонимом Field.

Если необходимо изменить значения нескольких полей, то предварительно рекомендуется активировать режим отложенных изменений:

CardData card = userSession.CardManager.GetCardData(cardId);

card.BeginUpdate(); (1)
RowData sectionRow = card.Sections[sectionId].FirstRow;

sectionRow["FieldFirst"] = "Новое значение первого поля"; (2)
sectionRow["FieldSecond"] = "Новое значение второго поля"; (3)

card.EndUpdate(); (4)
1 Включаем режим отложенных изменений.
2 Изменяем значение поля с псевдонимом FieldFirst.
3 Изменяем значение поля с псевдонимом FieldSecond.
4 Фиксируем изменения в базе данных.

Если в сценарии изменения данных предполагается изменение одного поля, то активировать режим отложенных изменений не требуется

Объектная модель

На высоком уровне API сценарий изменения данных зависит от способа представления секции в объектной модели карточки.

Если сущность секции представлена в объектной модели карточки в виде свойства, то код изменяющий, к примеру, название карточки типа Документ будет следующим:

Document card = objectContext.GetObject<Document>(cardId); (1)

card.MainInfo.Name = "Новое название документа";(2)

objectContext.SaveObject(card); (3)
1 Получаем карточку типа Документ.
2 Изменяем значение поля.
3 Сохраняем изменения.

Если необходимо, вместо сохранения изменений одного объекта, можно сохранить все изменения контекста объектов:

objectContext.AcceptChanges();

Если объектная модель карточки не предоставляет непосредственного доступа к секции, можно воспользоваться методом GetSection базового класса BaseCard:

BaseCard baseCard = objectContext.GetObject<BaseCard>(cardId); (1)

BaseCardSectionRow row = (BaseCardSectionRow)baseCard.GetSection(new Guid("30EB9B87-822B-4753-9A50-A1825DCA1B74"))[0]; (2)

row["Name"] = "Новое название документа"; (3)

objectContext.SaveObject(row); (4)
1 Получаем карточку.
2 Получаем первую строку секции.
3 Переданный идентификатор соответствует идентификатору секция Основная информация карточки типа Документ.
4 Изменяем значение поля.