Вы можете использовать метод PXSelect
для получения записи.
С помощью объекта PXCache
вы можете обновить и сохранить запись.
// 1. Select Users record
Guid? pKID = useritems.PKID;
Users user = PXSelect<Users, Where<Users.pKID, Equal<Required<Users.pKID>>>>.Select(Base, pKID);
if (user != null)
{
// 2. Select Users DAC extension
UsersExt userExt = user.GetExtension(user);
if (userExt != null)
{
// 3. Set field value
userExt.UsrMomentTrackID = MomentTrackID;
// 4. Update record
PXCache cache = Base.Caches[typeof(Users)];
cache.Update(user);
// 5. Persist record
cache.Persist(user, PXDBOperation.Update);
}
}
Есть два контекста, в которых вы можете не могу использовать этот метод. Это событие RowPersisted
или переопределение метода Persist
. Если бы вы использовали обычный метод для сохранения записи в тех событиях, он вызвал бы те же самые события снова, производя бесконечное l oop.
Чтобы обойти эти проблемы, вы можете использовать класс PXDatabase
для сохранения непосредственно в базу данных. Обратите внимание, что этот постоянный метод не запускает проверки DA C и Graph, поэтому его следует избегать, насколько это возможно, поэтому не рекомендуется использовать этот метод, но иногда он может быть полезен.
PXDatabase.Update<Users>(new PXDataFieldAssign<UsersExt.usrMomentTrackID>(MomentTrackID),
new PXDataFieldRestrict<Users.pKID>(useritems.PKID));
Как правило, рекомендуется добавить настраиваемое поле на экран, инициализировать его значение, если необходимо, и позволить конечному пользователю сохранить изменения, нажав кнопку сохранения.