C# 如何更新acumatica数据库中的一行
你好,我是新来的,我正在Acumatica上创建一个定制项目,所以我添加了一个新字段C# 如何更新acumatica数据库中的一行,c#,acumatica,C#,Acumatica,你好,我是新来的,我正在Acumatica上创建一个定制项目,所以我添加了一个新字段 public class UsersExt : PXCacheExtension<PX.SM.Users> { #region UsrMomentTrackID [PXDBString] [PXUIField(DisplayName = "Moment Track ID")] public virtual string Usr
public class UsersExt : PXCacheExtension<PX.SM.Users>
{
#region UsrMomentTrackID
[PXDBString]
[PXUIField(DisplayName = "Moment Track ID")]
public virtual string UsrMomentTrackID { get; set; }
public abstract class usrMomentTrackID : PX.Data.BQL.BqlString.Field<usrMomentTrackID> { }
#endregion
公共类UsersExt:PXCacheExtension
{
#区域UsrMomentTrackID
[PXDBString]
[PXUIField(DisplayName=“力矩轨迹ID”)]
公共虚拟字符串UsrMomentTrackID{get;set;}
公共抽象类usrMomentTrackID:PX.Data.BQL.BqlString.Field{}
#端区
我想更新用户数据库中所有字段上的循环,这里是我的当前代码,但它返回的错误太长
PXUpdate<Set<UsersExt.usrMomentTrackID, Add<UsersExt.usrMomentTrackID, Current<UsersExt.usrMomentTrackID>>>, Users,
Where<Users.pKID, Like<Users.pKID>>>.Update(Base, MomentTrackID, useritems.PKID);
PXUpdate.Update(Base、MomentTrackID、useritems.PKID);
你能告诉我我做错了什么,或者我们有更有效的方法更新Acumatica数据库的字段吗?你可以使用
PXSelect
方法获取记录
// 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);
}
}
使用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);
}
}
一般来说,最佳做法是在屏幕上添加自定义字段,必要时初始化其值,并让最终用户通过按“保存”按钮来保持更改。如果没有错误,将无法帮助用户。该方法似乎根本不正确,我想我们可以在不显示错误消息的情况下进行回答。您是否试图填充该字段中的所有现有记录系统?或者您正在尝试更新页面特定操作上的字段(例如,当字段发生更改时更新自定义字段)。问题标题为单行,提供的代码也暗示为单记录,因为它使用pKID选择记录。“所有字段上的更新循环”部分令人困惑。请仔细考虑(在彻底检查之后),这里的尝试可能是在持久方法覆盖的上下文中使用PXDatabase.Update。这将是一个有效的用例,尽管不鼓励这样做。