DeletedDatabaseRecord的奇怪行为

时间:2017-07-05 07:32:13

标签: acumatica

我想在自定义屏幕中使用逻辑删除,我已将以下内容添加到我的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语句没有过滤掉已删除的记录,也没有将其作为列返回。

2 个答案:

答案 0 :(得分:2)

将CompanyID列添加到使用DeletedDatabaseRecord的表中。之后,不应出现删除的行。

答案 1 :(得分:0)

永远不应为以下列声明DAC字段:

  • CompanyID
  • CompanyMask
  • DeletedDatabaseRecord

当您对Acumatica数据库架构进行更新时,重新启动IIS或回收托管Acumatica网站的应用程序池始终是一个好习惯,因此Acumatica可以在域重新启动期间重新同步更新的数据库架构,因为它不跟踪数据库架构在运行时更改。