获取图表外的当前缓存

时间:2016-07-27 14:54:44

标签: acumatica

我创建了一个自定义选择器,其逻辑取决于屏幕标题部分中字段的值。由于逻辑不在保存视图的图形中,因此如何获取此标题部分的高速缓存的当前值?我已经在标题中将我引用的字段设置为commitchanges = true,我甚至将SyncPosition = true放在页面的标题部分中。以下逻辑没有给出我在缓存中的当前值(我假设):

mh = (xTACMappingHeader)PXSelect< xTACMappingHeader,
                        Where<    xTACMappingHeader.mappingName, Equal<Required<xTACMappingDetail.mappingName>>>>.Select(new PXGraph<FinancialTranslatorMaint>(), md.MappingName);

在该图表之外的图表中检索缓存的当前值的最佳方法是什么?

...谢谢

2 个答案:

答案 0 :(得分:2)

PXCache对象永远不会出现在图形之外。您可以通过PXCustomSelectorAttribute的_Graph字段访问当前图形:

protected PXGraph _Graph;

类似的东西:

mh = (xTACMappingHeader)PXSelect<…>.Select(_Graph, md.MappingName);

访问缓存的当前值:

_Graph.Caches[typeof(YourDAC)].Current

在初始化缓存时,Acumatica Framework会为每个字段属性调用CacheAttached()方法。 PXCustomSelectorAttribute根据当前初始化的PXCache对象的Graph属性为_Graph字段赋值:

public class PXCustomSelectorAttribute : PXSelectorAttribute
{
    ...

    public override void CacheAttached(PXCache sender)
    {
        ...

        _Graph = sender.Graph;

        ...
    }

    ...
}

答案 1 :(得分:2)

您可以使用CacheAttached事件获取图表。见下面的例子。

public class YourAttribute : PXEventSubscriberAttribute
{
    private PXGraph _Graph = null;

    public override void CacheAttached(PXCache sender)
    {
        _Graph = sender.Graph;    
        base.CacheAttached(sender);
    }
}