我想在自定义屏幕中使用逻辑删除,我已将以下内容添加到我的DAC中:
#region DeletedDatabaseRecord
public abstract class deletedDatabaseRecord : PX.Data.IBqlField
{
}
protected bool? _DeletedDatabaseRecord;
[PXDBBool()]
[PXDefault(false)]
public virtual bool? DeletedDatabaseRecord
{
get
{
return this._DeletedDatabaseRecord;
}
set
{
this._DeletedDatabaseRecord = value;
}
}
#endregion
以上DAC用于网格(在主/细节屏幕中)。当我单击网格删除然后保存时,该行在数据库中被标记为已删除。 但是,当我刷新屏幕时,删除的行再次出现。似乎数据视图没有进入DeletedDatabaseRecord值。我确认在数据库中将其设置为1。
我的数据视图如下:
public PXSelect<DCRule, Where<DCRule.ruleHeaderID, Equal<Current<DCRuleHeader.ruleHeaderID>>>, OrderBy<Asc<DCRule.sequence>>> Rules;
不应该是数据视图,自动过滤掉已删除的记录(DeletedDatabaseRecord = 1)?或者我应该在代码逻辑中处理其他内容。
更新1
我已从DAC中删除DeletedDatabaseRecord,因为设计指南声明不应包含它们。但是,我仍然遇到完全相同的问题。
更新2
我还注意到SQL语句没有过滤掉已删除的记录,也没有将其作为列返回。
答案 0 :(得分:2)
将CompanyID列添加到使用DeletedDatabaseRecord的表中。之后,不应出现删除的行。
答案 1 :(得分:0)
永远不应为以下列声明DAC字段:
当您对Acumatica数据库架构进行更新时,重新启动IIS或回收托管Acumatica网站的应用程序池始终是一个好习惯,因此Acumatica可以在域重新启动期间重新同步更新的数据库架构,因为它不跟踪数据库架构在运行时更改。