#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, и он не находит учетную запись :
Ответ №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;