【问题标题】:How to apply PXForeignReference in a new maintenance screen如何在新的维护屏幕中应用 PXForeignReference
【发布时间】:2020-12-03 03:41:39
【问题描述】:

我已经创建了维护表,并且在放置时应用了“PXForeignReference”。 我想要的是,如果我从表中删除正在另一个表中使用的记录,它应该显示一条消息,表明它正在另一个表中使用。

但在我的示例中,它没有被实现,对于 varo,我会指出我的错误在哪里。

我在这里附上一些图片。

1.第一个维护表

namespace SKPriceIndex
{
    [Serializable]
    [PXCacheName("PESKPriceIndexCat")]
    public class PESKPriceIndexCat : IBqlTable
    {
        #region CategoryID
        [PXDBIdentity] 
        [PXUIField(DisplayName = "Category ID")]
        public virtual int? CategoryID { get; set; }
        public abstract class categoryID : PX.Data.BQL.BqlInt.Field<categoryID> { }
        #endregion

        #region CategoryCD
        [PXDBString(10, IsUnicode = true, InputMask = "", IsKey = true)]
        [PXUIField(DisplayName = "Category ID")]
        public virtual string CategoryCD { get; set; }
        public abstract class categoryCD : PX.Data.BQL.BqlString.Field<categoryCD> { }
        #endregion

        #region Descripcion
        [PXDBString(30, IsUnicode = true, InputMask = "")]
        [PXUIField(DisplayName = "Category Description")]
        public virtual string Descripcion { get; set; }
        public abstract class descripcion : PX.Data.BQL.BqlString.Field<descripcion> { }
        #endregion

        #region State
        [PXDBString(100, IsUnicode = true, InputMask = "")]
        [PXUIField(DisplayName = "State")]
        [PXSelector(typeof(State.stateID),
                     typeof(State.stateID), typeof(State.name), typeof(State.countryID),
                    DescriptionField = typeof(State.name))]
        [PXMassMergableField]
        public virtual string State { get; set; }
        public abstract class state : PX.Data.BQL.BqlString.Field<state> { }
        #endregion

        #region Active
        [PXDBBool()]
        [PXDefault(false)]
        [PXUIField(DisplayName = "Active")]
        public virtual bool? Active { get; set; }
        public abstract class active : PX.Data.BQL.BqlInt.Field<active> { }
        #endregion 

        #region tstamp
        public abstract class Tstamp : PX.Data.IBqlField
        {
        }
        protected byte[] _tstamp;
        [PXDBTimestamp()]
        public virtual byte[] tstamp
        {
            get
            {
                return this._tstamp;
            }
            set
            {
                this._tstamp = value;
            }
        }
        #endregion 
        #region CreatedByID
        public abstract class createdByID : PX.Data.IBqlField
        {
        }
        protected Guid? _CreatedByID;
        [PXDBCreatedByID()]
        public virtual Guid? CreatedByID
        {
            get
            {
                return this._CreatedByID;
            }
            set
            {
                this._CreatedByID = value;
            }
        }
        #endregion
        #region CreatedByScreenID
        public abstract class createdByScreenID : PX.Data.IBqlField
        {
        }
        protected string _CreatedByScreenID;
        [PXDBCreatedByScreenID()]
        public virtual string CreatedByScreenID
        {
            get
            {
                return this._CreatedByScreenID;
            }
            set
            {
                this._CreatedByScreenID = value;
            }
        }
        #endregion
        #region CreatedDateTime
        public abstract class createdDateTime : PX.Data.IBqlField
        {
        }
        protected DateTime? _CreatedDateTime;
        [PXDBCreatedDateTime]
        public virtual DateTime? CreatedDateTime
        {
            get
            {
                return this._CreatedDateTime;
            }
            set
            {
                this._CreatedDateTime = value;
            }
        }
        #endregion
        #region LastModifiedByID
        public abstract class lastModifiedByID : PX.Data.IBqlField
        {
        }
        protected Guid? _LastModifiedByID;
        [PXDBLastModifiedByID()]
        public virtual Guid? LastModifiedByID
        {
            get
            {
                return this._LastModifiedByID;
            }
            set
            {
                this._LastModifiedByID = value;
            }
        }
        #endregion
        #region LastModifiedByScreenID
        public abstract class lastModifiedByScreenID : PX.Data.IBqlField
        {
        }
        protected string _LastModifiedByScreenID;
        [PXDBLastModifiedByScreenID()]
        public virtual string LastModifiedByScreenID
        {
            get
            {
                return this._LastModifiedByScreenID;
            }
            set
            {
                this._LastModifiedByScreenID = value;
            }
        }
        #endregion
        #region LastModifiedDateTime
        public abstract class lastModifiedDateTime : PX.Data.IBqlField
        {
        }
        protected DateTime? _LastModifiedDateTime;
        [PXDBLastModifiedDateTime]
        public virtual DateTime? LastModifiedDateTime
        {
            get
            {
                return this._LastModifiedDateTime;
            }
            set
            {
                this._LastModifiedDateTime = value;
            }
        }
        #endregion
    }
}

