Lightswitch加载所有数据或同步运行异步方法
问题描述:
我在Lighswitch应用程序中使用数据网格。网格具有每列可能性来过滤列。感谢lsEnhancedTableLightswitch加载所有数据或同步运行异步方法
现在我正在向Web api控制器发送一个ajax请求,其中包含要导出的客户的ID列表。它可以工作,但有很多数据,所以速度非常慢,因为我必须关闭数据分页以获取所有可见的客户ID,以便遍历VisualCollection。
为了优化这个,我必须打开数据分页到50条记录,以便初始加载速度很快,并将数据加载到保存/导出到excel按钮。
可能的解决方案:
- 加载数据的保存按钮点击的所有数据。为此,我必须以某种方式加载所有项目,然后才能遍历集合。
由于loadMore是异步的,下面的代码会锁定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) { ... });
第三个选项可以在javascript中实现客户端。 – Kris