Acumatica:一次初始化视图只是为了提高性能或用户体验

问题描述 投票:0回答:2

我有一个简单的视图:

public PXSelect<MPEmployeeTermination, Where<MPEmployeeTermination.employeeID,
        Equal<Current<TerminationFilter.employeeID>>,
        And<MPEmployeeTermination.payRunID, Equal<Current<TerminationFilter.payRunID>>>>> EmployeeTerminations;

以及初始化它的方法:

public IEnumerable employeeTerminations()
    {
       return _terminationHandler.GetEmployeeTerminations(EmployeeTerminations, EmployeeTerminationItems, OtherTerminationPayments); 
    }

GetEmployeeTerminations方法(返回IEnumerable)很繁重并且经常运行-此UI中的任何单个操作。当调用此方法时,我找不到任何控件,而在初始化过程中(调用构造函数时)只能调用一次方法GetEmployeeTerminations。我可以使用布尔静态字段一次运行该方法,但是我相信存在Acumatica模式推荐的其他属性(例如属性等)。可以设置EmployeeTerminations = GetEmployeeTerminations,但尚不清楚如何将IEnumerable转换为PXSelect<MPEmployeeTermination> ]。我该如何在适当的Acumatica模式中做到这一点,或者存在比静态字段更好的模式?

UI:enter image description here

enter image description here

我将不胜感激任何意见或建议。

我正在更新我的问题

每次更改UI上的任何可编辑属性时,构造函数都会调用。使用静态布尔值的解决方案不起作用,因为当我打开和关闭UI时,静态字段已经保存。如果该字段不是静态的,那么它将在每次构造函数运行时重置,因此,它也将不起作用。

此方法

_terminationHandler.GetEmployeeTerminations(EmployeeTerminations, EmployeeTerminationItems, OtherTerminationPayments)

计算“主” DAC MPEmployeeTermination和“详细信息” DAC MPEmployeeTerminationItem的值。 DAC MPEmployeeTerminationItem负责向导中的2个数据网格,并计算两个DAC中的数据,与远程服务器等进行通信。有时它的运行速度更快,有时更慢,但是主观用户的时间感觉太慢了:enter image description hereenter image description here

并且总是在序列的末尾,我们有一个神秘的踏步。睡眠会花费比我们的手术更长的时间,并发生在Acumatica幕后:enter image description here我相信建议也只能在加载一次运行此方法。最好的地方是什么?当DAC上的每个属性都更改时,甚至构造函数都在此处运行。

在事件MPEmployeeTermination_TerminationDate_FieldUpdated中调用了另一个重方法,不能将其移动到另一个位置,并且该日期更改后必须运行所有计算。

主要思想是改善用户体验并防止UI卡死。也许我可以使用异步编程?

例如,如果我将方法更改为

 public async Task<IEnumerable> employeeTerminations()
    {
        return await Task.Run(() => _terminationHandler.GetEmployeeTerminations(EmployeeTerminations, EmployeeTerminationItems, OtherTerminationPayments));
    }

UI不再卡住了,但是我不确定Acumatica框架上的所有可能的副作用。由于Acumatica的限制,它还会发生MPEmployeeTermination_TerminationDate_FieldUpdated这样的事件。

c# asp.net acumatica
2个回答
0
投票

我对您共享的屏幕不熟悉,因此我需要坚持更笼统的答复,并希望它能给您足够的帮助,以克服您的障碍,直到其他人可以提供更好的答案为止。我有点担心过滤器如何嵌入到选项卡中,但是我对构建这种屏幕结构并不十分熟悉。我的屏幕非常简单,过滤器始终位于顶部。

如您所述,您正在为视图定义一个构造函数。您会在Acumatica标准代码中找到许多示例,这些示例中的视图是通过构造函数控制的。在执行操作时,可以使用构造函数来限制根据屏幕上某些用户可选选项检索的结果。这为PO.POCreate中的“过滤器”和“ fixedDemand”构造函数提供了一个示例。这些填充各自的视图,并且fixedDemand对如何解释IEnumerable具有一些适用的概念。


0
投票

嗯,如果您真的只想在加载中运行一次此方法,则应执行以下操作

© www.soinside.com 2019 - 2024. All rights reserved.