Ruvo
Ruvo

Reputation: 727

Acumatica - Approach to custom screen to link GL and Sub Accounts for custom restrictions

The requirement is to build a custom form tab screen that starts of with an account selector. After choosing the account, the bottom grid is populated with a list of custom DAC's that basically consists of a key of CompanyID, AccountID, SubID that is stored in a custom table. The existing Account DAC does not have a selector component, which I can use for the top selection. The solution I tried to get past this is to create a new DAC but with only one unbound property, but this is giving me issues on the BQL side when setting up the Master/Detail data views for the screen. I will then attempt to setup a master detail relationship between my custom DAC and the Account DAC. Is this the best approach to build this screen, or is there another which I haven't thought of?

Screen Graph (ignore the where and filters, just doing a proof of concept first):

using System;
using PX.Data;
using PX.Data.BQL.Fluent;
using PX.Objects.GL;

namespace IP_GLRestrictions2
{
  public class IPGLAcctToSubLinkMaint : PXGraph<IPGLAcctToSubLinkMaint>
  {

    public PXSave<IPAccount> Save;
    public PXCancel<IPAccount> Cancel;


    public PXFilter<IPAccount> MasterView;
    public PXFilter<IPAcctSubLink> DetailsView;

        public SelectFrom<IPAccount>.View AccountView;
        public SelectFrom<IPAcctSubLink>
            //.Where<IPAcctSubLink.accountID.IsEqual<IPAccount.accountID.FromCurrent>>
            .View SubLinkView;
  }
}

Custom DAC ( I want to show the Description and Active as unbound fields as soon as a subaccount ID is chosen in the details grid):

[Serializable]
    [PXCacheName("Account To Subaccount Link")]
    public class IPAcctSubLink : IBqlTable
    {
        #region AccountID
        [PXDBInt(IsKey = true)]
        [PXUIField(DisplayName = "Account ID")]
        [PXDBDefault(typeof(IPAccount.accountID))]
        [PXParent(typeof(SelectFrom<IPAccount>.Where<IPAccount.accountID.IsEqual<IPAcctSubLink.accountID.FromCurrent>>))]
        ////[PXSelector(typeof(Search<IPAccount.accountID>),
        ////        typeof(Account.accountCD),
        ////        typeof(Account.description),
        ////        SubstituteKey = typeof(Account.accountCD))]
        public virtual int? AccountID { get; set; }
        public abstract class accountID : PX.Data.BQL.BqlInt.Field<accountID> { }
        #endregion

        #region Subid
        [PXDBInt(IsKey = true)]
        [PXUIField(DisplayName = "Subaccount ID")]
        [PXSelector(typeof(Search<Sub.subID>),
                typeof(Sub.subCD),
                typeof(Sub.description),
                typeof(Sub.active),
                SubstituteKey = typeof(Sub.subCD))]
        public virtual int? Subid { get; set; }
        public abstract class subid : PX.Data.BQL.BqlInt.Field<subid> { }
        #endregion

        #region Description
        [PXString]
        [PXUIField(DisplayName = "Description")]
        //[PXDefault(typeof(Search<Sub.description, Where<Sub.subID, Equal<Current<IPAcctSubLink.subid>>>>))]
        public virtual int? SubDescription { get; set; }
        public abstract class subdescription : PX.Data.BQL.BqlInt.Field<subdescription> { }
        #endregion

        #region Active
        [PXBool]
        [PXUIField(DisplayName = "Active")]
        //[PXDefault(typeof(Search<Sub.active, Where<Sub.subID, Equal<Current<IPAcctSubLink.subid>>>>))]
        public virtual int? SubActive { get; set; }
        public abstract class subActive : PX.Data.BQL.BqlInt.Field<subActive> { }
        #endregion

Upvotes: 0

Views: 115

Answers (1)

Markus Ray
Markus Ray

Reputation: 186

If you just need a selector for a specific field in a DAC the easiest way to do that would be via a cache extension.

You can simply add the PXSelector attribute inside the cache extension.

public sealed class CacheExtension : PXCacheExtension<YourDAC>{
     public static bool IsActive() => true;
 
     [YourSelectorAttribute]
     public int? AccountID { get; set; }
}

Upvotes: 1

Related Questions