试图仅过滤符合两个标准的行

时间:2017-06-06 19:36:02

标签: google-app-maker

我保证我已经阅读了查询信息页面,但显然我错过了/误解了什么。

我有一个表具有多个部门的状态(字段是字符串)。当用户加载该表时,我希望App Maker 隐藏 已完成的作业。

我们将工作分类为完成的方式是:

广告资源状态=完成以及投放状态=已投放

这两个条件都需要满足。

示例:

库存(完成)+交货(已交货)= 隐藏

库存(进行中)+交货(已交货)=不要隐藏

库存(完成)+交货(预定)=不要隐藏

我尝试了以下内容,但它隐藏了所有上面列出的示例,而不仅仅是第一个。

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

但是我收到了这个错误:

  

类型不匹配:无法为属性_notIn设置类型字符串。类型列表是预期的。在SystemOrders.ToolBar.Button2.onClick:2:46

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

过滤器使用AND运算符。请考虑切换数据源查询生成器并应用以下查询:

" InventoryStatus!=:CompleteStatus或DeliveryStatus!=:DeliveredStatus"

将CompleteStatus变量设置为Complete 将DeliveredStatus变量设置为Delivered

说明: 您要申请的过滤器是" NOT(InventoryStatus =完成AND DeliveryStatus = Delivered)"这相当于" InventoryStatus!=完成OR DeliveryStatus!=已交付"。

答案 1 :(得分:0)

Vasyl完美地回答了我的问题,但我想添加一些细节,以防任何人需要做同样的事情,并且不熟悉使用数据源查询生成器

我所做的就是点击我正在使用的数据库,然后点击顶部的数据源部分。

我点击添加数据源,将其命名为新名称,并将Vasyl的代码粘贴到查询生成器表达式框中。

它下方会出现两个新框,允许我输入我想要过滤的所需状态。

enter image description here

最后我回到了我的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();

答案 2 :(得分:0)

您可以使用多次运行,然后将其结果连接起来,如下所示

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