在费用报表屏幕中创建供应商选择器

时间:2017-03-02 09:35:37

标签: acumatica

我正在尝试创建一个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))]

不幸的是没有运气,从行为来看,似乎记录会自动过滤以显示员工信息。我无法弄清楚这是怎么回事。如何使选择器显示供应商信息?这是如何自动过滤此图表中的员工的?

3 个答案:

答案 0 :(得分:2)

您对Vendor DAC的BQL查询很可能会转换为对 EPEmployee 表的SQL查询。此行为是由EPEmployee缓存(因此BAccount缓存)在Vendor缓存之前初始化而引起的。

尝试将PX.Objects.AP.VendorAttributeBAccountR DAC一起使用 - 使用BAccountR会破坏VendorBAccount' 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