Внедрение Acumatica Pagination для экрана обработки не возвращает все применимые значения - PullRequest
0 голосов
/ 22 октября 2019

Я попытался реализовать нумерацию страниц для моего пользовательского экрана обработки, но не получил все необходимые значения в сетке.

  1. Если я использую приведенный ниже код, где я не реализовал нумерацию страниц и непосредственно использовалBQL в цикле foreach () для получения записей, я получаю все применимые значения.
public PXCancel<KNPIPaymentFilter> cancel;
        public PXFilter<KNPIPaymentFilter> KNPIFilter;
        [PXFilterable]
        public PXFilteredProcessing<SOOrder, KNPIPaymentFilter> KNPIProcessOrders;

        protected bool _PayMethodChanged = false;
        protected bool _PayActionChanged = false;

        public virtual void KNPIPaymentFilter_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
        {
            _PayMethodChanged = !sender.ObjectsEqual<KNPIPaymentFilter.paymentMethodID>(e.Row, e.OldRow);
            _PayActionChanged = !sender.ObjectsEqual<KNPIPaymentFilter.payPalInvAction>(e.Row, e.OldRow);
        }

        public IEnumerable kNPIProcessOrders()
        {
            if (_PayMethodChanged || _PayActionChanged)
                KNPIProcessOrders.Cache.Clear();

            KNPIPaymentFilter filter = PXCache<KNPIPaymentFilter>.CreateCopy(KNPIFilter.Current);
            if (filter.PayPalInvAction == KNPIConstants.SL)
                yield break;

            foreach (SOOrder order in PXSelect<SOOrder, Where<SOOrder.orderType, Equal<SOOrderTypeConstants.salesOrder>, And<SOOrder.paymentMethodID, Equal<Required<KNPIPaymentFilter.paymentMethodID>>,
                                And<SOOrder.status, NotEqual<SOOrderStatus.completed>>>>>.Select(this, this.KNPIFilter.Current.PaymentMethodID))
            {
                KNPIPayments PayPalPayment = new PXSelect<KNPIPayments, Where<KNPIPayments.acmOrderNbr, Equal<Required<KNPIPayments.acmOrderNbr>>,
                                                 And<KNPIPayments.acmOrderType, Equal<Required<KNPIPayments.acmOrderType>>>>, OrderBy<Desc<KNPIPayments.lineNbr>>>
                                                (this).SelectWindowed(0, 1, order.OrderNbr, order.OrderType);
                if (filter.PayPalInvAction == KNPIConstants.RE)
                {
                    if (PayPalPayment == null || (PayPalPayment != null && PayPalPayment.PayPalInvoiceStatus == KNPIConstants.CANCELLED))
                        yield return order;
                }
                else if (filter.PayPalInvAction == KNPIConstants.CH)
                {
                    if (PayPalPayment != null && PayPalPayment.PayPalInvoiceStatus == KNPIConstants.SENT)
                        yield return order;
                }
            }
            KNPIProcessOrders.Cache.IsDirty = false;
        }
Но когда я реализую логику разбиения на страницы, как показано ниже, я не получаю ни одной записи в сетке. Я отладил код и обнаружил, что в объекте списка изначально загружается только 19 записей, но после этого другие записи вообще не загружаются в объект.
        public PXCancel<KNPIPaymentFilter> cancel;
        public PXFilter<KNPIPaymentFilter> KNPIFilter;
        [PXFilterable]
        public PXFilteredProcessing<SOOrder, KNPIPaymentFilter> KNPIProcessOrders;       

        protected bool _PayMethodChanged = false;
        protected bool _PayActionChanged = false;

        public virtual void KNPIPaymentFilter_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
        {
            _PayMethodChanged = !sender.ObjectsEqual<KNPIPaymentFilter.paymentMethodID>(e.Row, e.OldRow);
            _PayActionChanged = !sender.ObjectsEqual<KNPIPaymentFilter.payPalInvAction>(e.Row, e.OldRow);
        }

        public IEnumerable kNPIProcessOrders()
        {
            if (_PayMethodChanged || _PayActionChanged)
                KNPIProcessOrders.Cache.Clear();

            KNPIPaymentFilter filter = PXCache<KNPIPaymentFilter>.CreateCopy(KNPIFilter.Current);
            if (filter.PayPalInvAction == KNPIConstants.SL)
                yield break;            

            PXSelectBase<SOOrder> cmd = new PXSelect<SOOrder, Where<SOOrder.orderType, Equal<SOOrderTypeConstants.salesOrder>, And<SOOrder.status, NotEqual<SOOrderStatus.completed>,
                                                           And<SOOrder.paymentMethodID, Equal<Optional<KNPIPaymentFilter.paymentMethodID>>>>>>(this);

            int startRow = PXView.StartRow;
            int totalRows = 0;
            List<object> list = cmd.View.Select(new[] { KNPIFilter.Current }, null, PXView.Searches,
                                        PXView.SortColumns, PXView.Descendings, PXView.Filters, ref startRow, PXView.MaximumRows, ref totalRows);

            foreach (SOOrder order in list)
            {
                KNPIPayments PayPalPayment = new PXSelect<KNPIPayments, Where<KNPIPayments.acmOrderNbr, Equal<Required<KNPIPayments.acmOrderNbr>>,
                                                 And<KNPIPayments.acmOrderType, Equal<Required<KNPIPayments.acmOrderType>>>>, OrderBy<Desc<KNPIPayments.lineNbr>>>
                                                (this).SelectWindowed(0, 1, order.OrderNbr, order.OrderType);
                if (this.KNPIFilter.Current.PayPalInvAction == KNPIConstants.RE)
                {
                    if (PayPalPayment == null || (PayPalPayment != null && PayPalPayment.PayPalInvoiceStatus == KNPIConstants.CANCELLED))
                        yield return order;
                }
                else if (this.KNPIFilter.Current.PayPalInvAction == KNPIConstants.CH)
                {
                    if (PayPalPayment != null && PayPalPayment.PayPalInvoiceStatus == KNPIConstants.SENT)
                        yield return order;
                }                
            }         
            PXView.StartRow = 0;
            KNPIProcessOrders.Cache.IsDirty = false;      
        }

Может кто-нибудь, пожалуйста, помогите мнекак то, что я делаю неправильно или чего мне здесь не хватает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...