首页 > 解决方案 > 为什么我无法在我的交叉引用 (INItemXRef) 表中获得“当前”记录?

问题描述

所以我在我的销售订单屏幕中添加了一个新选项卡,用于显示 INItemXRef 记录 - 交叉引用数据。我添加了一个动作来显示当前记录。图形定制如下:

  public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
  {

    public PXSelect<INItemXRef> substituteProducts;      

    public PXAction<SOOrder> showAlt;
    [PXUIField(DisplayName = "Show Alt")]
    [PXButton]
    public virtual void ShowAlt()
    {
      substituteProducts.Ask($"Current AltID : {substituteProducts.Current.AlternateID}",MessageButtons.OK);
    }      
  }

我的ASP:

<px:PXTabItem Text="Subs">
  <Template>
    <px:PXGrid runat="server" ID="gridSubs" Width="100%" SkinID="Inquire" SyncPosition="True" MatrixMode="True" DataSourceID="ds">
        <Levels>
            <px:PXGridLevel DataMember="substituteProducts">
                <Columns>
                    <px:PXGridColumn DataField="AlternateID" Width="180" />
                </Columns>
            </px:PXGridLevel>
        </Levels>
        <AutoSize Enabled="True" MinHeight="400" />
        <ActionBar>
            <CustomItems>
                <px:PXToolBarButton DependOnGrid="gridSubs" CommandSourceID="ds" CommandName="ShowAlt" />
            </CustomItems>
        </ActionBar>
    </px:PXGrid>
  </Template>
</px:PXTabItem>

当我尝试访问我的视图的“当前”记录时。由于某种原因,它总是指向最高记录。我看不出与它工作的其他屏幕有任何区别。

在此处输入图像描述

所以我试图改变表格和列,其余的保持不变。

//public PXSelect<INItemXRef> substituteProducts;    
public PXSelect<BAccount> substituteProducts;

public PXAction<SOOrder> showAlt;
[PXUIField(DisplayName = "Show Alt")]
[PXButton]
public virtual void ShowAlt()
{
  substituteProducts.Ask($"Current AltID : {substituteProducts.Current.AcctCD}",MessageButtons.OK);
  //substituteProducts.Ask($"Current AltID : {substituteProducts.Current.AlternateID}",MessageButtons.OK);
}     

令人惊讶的是,它按预期工作。证明我的网格配置正确。

在此处输入图像描述

那么这里发生了什么?INItemXRef 的问题是唯一的吗?

TIA

标签: acumatica

解决方案


当网格的Current记录没有正确更新时,我发现是以下原因之一:

  1. SyncPosition 未在网格中设置
  2. DAC 未正确设置 IsKey 属性
  3. DAC 在同一页面的多个数据视图中重复使用

在您的情况下,我可以看到 SyncPosition 已设置。此外,DAC 还应设置其 IsKey 属性。因此,您能否检查一下 INItemXRef 是否在图表的另一个数据视图中使用?Acumatica 缓存层的工作原理不可能在多个视图中重复使用相同的 DAC 并具有不同的数据/当前属性。

作为一种解决方法,您可以创建一个新的 DAC,可能通过使用基于 INItemXRef 的 PXProjection。


推荐阅读