首页 > 解决方案 > BQL 语句在 SOOrder 中获取数据,但在 POOrder 中没有

问题描述

我正在使用员工默认分支在 SOOrder 上设置默认分支:

在此处输入图像描述

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
  

当我使用相同的代码在采购订单上设置分支时,BranchMaint.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
    }
}

有什么方法可以让我从 POReceiptEntry_Extension 访问 BranchMaint.BranchBAccount

标签: acumatica

解决方案


试试下面的。还要考虑尽管您希望这样的东西如何在采购订单收据中发挥作用,但在大多数情况下,您可能是从采购订单本身中提取的,因此分支将来自采购订单而不是来自您的字段默认扩展。

         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);
            }
        }

推荐阅读