2.秒维护表

namespace SKPriceIndexCST
{
    [Serializable]
    [PXCacheName("PESKPriceIndex")]
    public class PESKPriceIndex : IBqlTable
    {
        #region CategoryID
        [PXDBInt(IsKey = true)]
        [PXUIField(DisplayName = "Category ID")]

        [PXSelector(typeof(PESKPriceIndexCat.categoryID),
                    typeof(PESKPriceIndexCat.categoryCD), 
                    typeof(PESKPriceIndexCat.descripcion),
                    DescriptionField = typeof(PESKPriceIndexCat.descripcion),
                    SubstituteKey = typeof(PESKPriceIndexCat.categoryCD))]
        [PXMassMergableField]
        [PXRestrictor(typeof(Where<PESKPriceIndexCat.active, Equal<True>>), "", typeof(PESKPriceIndexCat.active))]      
        public virtual int? CategoryID { get; set; }
        public abstract class categoryID : PX.Data.BQL.BqlInt.Field<categoryID> { }
        #endregion

        #region CreatedDateTime
        [PXDBCreatedDateTime()]
        public virtual DateTime? CreatedDateTime { get; set; }
        public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field<createdDateTime> { }
        #endregion

        #region CreatedByID
        [PXDBCreatedByID()]
        public virtual Guid? CreatedByID { get; set; }
        public abstract class createdByID : PX.Data.BQL.BqlGuid.Field<createdByID> { }
        #endregion

        #region CreatedByScreenID
        [PXDBCreatedByScreenID()]
        public virtual string CreatedByScreenID { get; set; }
        public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field<createdByScreenID> { }
        #endregion

        #region LastModifiedDateTime
        [PXDBLastModifiedDateTime()]
        public virtual DateTime? LastModifiedDateTime { get; set; }
        public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field<lastModifiedDateTime> { }
        #endregion

        #region LastModifiedByID
        [PXDBLastModifiedByID()]
        public virtual Guid? LastModifiedByID { get; set; }
        public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field<lastModifiedByID> { }
        #endregion

        #region LastModifiedByScreenID
        [PXDBLastModifiedByScreenID()]
        public virtual string LastModifiedByScreenID { get; set; }
        public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field<lastModifiedByScreenID> { }
        #endregion

        #region Tstamp
        [PXDBTimestamp()]
        [PXUIField(DisplayName = "Tstamp")]
        public virtual byte[] Tstamp { get; set; }
        public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field<tstamp> { }
        #endregion
    }
}

namespace SKPriceIndexCST
{
    [Serializable]
    [PXCacheName("PESKPriceIndexDetail")]
    public class PESKPriceIndexDetail : IBqlTable
    {
        #region PriceIndexID
        [PXDBIdentity]
        public virtual int? PriceIndexID { get; set; }
        public abstract class priceIndexID : PX.Data.BQL.BqlInt.Field<priceIndexID> { }
        #endregion

