Изменение данных карточки
Под изменением данных карточки обычно подразумевается изменение значения полей её секций, т.к. именно поля выступают основным хранилищем её данных. Последовательность доступа к полям карточки в этом случае абсолютно аналогична приведенной в Получение данных из секции карточки.
Базовый 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 | Изменяем значение поля. |