【发布时间】: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 更新了上面的代码。但是,我仍然收到相同的错误。此错误也会出现并覆盖整个页面,因此我什至无法访问实际的日记帐交易页面。