使用对其他表的修订值引用填充未绑定列

时间:2017-08-09 21:01:09

标签: acumatica

我已扩展了APTran DAC的票据和调整屏幕(ID - AP301000)。 我试图根据当前行项目填充来自不同表格的值。

我需要的价值来自CrossReference,基于当前库存项目和当前比尔的VendorID。

以下是代码。如果我遗漏了任何东西,请告诉我。

public class string_VendorType : Constant<string>
{
	public string_VendorType() : base("0VPN")
	{ }
}

protected string _UsrVendorPartNum;

[PXString(50)]
[PXUIField(DisplayName = "Vendor Part Number", Enabled = false, IsReadOnly = true)]
[PXDefault(typeof(Search2<INItemXRef.alternateID,
	LeftJoin<InventoryItem, On<INItemXRef.inventoryID, Equal<InventoryItem.inventoryID>>,
		LeftJoin<APTran, On<InventoryItem.inventoryID, Equal<APTran.inventoryID>>,
			LeftJoin<APInvoice, On<APInvoice.refNbr, Equal<APTran.refNbr>,
				And<APInvoice.vendorID, Equal<INItemXRef.bAccountID>>>>>>,
	Where<InventoryItem.inventoryID, Equal<Current<APTran.inventoryID>>,
		And<INItemXRef.alternateType, Equal<string_VendorType>,
			And<APInvoice.refNbr, Equal<Current<APTran.refNbr>>>>>>))]

public virtual string UsrVendorPartNum
{
	get
	{
		return _UsrVendorPartNum;
	}
	set
	{
		_UsrVendorPartNum = value;
	}
}
public abstract class usrVendorPartNum : IBqlField { }

但是,该值不会填充。请指教。

1 个答案:

答案 0 :(得分:1)

我得到了以下工作(使用PXUnboundDefault)。您拥有的查询可以简化为以下工作示例:

public class APTranExt : PXCacheExtension<PX.Objects.AP.APTran>
{
    protected string _UsrVendorPartNum;

    [PXString(50)]
    [PXUIField(DisplayName = "Vendor Part Number", Enabled = false, IsReadOnly = true)]
    [PXUnboundDefault(typeof(Search<INItemXRef.alternateID,
        Where<INItemXRef.inventoryID, Equal<Current<APTran.inventoryID>>,
            And<INItemXRef.alternateType, Equal<INAlternateType.vPN>,
                And<INItemXRef.bAccountID, Equal<Current<APTran.vendorID>>>>>>))]
    public virtual string UsrVendorPartNum
    {
        get
        {
            return _UsrVendorPartNum;
        }
        set
        {
            _UsrVendorPartNum = value;
        }
    }
    public abstract class usrVendorPartNum : IBqlField { }
}

请注意,您无需创建自己的常量。您可以重复使用INAlternateTypevPN常量。

仅供参考......

我想说如果这是一个数据库字段,您可以使用AlternativeItemAttribute进行调查,但是它需要subitem字段,奇怪地APTran没有字段。

AlternativeItemAttributePOLine.AlternateID的使用示例:

public abstract class alternateID : PX.Data.IBqlField
{
}
protected String _AlternateID;      
[AlternativeItem(INPrimaryAlternateType.VPN, typeof(POLine.vendorID), typeof(POLine.inventoryID), typeof(POLine.subItemID))]
public virtual String AlternateID
{
    get
    {
        return this._AlternateID;
    }
    set
    {
        this._AlternateID = value;
    }
}