Оператор BQL получает данные в порядке, но не в худшем

#acumatica

#acumatica

Вопрос:

Я устанавливаю ветку по умолчанию в SOOrder, используя ветку Employees по умолчанию:

введите описание изображения здесь

 using PX.Objects.IN.Matrix.Interfaces;
using System;
using PX.Common;
using PX.Data;
using PX.Objects.CS;
using PX.Objects.EP;
namespace PX.Objects.SO
{
    // Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active
    public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
    {
        #region Event Handlers

        protected void SOLine_BranchID_FieldDefaulting(PXCache cache, PXFieldDefaultingEventArgs e)
        {
            try
            {
                var row = (SOLine)e.Row;
                if (row == null) return;

                EPEmployee CurEPEmployee = PXSelect<
                    EPEmployee, 
                    Where<EPEmployee.userID, Equal<Required<AccessInfo.userID>>>>
                    .Select(Base, Base.Accessinfo.UserID);

                BranchMaint.BranchBAccount CurBranchBAccount = PXSelect<
                    BranchMaint.BranchBAccount,
                    Where<BranchMaint.BranchBAccount.bAccountID,Equal<Required<EPEmployee.parentBAccountID>>>>
                    .Select(Base,CurEPEmployee.ParentBAccountID);

                e.NewValue = CurBranchBAccount.BranchBranchCD;

            }
            catch (Exception ex)
            {
                PXTrace.WriteError(ex);
            }

        }

        #endregion
  
  

Когда я использую тот же код для установки ветки в заказах на поставку, ветка сохраняется.BranchBAccount всегда равен нулю, как будто у POReceiptEntry_Extension нет к нему доступа?

 using PX.Data;
using PX.Objects.EP;
using static PX.Objects.CS.BranchMaint;
using System;

namespace PX.Objects.PO
{
    // Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active
    public class POReceiptEntry_Extension : PXGraphExtension<POReceiptEntry>
    {
        #region Event Handlers

        protected void POReceiptLine_BranchID_FieldDefaulting(PXCache cache, PXFieldDefaultingEventArgs e)
        {

            try
            {
                var row = (POReceiptLine)e.Row;
                if (row == null) return;

                EPEmployee CurEPEmployee = PXSelect<
                    EPEmployee,
                    Where<EPEmployee.userID, Equal<Required<AccessInfo.userID>>>>
                    .Select(Base, Base.Accessinfo.UserID);

                BranchBAccount CurBranchBAccount = PXSelect<
                    BranchBAccount,
                    Where<BranchBAccount.bAccountID, Equal<Required<EPEmployee.parentBAccountID>>>>
                    .Select(Base, CurEPEmployee.ParentBAccountID);
         
                e.NewValue = CurBranchBAccount.BranchBranchCD;

            }
            catch (Exception ex)
            {
                PXTrace.WriteError(ex);
            }
        }


        #endregion
    }
}
  

Есть ли у меня какой-нибудь способ получить доступ к BranchMaint.BranchBAccount из POReceiptEntry_Extension

Ответ №1:

Попробуйте следующее. Также подумайте, как вы хотели бы, чтобы что-то подобное функционировало в квитанции PO, в большинстве случаев вы, вероятно, извлекаете из самого заказа Purcahse, поэтому ветвь будет поступать из PO, а не из вашего расширения по умолчанию.

          protected void POReceiptLine_BranchID_FieldDefaulting(PXCache cache, PXFieldDefaultingEventArgs e)
        {

            try
            {
                var row = (POReceiptLine)e.Row;
                if (row == null) return;

                EPEmployee CurEPEmployee = PXSelect<
                    EPEmployee,
                    Where<EPEmployee.userID, Equal<Required<AccessInfo.userID>>>>
                    .Select(Base, Base.Accessinfo.UserID);

                Branch CurBranchBAccount = PXSelect<
                    Branch,
                    Where<Branch.bAccountID, Equal<Required<EPEmployee.parentBAccountID>>>>
                    .Select(Base, CurEPEmployee.ParentBAccountID);

                e.NewValue = CurBranchBAccount.BranchCD;

            }
            catch (Exception ex)
            {
                PXTrace.WriteError(ex);
            }
        }