2017-06-06 6 views
0

Ich verspreche, dass ich die Abfrage-Informationsseite gelesen habe, aber offensichtlich vermisse/missverstehe ich etwas.Versucht, nur Zeilen zu filtern, die zwei Kriterien erfüllen

Ich habe eine Tabelle, die den Status für mehrere Abteilungen hat (die Felder sind Strings). Wenn ein Benutzer diese Tabelle lädt, möchte ich App Maker verdeckte Jobs ausblenden.

Die Art, wie wir einen Job zu kategorisieren als beendet ist, wenn:

Der Bestandsstatus = vollständige und wenn die Der Lieferstatus = Lieferung.

Diese beiden Bedingungen müssen erfüllt sein.

Beispiel:

Inventory (Complete) + Versand (Lieferung) = hide

Inventory (In Progress) + Versand (Lieferung) = nicht verstecken

Inventory (Complete) + Delivery (Geplant) = nicht ausblenden

Ich habe folgendes versucht, aber es verbirgt alle das oben aufgeführte Beispiel, nicht nur das erste.

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

Ich habe dies auch versucht:

var datasource = app.datasources.SystemOrders; 
    datasource.query.filters.InventoryStatus._notIn = 'Complete'; 
    datasource.query.filters.DeliveryStatus._notIn = 'Delivered'; 
    datasource.load(); 

Aber ich bekomme diese Fehlermeldung:

„Mismatch Typ: Kann nicht Typ String für Eigenschaft _notIn gesetzt Typliste wird voraussichtlich SystemOrders... ToolBar.Button2.onClick: 2: 46 "

Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Filter verwenden AND-Operator. Bitte beachten Sie die Datenquelle Query Builder Schalten und Anwenden der folgenden Abfrage:

"InventoryStatus =: CompleteStatus OR DeliveryStatus =: DeliveredStatus"

Set CompleteStatus Variable Set DeliveredStatus Variable komplett geliefert zu

Erklärung : Filter, den Sie anwenden möchten, ist "NOT (InventoryStatus = Complete AND DeliveryStatus = Delivered)", was "InventoryStatus! = Complete OR DeliveryStatus! = Delivered" entspricht.

+0

Das funktionierte perfekt. Danke für die Hilfe. –

0

Vasyl meine Frage perfekt beantworten, aber ich wollte ein paar Details hinzufügen, falls jemand das gleiche tun muss und nicht vertraut mit der Verwendung der Datasource Query Builder.

Alles, was ich tat, war klicken Sie auf die Datenbank, die ich verwendet habe und dann auf die Datasources Abschnitt oben geklickt.

Ich klickte hinzufügen Datenquelle, ihm einen neuen Namen genannt und Vasyl den Code in das Query Builder Expression Feld eingefügt.

Zwei neue Felder darunter erscheinen, um die gewünschten Status einzugeben, die ich herausfiltern wollte.

enter image description here

Schließlich ging ich zu meinem Tisch zurück und änderte seine Datenquelle zu meiner neu erstellten Datenquelle.

Da Sie Ihre Datenquelle ändern, müssen Sie eventuell zusätzlichen Code hinzufügen, um auf die neue Datenquelle zu verweisen.

Beispiel: Ich hatte einige Schaltflächen, die Einträge für die verschiedenen Abteilungen filtern würden.

dies also:

widget.datasource.query.clearFilters(); 
var datasource = app.datasources.SystemOrders; 
var statuses = ['Complete']; 
    datasource.query.filters.WarehouseStatus._notIn = statuses; 
    datasource.load(); 

musste, dies ändern:

widget.datasource.query.clearFilters(); 
var datasource = app.datasources.SystemOrders_HideComplete; 
var statuses = ['Complete']; 
    datasource.query.filters.WarehouseStatus._notIn = statuses; 
    datasource.load(); 
0

Sie mehrere Lauf verwenden können und dann ihre Ergebnisse wie etwas verketten folgende

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