Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Acumatica 将属性从库存项目拉至SO行自定义字段_Acumatica - Fatal编程技术网

Acumatica 将属性从库存项目拉至SO行自定义字段

Acumatica 将属性从库存项目拉至SO行自定义字段,acumatica,Acumatica,我对Acumatica中的定制编程比较陌生,我有一个问题,那就是如何将属性值从库存项目屏幕拉入销售订单屏幕中SO行上的自定义字段 我在另一个屏幕上使用FieldSelecting事件和PXSelect语句做了类似的事情,从另一个屏幕提取数据并更新我的自定义字段 需要从属性值中提取值是困扰我的问题,我是否应该只加入pxselect中的CSAnswers表 我还想问,在Acumatica定制中,是否有更好的整体方法将数据从另一个屏幕拉入自定义字段 *更新* 我正在尝试使用PXDBScalar属性,但

我对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>>>
     >))]