我有一个利用“用户定义的”字段的客户。我发现这些值位于数据库的KvExt表中,但是我没有找到直接通过DAC或DAC扩展访问这些值的方法。有什么方法可以访问该字段并将其添加到Acumatica基本页面中?
我的具体目标是ARPayments页面中的ARTran.RefNbr选择器。
答案 0 :(得分:1)
您可能已经知道,用户定义字段实际上是在使用系统中定义的属性。用户定义字段和实际记录(例如ARInvoice
)受记录{NoteID
的{{1}}和用户定义字段的ARInvoice
的约束。用户定义字段的RecordID
正在存储单词'Attribute'+ FieldName
。
下面的SQL查询显示引用:
AttributeID
结果集:
了解了上面显示的参考之后,我们可以为SELECT CompanyID, RefNbr, DocType, DocDesc FROM ARRegister WHERE RefNbr='AR007092';
SELECT CompanyID, RecordID, FieldName, ValueNumeric, ValueDate, ValueString, ValueText FROM ARRegisterKvExt where RecordID='78A9D6DE-52C4-E911-B2FD-FC017C8C8936';
SELECT CompanyID, AttributeID, Description, ControlType, EntryMask, RegExp, List, IsInternal, ContainsPersonalData FROM CSAttribute WHERE'AttributeBURDEN' LIKE '%'+AttributeID;
表创建一个DAC,如下所示:
ARRegisterKvExt
然后像下面这样写一个[PXCacheName("AR Register Attributes")]
[Serializable]
public class ARRegisterKvExt : IBqlTable
{
public abstract class recordID : BqlGuid.Field<recordID> { }
[PXDBGuid(IsKey = true)]
public Guid? RecordID { get; set; }
public abstract class fieldName : BqlString.Field<fieldName> { }
[PXDBString(50,IsKey = true)]
[PXUIField(DisplayName ="Name")]
public string FieldName { get; set; }
public abstract class valueNumeric : BqlDecimal.Field<valueNumeric> { }
[PXDBDecimal(8)]
[PXUIField(DisplayName = "Value Numeric")]
public decimal? ValueNumeric { get; set; }
public abstract class valueDate : BqlDateTime.Field<valueDate> { }
[PXDBDate]
[PXUIField(DisplayName = "Value Date")]
public DateTime? ValueDate { get; set; }
public abstract class valueString : BqlString.Field<valueString> { }
[PXDBString(256)]
[PXUIField(DisplayName = "Value String")]
public string ValueString { get; set; }
public abstract class valueText : BqlString.Field<valueText> { }
[PXDBString]
[PXUIField(DisplayName = "Value Text")]
public string ValueText { get; set; }
}
并带有左联接到我们的DAC和PXSelector
:
CSAttribute
结果,您将看到如下查询:
您会看到没有用户定义字段值的AR发票也没有该字段的名称。这是由Acumatica处理用户定义字段的方式引起的。仅当您设置一个值时,用户定义字段的记录才被写入数据库。如果清除该值,则删除该记录。
在查找中使用“用户定义的字段”的不利方面是,如果您有2个AR发票的用户定义的字段,则同一发票将显示两次,但前提是同时设置了两个“用户定义的字段”的值。