为什么我的交叉引用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>

当我尝试访问视图的“当前”记录时。由于某种原因,它总是指向最高记录。我看不到它可以正常工作的其他屏幕。

enter image description here

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

//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);
}     

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

enter image description here

那么这是怎么回事?这个问题对于INItemXRef是唯一的吗?

TIA

解决方法

当网格的当前记录未正确更新时,我发现这是以下原因之一:

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

就您而言,我可以看到已设置SyncPosition。同样,DAC也应设置其IsKey属性。 因此,您可以检查图表的其他数据视图中是否使用了INItemXRef吗? Acumatica缓存层的工作方式无法在多个视图中重复使用相同的DAC,并且具有不同的数据/当前属性。

作为解决方法,您可以使用基于INItemXRef的PXProjection创建新的DAC。