灯光开关加载所有数据或同步运行异步方法

Lightswitch load all data or run a async method synchronously

本文关键字:同步 运行 异步方法 数据 开关 加载      更新时间:2023-09-26

我在Lighswitch应用程序中有一个带有数据的网格。网格在每一列上都有筛选列的可能性。感谢 lsEnhancedTable

现在,我正在向Web api控制器发送一个ajax请求,其中包含要导出的客户ID列表。它可以工作,但对于大量数据,它非常慢,因为我必须关闭数据的分页以获取所有可见的客户 ID,以便我可以迭代 VisualCollection。

为了优化这一点,我必须将数据分页打开到 50 条记录,以便初始加载速度快,并将数据的加载移动到保存/导出到 excel 按钮。

可能的解决方案:

  • 在保存按钮单击时加载数据所有数据。为此,我必须以某种方式加载所有项目,然后才能迭代集合。

下面的代码锁定 UI 线程,因为加载更多是异步的。如何同步加载所有数据?理想情况下,我希望使用msls.showProgress进行某种进度视图。

while(3<4)
    {
        if (screen.tblCustomers.canLoadMore) {
            screen.tblCustomers.loadMore();
        }
        else
            break;
    }
var visibleItemsIds = msls.iterate(screen.tblCustomers.data)
                       .where(function (c) {
                           return c;
                       })
  • 第二种方法是打开分页,仅将用户应用的筛选器传递给 Web api 控制器,以便我可以查询数据库并仅返回筛选的记录。但我不知道该怎么做。

  • 第三种方法是我现在正在使用的方法。关闭对视觉对象集合的分页>迭代,获取客户 ID,将其传递给控制器并返回筛选的 Excel。当有很多记录时,这不能很好地工作。

  • 在服务器端迭代筛选的集合?我不知道在 Lighswitch 中是否有办法做到这一点?

这是客户端 javascript 的一个选项。

首先生成 OData 筛选器字符串。

var filter = "(FieldName eq " + msls._toODataString("value", ":String") + ")";

然后查询数据库。

myapp.activeDataWorkspace.ApplicationData.[TableName].filter(filter).execute().then(function (result) { ... });