Добавление кнопки Next в CashAccountDetails

#acumatica

#acumatica

Вопрос:

Я пытаюсь добавить кнопку next / previous на страницу CashAccountDetails (график CATranEnq).

Это то, что я пробовал до сих пор:

 using PX.Data;
using PX.Objects.GL;
using System.Linq;

namespace PX.Objects.CA
{
    public class CATranEnqExtension : PXGraphExtension<CATranEnq>
    {
        private class ActionsLabels
        {
            public const string NextAccount = "Compte suivant";
            public const string PreviousAccount = "Compte précédent";
        }

        public PXAction<CAEnqFilter> PreviousAccount;
        [PXUIField(DisplayName = ActionsLabels.PreviousAccount, MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
        [PXPreviousButton]
        public virtual void previousAccount()
        {
            CAEnqFilter filter = Base.Filter.Current;
            Account previousaccount = new Account();
            if (!filter.AccountID.Equals(null))
            {
                Account currentAccount = PXSelect<Account, Where<Account.accountID,
                                            Equal<Required<Account.accountID>>>>.Select(Base, filter.AccountID).FirstOrDefault();
                previousaccount = PXSelect<Account,
                                Where<Account.accountCD,
                                    Less<Required<Account.accountCD>>,
                                    And<Account.isCashAccount, Equal<True>>>,
                                        OrderBy<Desc<Account.accountCD>>>.Select(Base, currentAccount.AccountCD).FirstOrDefault();
            }
            else
            {
                previousaccount = PXSelect<Account,
                                    Where<Account.isCashAccount, Equal<True>>,
                                   OrderBy<Desc<Account.accountCD>>>.Select(Base).FirstOrDefault();
            }
            filter.AccountID = previousaccount?.AccountID;
        }

        public PXAction<CAEnqFilter> NextAccount;
        [PXUIField(DisplayName = ActionsLabels.NextAccount, MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
        [PXNextButton]
        public virtual void nextAccount()
        {
            CAEnqFilter filter = Base.Filter.Current;
            Account nextaccount = new Account();
            if (!filter.AccountID.Equals(null))
            {
                Account currentAccount = PXSelect<Account, Where<Account.accountID,
                                            Equal<Required<Account.accountID>>>>.Select(Base, filter.AccountID).FirstOrDefault();
                nextaccount = PXSelect<Account,
                                Where<Account.accountCD,
                                    Greater<Required<Account.accountCD>>,
                                    And<Account.isCashAccount, Equal<True>>>,
                                        OrderBy<Asc<Account.accountCD>>>.Select(Base, currentAccount.AccountCD).FirstOrDefault();
            }
            else
            {
                nextaccount = PXSelect<Account,
                                    Where<Account.isCashAccount, Equal<True>>,
                                   OrderBy<Asc<Account.accountCD>>>.Select(Base).FirstOrDefault();
            }
            filter.AccountID = nextaccount?.AccountID;
        }
    }
}
  

Когда я нажимаю на кнопки, я ожидаю перейти к другому CashAccount, но вместо этого используется AccountId, и он не находит учетную запись :

https://i.imgur.com/Uo7MCWL.png

Ответ №1:

Мне пришлось использовать объект CashAccount, а не учетную запись.

 CAEnqFilter filter = Base.Filter.Current;
            CashAccount previousaccount = new CashAccount();
            if (!filter.AccountID.Equals(null))
            {
                CashAccount currentAccount = PXSelect<CashAccount, Where<CashAccount.cashAccountID,
                                            Equal<Required<CashAccount.cashAccountID>>>>.Select(Base, filter.AccountID).FirstOrDefault();
                previousaccount = PXSelect<CashAccount,
                                Where<CashAccount.cashAccountCD,
                                    Less<Required<CashAccount.cashAccountCD>>>,
                                        OrderBy<Desc<CashAccount.cashAccountCD>>>.Select(Base, currentAccount.CashAccountCD).FirstOrDefault();
            }
            else
            {
                previousaccount = PXSelectOrderBy<CashAccount,
                                   OrderBy<Desc<CashAccount.cashAccountCD>>>.Select(Base).FirstOrDefault();
            }
            filter.AccountID = previousaccount?.CashAccountID;