c# - 如何更新我的 acumatica 数据库中的单行
问题描述
你好,我是新人,我正在 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
我想更新用户数据库上所有字段的循环这是我当前的代码,但它返回我一个错误,它太长
PXUpdate<Set<UsersExt.usrMomentTrackID, Add<UsersExt.usrMomentTrackID, Current<UsersExt.usrMomentTrackID>>>, Users,
Where<Users.pKID, Like<Users.pKID>>>.Update(Base, MomentTrackID, useritems.PKID);
您能否指导我做错了什么,或者我们是否有更有效的方法来更新 Acumatica 数据库上的字段?
解决方案
您可以使用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
方法覆盖。如果您要使用正常方法将记录保留在这些事件中,它将再次调用相同的事件,从而产生无限循环。
要解决这些问题,您可以使用PXDatabase
该类直接保存到数据库。请注意,这种持久化方法不会运行 DAC 和 Graph 验证,因此应尽可能避免使用该方法,使用该方法不是最佳实践,但有时会有所帮助。
PXDatabase.Update<Users>(new PXDataFieldAssign<UsersExt.usrMomentTrackID>(MomentTrackID),
new PXDataFieldRestrict<Users.pKID>(useritems.PKID));
一般来说,最佳实践是在屏幕上添加自定义字段,必要时初始化它的值,然后让最终用户通过按下保存按钮来保持更改。
推荐阅读
- reactjs - Symfony4 中的 StreamedResponse
- android - kotlin 从文件读取到字节数组
- python - 我可以使用进程间通信在 64 位 python 中调用这个 32 位 dll 吗?
- javascript - 为什么这里数组中的多重赋值会这样发生?
- regex - Python中的匹配字符
- azure - Azure B2C 自定义策略 - 在验证时显示按钮
- angular - 通过 selenium 自动化 angular7 应用程序是个好主意
- php - 试图读取杂乱的 CSV 文件
- android - 无法使用 Gallery Intent 从 GoogleStorageURI(Google Drive 图像 uri)将图像加载到 imageview
- java - JMeterContext 中的 JMeter setTestLogicalAction 给出“无法到达实例方法”