Acumatica 将属性从库存项目拉至SO行自定义字段
我对Acumatica中的定制编程比较陌生,我有一个问题,那就是如何将属性值从库存项目屏幕拉入销售订单屏幕中SO行上的自定义字段 我在另一个屏幕上使用FieldSelecting事件和PXSelect语句做了类似的事情,从另一个屏幕提取数据并更新我的自定义字段 需要从属性值中提取值是困扰我的问题,我是否应该只加入pxselect中的CSAnswers表 我还想问,在Acumatica定制中,是否有更好的整体方法将数据从另一个屏幕拉入自定义字段 *更新* 我正在尝试使用PXDBScalar属性,但我不知道如何连接多个表。这是我试过的Acumatica 将属性从库存项目拉至SO行自定义字段,acumatica,Acumatica,我对Acumatica中的定制编程比较陌生,我有一个问题,那就是如何将属性值从库存项目屏幕拉入销售订单屏幕中SO行上的自定义字段 我在另一个屏幕上使用FieldSelecting事件和PXSelect语句做了类似的事情,从另一个屏幕提取数据并更新我的自定义字段 需要从属性值中提取值是困扰我的问题,我是否应该只加入pxselect中的CSAnswers表 我还想问,在Acumatica定制中,是否有更好的整体方法将数据从另一个屏幕拉入自定义字段 *更新* 我正在尝试使用PXDBScalar属性,但
[PXDBScalar(typeof(
Search2<CSAnswers.value,
InnerJoin<InventoryItem,
On<SOLine.inventoryID, Equal<InventoryItem.inventoryID>>>,
InnerJoin<CSAnswers,
On<InventoryItem.noteID, Equal<CSAnswers.refNoteID>>>,
Where<CSAnswers.attributeID, Like<QHOLDAttr>>
>))]
[PXDBScalar(typeof(
搜索(2))]
谢谢
Scott既然您要求“更好的总体方法”,那么我将分享我喜欢的处理方法。不是说它“更好”,也许只是“不同”
我试图将数据绑定到与数据直接相关的对象。对于InventoryItem的属性,我将在DAC扩展中将该属性值提升为InventoryItem,以便可以在使用InventoryItem的任何地方使用它。您似乎希望将它与SOLine记录结合使用,但由于该属性未绑定到SOLine,因此我不会扩展SOLine来添加它。如果您的业务需求要求将其添加到那里,那么将其添加到那里并没有什么错,但让我更加理智地知道InventoryItem的相关数据来自InventoryItem,而不是试图记住我将其放在哪里,并在以后可能在其他地方(如POLine)重复工作
下面是一个我是如何做到这一点的示例,直接从我的项目中提取,但将属性引用更改为更通用的
public sealed class InventoryItemExt : PXCacheExtension<PX.Objects.IN.InventoryItem>
{
#region MyAttribute
[PXString]
[PXUIField(DisplayName = Messages.MyAttribDisplayName)]
[PXDBScalar(typeof(Search<CSAnswers.value,
Where<CSAnswers.refNoteID, Equal<InventoryItem.noteID>,
And<CSAnswers.attributeID, Equal<MyAttribute>>>>))]
public string MyAttribute { get; set; }
public abstract class myAttribute : PX.Data.BQL.BqlString.Field<myAttribute> { }
#endregion
public class MyAttribute : PX.Data.BQL.BqlString.Constant<MyAttribute>
{
public MyAttribute() : base("MYATTRIB") { }
}
}
我不确定SOLine引用在这里是否有效,但如果您直接在SOLine DAC扩展中定义它,则可能有效。但是,您已尝试查询CSAnswers内部连接CSAnswers。不确定这是否会修复您的PXDBScalar,但如果您确实想使用您的方法将其附加到SOLine,请尝试:
Search2<CSAnswers.value,
InnerJoin<InventoryItem,
On<InventoryItem.inventoryID, Equal<SOLine.inventoryID>>>,
Where<InventoryItem.noteID, Equal<CSAnswers.refNoteID>,
And<CSAnswers.attributeID, Equal<QHOLDAttr>>>
>))]
Search2]]
(注意,我交换了On子句中关系的顺序。)
Search2<CSAnswers.value,
InnerJoin<InventoryItem,
On<InventoryItem.inventoryID, Equal<SOLine.inventoryID>>>,
Where<InventoryItem.noteID, Equal<CSAnswers.refNoteID>,
And<CSAnswers.attributeID, Equal<QHOLDAttr>>>
>))]