我正在尝试创建一个Field来存储'VendorID',在我自己的DAC中。
首先,我尝试使用Acumatica属性来显示选择器,如下面的
[VendorNonEmployeeActive(Visibility = PXUIVisibility.SelectorVisible, DescriptionField = typeof(Vendor.acctName), CacheGlobal = true, Filterable = true)]
和
[POVendor(Visibility = PXUIVisibility.SelectorVisible, DescriptionField = typeof(Vendor.acctName), CacheGlobal = true, Filterable = true)]
和其他一些属性。但要么是显示员工数据,要么是什么。我甚至试图在下面编写一个我自己的选择器,其中BAccountRef是一个派生自BAccount的类。
[PXSelector(typeof(Search2<Vendor.bAccountID,
InnerJoin<BAccountRef, On<Vendor.bAccountID, Equal<BAccountRef.bAccountID>>>,
Where<Vendor.status, Equal<BAccountRef.status.active>,
And<Vendor.type, Equal<BAccountType.vendorType>>>>), new Type[] { typeof(BAccountRef.acctCD), typeof(BAccountRef.acctName) },
SubstituteKey = typeof(BAccountRef.acctCD))]
不幸的是没有运气,从行为来看,似乎记录会自动过滤以显示员工信息。我无法弄清楚这是怎么回事。如何使选择器显示供应商信息?这是如何自动过滤此图表中的员工的?
答案 0 :(得分:2)
您对Vendor
DAC的BQL查询很可能会转换为对 EPEmployee 表的SQL查询。此行为是由EPEmployee
缓存(因此BAccount
缓存)在Vendor
缓存之前初始化而引起的。
尝试将PX.Objects.AP.VendorAttribute
与BAccountR
DAC一起使用 - 使用BAccountR
会破坏Vendor
和BAccount' DACs and should be translated into SQL queries towards
BAccount and
供应商之间的继承`tables:
[Vendor(typeof(Search<BAccountR.bAccountID,
Where<BAccountR.type, Equal<BAccountType.companyType>,
Or<Vendor.type, NotEqual<BAccountType.employeeType>>>>),
Visibility = PXUIVisibility.SelectorVisible, CacheGlobal = true, Filterable = true)]
[PXRestrictor(typeof(Where<Vendor.status, IsNull,
Or<Vendor.status, Equal<BAccount.status.active>,
Or<Vendor.status, Equal<BAccount.status.oneTime>>>>),
AP.Messages.VendorIsInStatus, typeof(Vendor.status))]
答案 1 :(得分:1)
全部谢谢,
@Ruslan的回答有助于获得选择器的正确定义。当我们使用 BAccountR 或 VendorR DAC时,SQL无法转换为EPEmployee,因此我能够获得正确的信息。
[PXDimensionSelectorAttribute("VENDOR", typeof(Search<VendorR.bAccountID, Where<VendorR.type, Equal<BAccountType.vendorType>,
And<VendorR.status, Equal<BAccount.status.active>>>>), typeof(VendorR.acctCD), new Type[] { typeof(VendorR.acctCD), typeof(VendorR.acctName) })]
答案 2 :(得分:0)
在我最近的一个项目中,为了获得VendorCD,我使用了以下内容:
#region vendor
public abstract class vendor : PX.Data.IBqlField
{
}
protected string _Vendor;
[VendorRaw(typeof(Where<Vendor.vendorClassID, Equal<Current<VendorFilter.vendorClassID>>>),
DescriptionField = typeof(Vendor.acctName), DisplayName = "Vendor ID")]
[PXDefault("", PersistingCheck = PXPersistingCheck.Nothing)]
public virtual string Vendor
{
get
{
return this._Vendor;
}
set
{
this._Vendor = value;
}
}
#endregion