尝试仅过滤满足两个条件的行

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);
}