C# 如何更新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

你好,我是新来的,我正在Acumatica上创建一个定制项目,所以我添加了一个新字段

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。这将是一个有效的用例,尽管不鼓励这样做。