更改记录后字段刷新

Field refreshing after changing record

我正在使用 Microsoft AX 2012。我遇到了一个奇怪的问题,我从 VendTrans table 获得了包含 5 条记录的列表页面。我在表单数据源中创建了一种在 VendTrans table 上获取维度的方法。

public display DimensionValue getDimensionValue(VendTrans _vendTrans)
{    
    dimAttrValueSet = DimensionAttributeValueSet::find(VendTrans.DefaultDimension);    
    select dimAttrValueSetItem
        where   dimAttrValueSetItem.DimensionAttributeValueSet      == dimAttrValueSet.RecId
    join dimAttrValue
        where   dimAttrValue.RecId                                  == dimAttrValueSetItem.DimensionAttributeValue
    join dimAttribute
        where   dimAttribute.RecId                                  == dimAttrValue.DimensionAttribute
        &&      dimAttribute.Name                                   == 'NAME';

    return dimAttrValue.getValue();
}

在我的表单上创建了一个字段。数据源设置为 VendTrans (table),DataMethod 设置为 "getDimensionValue"。

现在在我的列表页面上更改所选记录后,此字段会刷新所有记录。

例如,我的第一条记录的维度值为 "AAA",第二条记录的维度值为 "BBB"。选择第一个记录时,所有5个记录的此字段值将为"AAA"。选择第二条记录后,所有 5 条记录的值为 "BBB"。

很明显,我想要它的字段中每条记录的值,更改记录后无需刷新...

你有两个问题:

  1. 在第 3 行中使用 _vendTrans.DefaultDimension 代替 VendTrans.DefaultDimension
    这就是为什么所有行中的值相同,您引用的是 active 记录而不是网格线的记录。
  2. 使用 display method caching 提高表单的性能。

要修复这两个问题,请将方法移动到 VendTrans table 以启用缓存:

[SysClientCacheDataMethodAttribute(true)]
public display DimensionValue getDimensionValue()
{
    dimAttrValueSet = DimensionAttributeValueSet::find(this.DefaultDimension);
    ...
}