Acumatica 有没有办法让用户定义的字段进入选择器?
我有一个客户正在使用用户定义的字段。我发现这些值位于数据库中的KvExt表中,但我没有找到通过DAC或DAC扩展直接访问这些值的方法。有没有办法访问该字段并将其添加到Acumatica的基本页面Acumatica 有没有办法让用户定义的字段进入选择器?,acumatica,Acumatica,我有一个客户正在使用用户定义的字段。我发现这些值位于数据库中的KvExt表中,但我没有找到通过DAC或DAC扩展直接访问这些值的方法。有没有办法访问该字段并将其添加到Acumatica的基本页面 在我的例子中,特定的目标是ARPayments页面中的ARTran.RefNbr选择器。您可能知道,用户定义的字段实际上使用的是系统中定义的属性。用户定义字段和实际记录(例如,ARInvoice)由记录的NoteID(ARInvoice)和用户定义字段的RecordID绑定。用户定义字段的FieldNa
在我的例子中,特定的目标是ARPayments页面中的ARTran.RefNbr选择器。您可能知道,用户定义的字段实际上使用的是系统中定义的属性。用户定义字段和实际记录(例如,
ARInvoice
)由记录的NoteID
(ARInvoice
)和用户定义字段的RecordID
绑定。用户定义字段的FieldName
存储单词“Attribute”+AttributeID
下面的SQL查询显示引用:
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到ArregisterkText
表,如下所示:
[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; }
}
[PXSelector(typeof(Search2<ARInvoice.refNbr, LeftJoin<ARRegisterKvExt, On<ARInvoice.noteID,Equal<ARRegisterKvExt.recordID>>, LeftJoin<CSAttribute, On<ARRegisterKvExt.fieldName,Contains<CSAttribute.attributeID>>>>>), new[] { typeof(ARInvoice.refNbr), typeof(ARInvoice.docType), typeof(CSAttribute.description), typeof(ARRegisterKvExt.valueString)}, DescriptionField = typeof(ARInvoice.docDesc))]
因此,您将看到如下查找:
[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; }
}
[PXSelector(typeof(Search2<ARInvoice.refNbr, LeftJoin<ARRegisterKvExt, On<ARInvoice.noteID,Equal<ARRegisterKvExt.recordID>>, LeftJoin<CSAttribute, On<ARRegisterKvExt.fieldName,Contains<CSAttribute.attributeID>>>>>), new[] { typeof(ARInvoice.refNbr), typeof(ARInvoice.docType), typeof(CSAttribute.description), typeof(ARRegisterKvExt.valueString)}, DescriptionField = typeof(ARInvoice.docDesc))]
正如您所看到的,对于用户定义的字段没有值的应收发票也没有字段名称。这是由Acumatica处理用户定义字段的方式造成的。只有在设置值时,才会将用户定义字段的记录写入数据库。如果清除该值,则删除该记录
在查找中使用用户定义字段的缺点是,如果有两个用户定义的AR发票字段,则同一发票将显示两次,但仅当两个用户定义字段的值都已设置时。
所以基本上我们需要自己为这些表制作KvExt DAC?@EricP。是的,Acumatica正在直接使用SimpleTable类进行工作,似乎他们还没有为开发框架扩展用户定义的字段。