        #region CategoryID
        [PXDBInt(IsKey =true)]
        [PXUIField(DisplayName = "Category ID")]
        [PXDefault(typeof(PESKPriceIndex.categoryID))]
        [PXParent(typeof(Select<PESKPriceIndex, Where<PESKPriceIndex.categoryID, Equal<Current<categoryID>>>>),LeaveChildren =true)] //,LeaveChildren =true
        [PXForeignReference(typeof(Field<categoryID>.IsRelatedTo<PESKPriceIndexCat.categoryID>))]
        public virtual int? CategoryID { get; set; }
        public abstract class categoryID : PX.Data.BQL.BqlInt.Field<categoryID> { }
        #endregion

        #region EffDate
        [PXDBDate(IsKey =true)]
        [PXDefault(typeof(AccessInfo.businessDate))]
        [PXUIField(DisplayName = "Eff Date")]        
        public virtual DateTime? EffDate { get; set; }
        public abstract class effDate : PX.Data.BQL.BqlDateTime.Field<effDate> { }
        #endregion

        #region BaseIndex
        [PXDBInt()]
        [PXUIField(DisplayName = "Base Index")]
        public virtual int? BaseIndex { get; set; }
        public abstract class baseIndex : PX.Data.BQL.BqlInt.Field<baseIndex> { }
        #endregion

        #region CreatedDateTime
        [PXDBCreatedDateTime()]
        public virtual DateTime? CreatedDateTime { get; set; }
        public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field<createdDateTime> { }
        #endregion

        #region CreatedByID
        [PXDBCreatedByID()]
        public virtual Guid? CreatedByID { get; set; }
        public abstract class createdByID : PX.Data.BQL.BqlGuid.Field<createdByID> { }
        #endregion

        #region CreatedByScreenID
        [PXDBCreatedByScreenID()]
        public virtual string CreatedByScreenID { get; set; }
        public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field<createdByScreenID> { }
        #endregion

        #region LastModifiedDateTime
        [PXDBLastModifiedDateTime()]
        public virtual DateTime? LastModifiedDateTime { get; set; }
        public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field<lastModifiedDateTime> { }
        #endregion

        #region LastModifiedByID
        [PXDBLastModifiedByID()]
        public virtual Guid? LastModifiedByID { get; set; }
        public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field<lastModifiedByID> { }
        #endregion

        #region LastModifiedByScreenID
        [PXDBLastModifiedByScreenID()]
        public virtual string LastModifiedByScreenID { get; set; }
        public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field<lastModifiedByScreenID> { }
        #endregion

        #region Tstamp
        [PXDBTimestamp()]
        [PXUIField(DisplayName = "Tstamp")]
        public virtual byte[] Tstamp { get; set; }
        public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field<tstamp> { }
        #endregion
    }
}

当我删除价格指数记录时,并不限制删除。

我希望我的问题是明确的。

提前致谢。

【问题讨论】:

    标签: acumatica acumatica-kb


    【解决方案1】:

    据我所知,对于参照完整性,您只需要分配外部引用,并且当尝试删除此类引用时,应防止它们被删除。在 INTran DAC 中有一个这样的例子

    首先以 INTran 为例,他们定义了 FK

    public static class FK
    {
        public class Site : INSite.PK.ForeignKeyOf<INTran>.By<siteID> { }
    }
    

    然后他们将字段定义如下

    #region SiteID
    public abstract class siteID : PX.Data.BQL.BqlInt.Field<siteID> { }
    
    [IN.SiteAvail(typeof(INTran.inventoryID), typeof(INTran.subItemID))]
    [PXDefault(typeof(INRegister.siteID))]
    [PXForeignReference(typeof(FK.Site))]
    [InterBranchRestrictor(typeof(Where<SameOrganizationBranch<INSite.branchID, Current<INRegister.branchID>>>))]
    public virtual Int32? SiteID {get; set;}
    #endregion
    

    另一方面,指定主从关系的 PXParent 属性不会阻止删除。虽然它有 LeaveChildren 属性,默认为 false,因此在删除 parent 时会删除 child 数据记录。

    【讨论】:

      猜你喜欢
      • 2019-12-06
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 2017-10-11
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多