尝试仅过滤满足两个条件的行
Trying To Filter Only Rows That Meet Two Criteria
我保证我已经通读了查询信息页面,但显然我是 missing/misunderstanding 东西。
我有一个 Table 具有多个部门的状态(字段是字符串)。当用户加载 table 时,我希望 App Maker 隐藏 已 完成 的作业。
我们将工作归类为完成的方式是:
库存状态 = 完成 并且 交货状态 = 已交付。
这两个条件都需要满足。
示例:
Inventory(完成)+ Delivery(已交付)=隐藏
Inventory (In Progress) + Delivery (Delivered) = 不隐藏
库存(完成)+ 交货(预定)= 不隐藏
我尝试了以下方法,但它隐藏了 所有 上面列出的示例,而不仅仅是第一个。
var datasource = app.datasources.SystemOrders;
var inventory = ['Complete'];
var delivery = ['Delivered'];
datasource.query.filters.InventoryStatus._notIn = inventory;
datasource.query.filters.DeliveryStatus._notIn = delivery;
datasource.load();
我也试过这个:
var datasource = app.datasources.SystemOrders;
datasource.query.filters.InventoryStatus._notIn = 'Complete';
datasource.query.filters.DeliveryStatus._notIn = 'Delivered';
datasource.load();
但是我得到这个错误:
Type mismatch: Cannot set type String for property _notIn. Type List is expected. at SystemOrders.ToolBar.Button2.onClick:2:46
如有任何帮助,我们将不胜感激。
过滤器正在使用 AND 运算符。请考虑切换数据源查询生成器并应用以下查询:
"InventoryStatus != :CompleteStatus OR DeliveryStatus != :DeliveredStatus"
将 CompleteStatus 变量设置为完成
将 DeliveredStatus 变量设置为已交付
说明:
您要应用的过滤器是 "NOT(InventoryStatus = Complete AND DeliveryStatus = Delivered)",相当于 "InventoryStatus != Complete OR DeliveryStatus != Delivered".
Vasyl 完美地回答了我的问题,但我想添加一些细节,以防有人需要做同样的事情并且不熟悉使用 Datasource Query Builder。
我所做的只是单击我正在使用的数据库,然后单击顶部的 Datasources 部分。
我点击了添加数据源,为其命名为一个新名称并将 Vasyl 的代码粘贴到 Query Builder Expression 框中。
它下方出现两个新框,允许我输入我想要过滤掉的所需状态。
最后我回到 Table 并将其数据源更改为我新创建的数据源。
由于您正在更改数据源,如果您有任何额外的代码,可能需要更新它以指向新的数据源。
示例:
我有一些按钮可以过滤各个部门的条目。
所以这个:
widget.datasource.query.clearFilters();
var datasource = app.datasources.SystemOrders;
var statuses = ['Complete'];
datasource.query.filters.WarehouseStatus._notIn = statuses;
datasource.load();
必须更改为:
widget.datasource.query.clearFilters();
var datasource = app.datasources.SystemOrders_HideComplete;
var statuses = ['Complete'];
datasource.query.filters.WarehouseStatus._notIn = statuses;
datasource.load();
您可以使用多个 运行,然后将它们的结果连接起来,如下所示
/**
* Retrieves records for ActionItems datasource.
* @param {RecordQuery} query - query object of the datasource;
* @return {Array<ActionItems>} user's rating as an array.
*/
function getActionItemsForUser_(query) {
var userRoles = app.getActiveUserRoles();
query.filters.Owner._contains = Session.getActiveUser().getEmail();
var ownerRecords = query.run();
query.clearFilters();
query.filters.AddedBy._contains = Session.getActiveUser().getEmail();
var addedByRecords = query.run();
return addedByRecords.concat(ownerRecords);
}
我保证我已经通读了查询信息页面,但显然我是 missing/misunderstanding 东西。
我有一个 Table 具有多个部门的状态(字段是字符串)。当用户加载 table 时,我希望 App Maker 隐藏 已 完成 的作业。
我们将工作归类为完成的方式是:
库存状态 = 完成 并且 交货状态 = 已交付。
这两个条件都需要满足。
示例:
Inventory(完成)+ Delivery(已交付)=隐藏
Inventory (In Progress) + Delivery (Delivered) = 不隐藏
库存(完成)+ 交货(预定)= 不隐藏
我尝试了以下方法,但它隐藏了 所有 上面列出的示例,而不仅仅是第一个。
var datasource = app.datasources.SystemOrders;
var inventory = ['Complete'];
var delivery = ['Delivered'];
datasource.query.filters.InventoryStatus._notIn = inventory;
datasource.query.filters.DeliveryStatus._notIn = delivery;
datasource.load();
我也试过这个:
var datasource = app.datasources.SystemOrders;
datasource.query.filters.InventoryStatus._notIn = 'Complete';
datasource.query.filters.DeliveryStatus._notIn = 'Delivered';
datasource.load();
但是我得到这个错误:
Type mismatch: Cannot set type String for property _notIn. Type List is expected. at SystemOrders.ToolBar.Button2.onClick:2:46
如有任何帮助,我们将不胜感激。
过滤器正在使用 AND 运算符。请考虑切换数据源查询生成器并应用以下查询:
"InventoryStatus != :CompleteStatus OR DeliveryStatus != :DeliveredStatus"
将 CompleteStatus 变量设置为完成 将 DeliveredStatus 变量设置为已交付
说明: 您要应用的过滤器是 "NOT(InventoryStatus = Complete AND DeliveryStatus = Delivered)",相当于 "InventoryStatus != Complete OR DeliveryStatus != Delivered".
Vasyl 完美地回答了我的问题,但我想添加一些细节,以防有人需要做同样的事情并且不熟悉使用 Datasource Query Builder。
我所做的只是单击我正在使用的数据库,然后单击顶部的 Datasources 部分。
我点击了添加数据源,为其命名为一个新名称并将 Vasyl 的代码粘贴到 Query Builder Expression 框中。
它下方出现两个新框,允许我输入我想要过滤掉的所需状态。
最后我回到 Table 并将其数据源更改为我新创建的数据源。
由于您正在更改数据源,如果您有任何额外的代码,可能需要更新它以指向新的数据源。
示例: 我有一些按钮可以过滤各个部门的条目。
所以这个:
widget.datasource.query.clearFilters();
var datasource = app.datasources.SystemOrders;
var statuses = ['Complete'];
datasource.query.filters.WarehouseStatus._notIn = statuses;
datasource.load();
必须更改为:
widget.datasource.query.clearFilters();
var datasource = app.datasources.SystemOrders_HideComplete;
var statuses = ['Complete'];
datasource.query.filters.WarehouseStatus._notIn = statuses;
datasource.load();
您可以使用多个 运行,然后将它们的结果连接起来,如下所示
/**
* Retrieves records for ActionItems datasource.
* @param {RecordQuery} query - query object of the datasource;
* @return {Array<ActionItems>} user's rating as an array.
*/
function getActionItemsForUser_(query) {
var userRoles = app.getActiveUserRoles();
query.filters.Owner._contains = Session.getActiveUser().getEmail();
var ownerRecords = query.run();
query.clearFilters();
query.filters.AddedBy._contains = Session.getActiveUser().getEmail();
var addedByRecords = query.run();
return addedByRecords.concat(ownerRecords);
}