我保证我已经阅读了查询信息页面,但显然我错过了/误解了什么。
我有一个表具有多个部门的状态(字段是字符串)。当用户加载该表时,我希望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
非常感谢任何帮助。
答案 0 :(得分:1)
过滤器使用AND运算符。请考虑切换数据源查询生成器并应用以下查询:
" InventoryStatus!=:CompleteStatus或DeliveryStatus!=:DeliveredStatus"
将CompleteStatus变量设置为Complete 将DeliveredStatus变量设置为Delivered
说明: 您要申请的过滤器是" NOT(InventoryStatus =完成AND DeliveryStatus = Delivered)"这相当于" InventoryStatus!=完成OR DeliveryStatus!=已交付"。
答案 1 :(得分:0)
Vasyl完美地回答了我的问题,但我想添加一些细节,以防任何人需要做同样的事情,并且不熟悉使用数据源查询生成器。
我所做的就是点击我正在使用的数据库,然后点击顶部的数据源部分。
我点击添加数据源,将其命名为新名称,并将Vasyl的代码粘贴到查询生成器表达式框中。
它下方会出现两个新框,允许我输入我想要过滤的所需状态。
最后我回到了我的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);
}