【问题标题】:Acumatica - Adding Employee Selector to Journal TransactionsAcumatica - 将员工选择器添加到日记帐交易
【发布时间】:2018-04-02 18:48:32
【问题描述】:

我正在尝试将员工选择器添加到专门在网格中的日记帐交易屏幕 (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 方法时,我收到一条错误消息,提示无法绑定多部分标识符。

【问题讨论】:

  • 要存储企业帐户,您应该使用 int 字段并使用供应商属性/选择器。我不将此字段视为数据库字段,因此不会保存这些值。您是否尝试将值与结果一起保存?
  • 是的,我尝试更改为 PXDBInt 并将所有字符串都更改为 int?仍然是同样的错误。
  • 如果您保持相同的选择,您将使用 2 个没有加入的不同 DAC。您是否尝试使用 VendorAttribute?然后在 PXDBInt 字段的该属性之上添加一个带有 where 条件的 PXRestrictor?
  • 首先尝试将Search 更改为Search2 并使用Join 编写查询。
  • 我已经用 Search2 和 Inner Join 更新了上面的代码。但是,我仍然收到相同的错误。此错误也会出现并覆盖整个页面,因此我什至无法访问实际的日记帐交易页面。

标签: customization acumatica


【解决方案1】:

我找到了解决办法。

我需要向 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
  }

还记得创建一个数据库脚本来将 Resource 字段添加到值 INT 的 GLTran 表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2011-06-16
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多