Acumatica - 为期刊交易添加员工选择器

时间:2018-04-02 18:48:32

标签: customization acumatica

我正在尝试将“员工”选择器添加到“网格”中的“日记帐交易”屏幕(GL301000)中。我使用GLTran DAC作为基础创建了DAC扩展代码。 这是我的代码:

using PX.Common;
using PX.Data.ReferentialIntegrity.Attributes;
using PX.Data;
using PX.Objects.AP;
using PX.Objects.CM;
using PX.Objects.CR;
using PX.Objects.CS;
using PX.Objects.EP;
using PX.Objects.GL;
using PX.Objects.IN;
using PX.Objects.PM;
using PX.Objects.TX;
using PX.Objects;
using System.Collections.Generic;
using System;

namespace PX.Objects.GL
{
  public class GLTranExt : PXCacheExtension<PX.Objects.GL.GLTran>
  {
    #region Resource
  public class emp: PX.Data.Constant<string>
{
    public emp() : base("EMPHOUR") { }
}
    public abstract class resource: PX.Data.IBqlField
    {
    }
    protected int? _Resource;

    [PXDBInt]
    [PXDefault()]
    [PXUIField(DisplayName="Resource")]
    [PXSelector(typeof(Search2<BAccount.bAccountID,
    InnerJoin<Vendor,
    On<Vendor.bAccountID,
    Equal<BAccount.bAccountID>>>,
    Where<Vendor.vendorClassID,
    Equal<emp>>>),
    SubstituteKey = typeof(BAccount.acctName))]
        public virtual int? Resource
    {
      get
      {
        return this._Resource;
      }
      set
      {
        this._Resource = value;
      }
    }
    #endregion
  }
}

当我尝试将字段添加到网格时出现错误,这是我的错误:

Error: An invalid selector column has been provided.
Parameter name: fieldList

有人能指出我正确的方向吗?我知道要显示正确的员工姓名,您必须在Vendor表和BAccount表中使用where或join。但是,当我尝试使用LeftJoin方法时,我收到一条错误,指出无法绑定多部分标识符。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

我需要向PXDefault添加持久检查,并将CommitChanges属性更改为true。

以下是正确的代码:

public class GLTranExt : PXCacheExtension<PX.Objects.GL.GLTran>
  {
    #region Resource
  public class emp: PX.Data.Constant<string>
{
    public emp() : base("EMPHOUR") { }
}
    public abstract class resource: PX.Data.IBqlField
    {
    }
    protected int? _Resource;

    [PXDBInt]
    [PXDefault(PersistingCheck=PXPersistingCheck.Nothing)]
    [PXUIField(DisplayName="Resource")]
    [PXSelector(typeof(Search2<BAccount.bAccountID,
    InnerJoin<Vendor,
    On<Vendor.bAccountID,
    Equal<BAccount.bAccountID>>>,
    Where<Vendor.vendorClassID,
    Equal<emp>>>),
    SubstituteKey = typeof(BAccount.acctName))]
        public virtual int? Resource
    {
      get
      {
        return this._Resource;
      }
      set
      {
        this._Resource = value;
      }
    }
    #endregion
  }

还记得创建一个DB脚本,将Resource字段添加到值为INT的GLTran表中。