我正在尝试使用Selector来查找客户,我希望它能够显示CD以及该字段中的描述。我在Acumatica看过很多次了 - 我以为我知道该怎么做,但它不起作用。这是我的代码:
#region CustomerLookup
public abstract class customerLookup : PX.Data.IBqlField
{
}
protected string _CustomerLookup;
[PXDBString(100, IsUnicode = true)]
[PXUIField(DisplayName = "Customer Lookup")]
[PXSelector(typeof(Customer.acctCD)
,typeof(Customer.acctCD)
,typeof(Customer.acctName)
,DescriptionField=typeof(Customer.acctName))]
public virtual string CustomerLookup
{
get
{
return this._CustomerLookup;
}
set
{
this._CustomerLookup = value;
}
}
#endregion
我原以为提供DescriptionField可以解决这个问题,但事实并非如此。
答案 0 :(得分:0)
在回答这个问题之前,让我首先提一下上面代码片段的两个主要问题:
在Acumatica中客户是一种特定的系统对象类型,它支持分段密钥。要创建支持分段密钥的记录,您应该使用PXDimensionSelectorAttribute
而不是PXSelectorAttribute
。对于Customer实体,开箱即用的几个属性(如CustomerAttribute或CustomerActiveAttribute)可用于创建Customer查找:
CustomerLookup 字段必须属于Int32?
(int?
)类型:在Acumatica中,用户可以随时更改客户ID(通过更改ID 客户屏幕上的按钮。要为Customer DAC建立外键,更好的方法是声明一个整数字段,并通过Customer.BAccount字段将您的自定义记录与Customers相关联
以下是DAC字段的推荐声明,它在UI中创建客户查找:
[Serializable]
public partial class DetailsResult : IBqlTable
{
...
#region CustomerId
public abstract class customerId : PX.Data.IBqlField
{
}
[Customer(DescriptionField = typeof(Customer.acctName))]
public virtual Int32? CustomerID { get; set; }
#endregion
...
}
指定了DescriptionField属性后, PXDimensionSelector放置在表单上将默认根据“{SearchKey / SubstituteKey} - {DescriptionField}”模式格式化所选记录:
要在网格单元格中显示DescriptionField ,您必须为CustomerID_description
字段定义其他列(其中_description
部分是Acumatica的特殊关键字,专门用于这种类型的请求):
答案 1 :(得分:0)
我相信答案是显而易见的 - 我不认为描述字段在网格中的工作方式相同。在标题字段中,它可以在您导航时显示CD - 描述。网格字段显然不会以这种方式工作,即使您在选择器中按照标题选择器中的方式指定描述字段也是如此。