Allgemeine Bausteine > Datenbankverbindungsbaustein > JSON-Filter für Abfragedienste verwenden
JSON-Filter für Abfragedienste verwenden
JSON-Filter können für viele Abfragedienste verwendet werden. In den folgenden Abschnitten wird erläutert, wie Sie diese JSON-Filter in jedem der Abfragedienste verwenden können, die den optionalen Eingabeparameter filter verwenden.
Unterstützte Schlüssel und Operatoren
Die folgenden Schlüssel und Operatoren werden für die Verwendung in JSON-Filtern unterstützt:
select
as
filters
Mit den folgenden type-Werten (logische Operatoren):
EQ – Gleich
NE – Nicht gleich
LT – Kleiner als
LE – Kleiner als oder gleich
GT – Größer als
GE – Größer als oder gleich
AND – Und
OR – Oder
IN – In
NOTIN – Nicht in
LIKE – Wie
NOTLIKE – Nicht wie
BETWEEN – Zwischen
NOTBETWEEN – Nicht zwischen
TAGGED – Mit Tag versehen
NOTTAGGED – Nicht mit Tag versehen
MATCHES – Stimmt überein
NOTMATCHES – Stimmt nicht überein
MISSINGVALUE – Fehlender Wert
NOTMISSINGVALUE – Nicht fehlender Wert
isCaseSensitive – Unterscheidung nach Groß-/Kleinschreibung, wenn auf "wahr" festgelegt; wird mit EQ, NE, LIKE, NOTLIKE, MATCHES und NOTMATCHES verwendet
sorts
isAscending – Aufsteigende Sortierung, wenn auf "wahr" festgelegt; absteigende Sortierung, wenn auf "falsch" festgelegt
isCaseSensitive – Sortierung unter Beachtung der Groß-/Kleinschreibung, wenn auf "wahr" festgelegt
joins, mit den folgenden type-Werten (Join-Typen):
INNER
LEFT
RIGHT
FULL
dataShapeName – Name des Data Shape, in dem sich die Spalte (fieldName) befindet
fieldName – Name der Spalte im Data Shape
value oder values – Wert oder Werte von Interesse in der Datenbank
alias – Alias für den Data Shape, der vom Abfragedienst abgefragt wird. Wenn ein Alias angegeben wird, müssen Sie alias in den Schlüsseln select, filters, joins und sorts verwenden.
function:
MIN
MAX
COUNT – Wird für die Felder DATETIME nicht unterstützt.
AVG
SUM
groupBy
* 
In den folgenden Beispielfiltern sind die Felder Name sowohl bei PTC.SCA.SCO.JobOrderProcessingResourceRequirement als auch bei PTC.SCA.SCO.JobOrder benutzerdefinierte Eigenschaften, die diesen Data Shapes hinzugefügt wurden. Diese Felder müssen den Data Shapes hinzugefügt werden, um die Filter wie gezeigt verwenden zu können.
Wenn Sie benutzerdefinierte Eigenschaften in einem JSON-Filter angeben, können Sie, wie in diesen Beispielen dargestellt, den primären Data Shape für das Objekt festlegen. Es ist nicht erforderlich, den zugehörigen Data Shape _AP anzugeben, mit dem die benutzerdefinierte Eigenschaft hinzugefügt wird.
Auswählen
In einem select-Schlüssel können Sie bestimmte Felder aus bestimmten Data Shapes, die von der Abfrage zurückgegeben werden sollen, auswählen. Erstellen Sie ein JSON-Array, in dem jedes Objekt den dataShapeName und den fieldName für ein Feld, das von der Abfrage zurückgegeben werden soll, angibt. dataShapeName kann der Name des primären Data Shape (Data Shape gegen das der Dienst ausgeführt wird) oder der Name eines anderen Data Shape, der mit einem Join in die Abfrage eingeschlossen wurde, sein. Wenn ein alias für einen Data Shape angegeben ist, verwenden Sie den alias jedes Mal, wenn Sie auf diese bestimmte Datentabelle innerhalb des Schlüssels select verweisen möchten. Wenn alias für einen Data Shape nicht definiert ist, verwendet die Abfrage standardmäßig einen generierten eindeutigen Alias-Wert für diese Datentabelle. Jedes Mal, wenn Sie alias nicht angeben und die JSON den gleichen Data Shape referenziert, wird derselbe generierte eindeutige Alias-Wert für diese Datentabelle verwendet.
Wenn as verwendet wird, fügt die Ausgabe-Infotable ein Feld für den Schlüssel select unter Verwendung des Werts as als Feldname hinzu.
Funktionen (MIN, MAX, COUNT, AVG, SUM) können in einem Schlüssel select verwendet werden. Ein beispielhafter JSON-Filter mit der Funktion COUNT ist hier verfügbar.
* 
Wenn im Schlüssel select eine Aggregatfunktion verwendet wird und es mehr als ein select-Objekt im Schlüssel select gibt, dann muss groupBy auch im Filter verwendet werden, sonst schlägt die Abfrage fehl.
Beispiel: Es kann der folgende select-Schlüssel in einem JSON-Filter für den Dienst GetJobOrders verwendet werden, um den Namen einer Verarbeitungsressourcen-Anforderung für den Projektauftrag, den Namen und die ID des Projektauftrags sowie den Namen der Verarbeitungsressource zurückzugeben:
{
"select": [
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name"
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name"
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "ID"
},
{
"dataShapeName": "PTC.SCA.SCO.ProcessingResource",
"fieldName": "Name"
}
]
}
Im obigen Beispiel sind die Felder Name in PTC.SCA.SCO.JobOrderProcessingResourceRequirement sowie in PTC.SCA.SCO.JobOrder zusätzliche Eigenschaften, die den Data Shapes hinzugefügt wurden.
* 
Der Dienst BuildSelectFromDataShapes auf dem Ding PTC.DBConnection.QueryUtils kann verwendet werden, um den select-Schlüssel für angegebene Data Shapes zu erzeugen. Die folgende beispielhafte Diensteingabe führt zu einem select-Schlüssel für die Data Shapes PTC.SCA.SCO.JobOrderPRocessingResourceRequirement, PTC.SCA.SCO.JobORder und PTC.SCA.SCO.ProcessingResource:
{
"dataShapes": [{
"name": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement"
},
{
"name": "PTC.SCA.SCO.JobOrder"
},
{
"name": "PTC.SCA.SCO.ProcessingResource"
}
]
}
Filters
Der filters-Schlüssel erlaubt das Filtern der Abfrageergebnisse nach Datensätzen, die mit den bestimmten Werten übereinstimmen. Sie können mehrere Filter aneinander reihen, indem Sie ein JSON-Arrays mit dem Namen filters konstruieren, die einzelnen Filter durch ein Komma trennen und durch den Operator AND oder OR verbinden. Jeder Filter gibt Folgendes an: dataShapeName, fieldName, type und value oder values (für den Operator IN). Sowohl einzelne als auch mehrere Filter müssen unter einem anderen filters-Schlüssel zusammengefasst werden.
dataShapeName kann der Name des primären Data Shape (Data Shape gegen das der Dienst ausgeführt wird) oder der Name eines anderen Data Shape, der mit einem Join in die Abfrage eingeschlossen wurde, sein. Wird für den Filter keine Angabe für dataShapeName gemacht, so wird beim Ausführen des Diensts ein Data Shape zugrunde gelegt. Wenn ein alias für einen Data Shape angegeben ist, verwenden Sie den alias jedes Mal, wenn Sie auf diese bestimmte Datentabelle innerhalb des Schlüssels filters verweisen möchten. Wenn alias für einen Data Shape nicht definiert ist, verwendet die Abfrage standardmäßig einen generierten eindeutigen Alias-Wert für diese Datentabelle. Jedes Mal, wenn Sie alias nicht angeben und die JSON den gleichen Data Shape referenziert, wird derselbe generierte eindeutige Alias-Wert für diese Datentabelle verwendet.
Beispiel: Es kann der folgende filters-Schlüssel in einem JSON-Filter für den Dienst GetHistoricalData verwendet werden, um alle Ergebnisse in der Datenbanktabelle mit historischen Daten, in der ein Projektauftrag erstellt oder aktualisiert wurde, zurückzugeben:
{
"filters": {
"filters": [
{
"dataShapeName": "PTC.DBConnection.HistoricalData",
"fieldName": "DataShapeName",
"type": "EQ",
"value": "PTC.SCA.SCO.JobOrder",
"isCaseSensitive": true
},
{
"dataShapeName": "PTC.DBConnection.HistoricalData",
"fieldName": "ReferenceKey",
"type": "IN",
"values": [1,2]
}
],
"type": "AND"
}
}
Sorts
Der sorts-Schlüssel erlaubt die Sortierung der Abfrageergebnisse basierend auf einem bestimmten Data Shape-Feld (dataShapeName und fieldName) sowie die absteigende oder aufsteigende Sortierung (isAscending) und es kann festgelegt werden, ob für den Filter die Groß-/Kleinschreibung beachtet werden muss (isCaseSensitive). Es können mehrere Felder sortiert werden, indem mehrere, durch Komma getrennte sort-Objekte in das Array eingeschlossen werden.
dataShapeName kann der Name des primären Data Shape (Data Shape gegen das der Dienst ausgeführt wird) oder der Name eines anderen Data Shape, der mit einem Join in die Abfrage eingeschlossen wurde, sein. Ist kein dataShapeName angegeben, so wird beim Ausführen des Diensts ein Data Shape zugrunde gelegt. Wenn ein alias für einen Data Shape angegeben ist, verwenden Sie den alias jedes Mal, wenn Sie auf diese bestimmte Datentabelle innerhalb des Schlüssels sorts verweisen möchten. Wenn alias für einen Data Shape nicht definiert ist, verwendet die Abfrage standardmäßig einen generierten eindeutigen Alias-Wert für diese Datentabelle. Jedes Mal, wenn Sie alias nicht angeben und die JSON den gleichen Data Shape referenziert, wird derselbe generierte eindeutige Alias-Wert für diese Datentabelle verwendet.
Beispiel: Es kann der folgende sorts-Schlüssel in einem JSON-Filter mit dem Dienst GetJobOrders verwendet werden, um die Ergebnisse nach dem Namen der Projektauftrags-Verarbeitungsressourcen-Anforderung in aufsteigender Reihenfolge zu sortieren und anschließend nach dem Namen des Projektauftrags in absteigender Reihenfolge, wobei davon ausgegangen wird, dass die Projektauftrags-Verarbeitungsressourcen-Anforderung durch ein Join in die Abfrage eingeschlossen wurde.
{
"sorts":[
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name",
"isAscending": true,
"isCaseSensitive": false
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name",
"isAscending": false,
"isCaseSensitive": false
}
]
}
Joins
Ein Join wird verwendet, um zwei Zeilen aus zwei oder mehr Data Shapes, basierend auf einem zugehörigen Feld zwischen den Data Shapes, zu kombinieren. Um Felder auf die Data Shapes beim Auswählen, Sortieren oder Filtern von Schlüsseln anzuwenden, schließen Sie diese Data Shapes (mit Ausnahme des primären Data Shape) in die Abfrage ein, indem Sie eine Verknüpfung verwenden.
Jedes Join besteht aus einem Join-Typ (type), dem Quell-Data Shape oder linken Data Shape und dem Feldnamen (sourceDataShapeName und sourceFieldName), sowie dem Ziel-Data Shape oder rechten Data Shape und dem Feldnamen (targetDataShapeName und targetFieldName).
Verwenden Sie sourceAlias und targetAlias jeweils für die Quell- und Ziel-Data-Shapes des Join. targetAlias muss eindeutig sein. sourceAlias muss entweder den Haupt-alias für die Abfrage oder einen vorherigen targetAlias referenzieren. Wenn kein sourceAlias oder targetAlias für einen Data Shape definiert ist, verwendet die Abfrage standardmäßig einen generierten eindeutigen Alias-Wert für diese Datentabelle. Jedes Mal, wenn Sie soureAlias oder targetAlias nicht angeben und die JSON den gleichen Data Shape referenziert, wird derselbe generierte eindeutige Alias-Wert für diese Datentabelle verwendet.
Es werden die folgenden Join-Typen unterstützt: INNER, LEFT, RIGHT und FULL.
INNER – ein innerer Join gibt alle Datensätze, die übereinstimmende Werte in beiden Data Shapes haben, zurück.
LEFT – ein linker Join gibt alle Datensätze vom linken, d.h. dem Quell-Data Shape, sowie die übereinstimmenden Datensätze vom rechten Data Shape (Ziel-Data Shape) zurück. Ist keine Übereinstimmung vorhanden, so ist das Ergebnis von der rechten Seite des Join (Ziel) NULL.
RIGHT – ein rechter Join gibt alle Datensätze vom rechten, d.h. dem Ziel-Data Shape, sowie die übereinstimmenden Datensätze vom linken Data Shape (Quell-Data Shape) zurück. Ist keine Übereinstimmung vorhanden, so ist das Ergebnis von der linken Seite des Join (Quelle) NULL.
FULL – ein vollständiger Join gibt alle Datensätze zurück, für die eine Übereinstimmung in entweder dem linken oder rechten Data Shape (Quell- oder Ziel-Data Shape) vorhanden ist.
Self-Joins werden unterstützt, wenn die Werte sourceAlias und targetAlias für den Join unterschiedlich sind. Wenn sich Ihr Self-Join auf dem primären Data Shape befindet, muss sourceAlias mit dem Wert alias für den primären Data Shape übereinstimmen.
Beispiel: Es kann der folgende joins-Schlüssel in einem JSON-Filter für den Dienst GetJobOrders verwendet werden, um alle Datensätze, bei denen die UID im Projektauftrag mit dem Feld JobOrderUID in der Projektauftrags-Verarbeitungsressourcen-Anforderung übereinstimmt und bei denen das Feld ProcessingResourceUID in der Projektauftrags-Verarbeitungsressourcen-Anforderung mit dem Feld UID in der Verarbeitungsressource übereinstimmt.
{
"joins": [
{
"type": "INNER",
"sourceDataShapeName": "PTC.SCA.SCO.JobOrder",
"sourceFieldName": "UID",
"targetDataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"targetFieldName": "JobOrderUID"
},
{
"type": "INNER",
"sourceDataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"sourceFieldName": "ProcessingResourceUID",
"targetDataShapeName": "PTC.SCA.SCO.ProcessingResource",
"targetFieldName": "UID"
}
]
}
Gruppieren nach
Mit dem Schlüssel groupBy können Sie Zeilen in der Ausgabe in Zusammenfassungszeilen basierend auf einem bestimmten Data-Shape-Feld (dataShapeName und fieldName) aggregieren. dataShapeName kann der Name des primären Data Shape (Data Shape gegen das der Dienst ausgeführt wird) oder der Name eines anderen Data Shape, der mit einem Join in die Abfrage eingeschlossen wurde, sein. Ist kein dataShapeName angegeben, so wird beim Ausführen des Diensts ein Data Shape zugrunde gelegt. Der Schlüssel groupBy wird häufig mit Funktionen (MIN, MAX, COUNT, AVG, SUM) verwendet.
Wenn ein alias für einen Data Shape angegeben ist, verwenden Sie den alias jedes Mal, wenn Sie auf diese bestimmte Datentabelle innerhalb des Schlüssels groupBy verweisen möchten. Wenn alias für einen Data Shape nicht definiert ist, verwendet die Abfrage standardmäßig einen generierten eindeutigen Alias-Wert für diese Datentabelle. Jedes Mal, wenn Sie alias nicht angeben und die JSON den gleichen Data Shape referenziert, wird derselbe generierte eindeutige Alias-Wert für diese Datentabelle verwendet.
Beispielsweise kann der folgende Schlüssel groupBy in einem JSON-Filter für einen Abfragedienst verwendet werden, um die Ergebnisse nach dem Namen des Grundtyps zu gruppieren.
{
"groupBy": [
{
"dataShapeName": "PTC.ReasonCode.ReasonType",
"fieldName": "name"
}
}
Beispiel für JSON-Filter
Beispiel 1: Das folgende Beispiel zeigt einen Filter, der mit dem Dienst GetHistoricalData verwendet werden kann. Dieser Filter gibt alle Ergebnisse in der Datenbank historischer Daten zurück, bei denen ein Projektauftrag erstellt wurde, und sortiert die Ergebnisse dann in aufsteigender Reihenfolge nach dem Zeitpunkt, zu dem jeder Projektauftrag erstellt wurde.
{
"filters": {
"filters": [
{
"dataShapeName": "PTC.DBConnection.HistoricalData",
"fieldName": "DataShapeName",
"type": "EQ",
"value": "PTC.SCA.SCO.JobOrder"
},
{
"dataShapeName": "PTC.DBConnection.HistoricalData",
"fieldName": "ReferenceKey",
"type": "EQ",
"value": 1
}
],
"type": "AND"
},
"sorts": [
{
"fieldName": "TimeStamp",
"isAscending": true,
"isCaseSensitive": false
}
]
}
Beispiel 2: Das folgende Beispiel zeigt einen Filter, der mit dem Dienst GetJobOrders verwendet werden kann. Für diesen Filter gilt Folgendes:
Für jedes Ergebnis werden der Name und die ID des Projektauftrags, der Name der zugehörigen Verarbeitungsressource sowie der Name der zugehörigen Projektauftrags-Verarbeitungsressourcen-Anforderung zurückgegeben.
Die Ergebnisse werden nur für die Verarbeitungsressourcen mit einem Wert von WC1 für die ID gefiltert.
Die zurückgegebenen Ergebnisse sind für Datensätze, für die die UID auf dem Projektauftrag mit dem Feld JobOrderUID in der Projektauftrags-Verarbeitungsressourcen-Anforderung übereinstimmt und bei denen das Feld ProcessingResourceUID in der Projektauftrags-Verarbeitungsressourcen-Anforderung mit dem Feld UID in der Verarbeitungsressource übereinstimmt.
Die Ergebnisse werden nach Name der Projektauftrags-Verarbeitungsressourcen-Anforderung in aufsteigender Reihenfolge und anschließend nach Name des Projektauftrags in absteigender Reihenfolge sortiert.
{
"select": [
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name"
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name"
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "ID"
},
{
"dataShapeName": "PTC.SCA.SCO.ProcessingResource",
"fieldName": "Name"
}
],
"filters": {
"filters": [
{
"dataShapeName": "PTC.SCA.SCO.ProcessingResource",
"fieldName": "ID",
"type": "EQ",
"value": "WC1"
}
],
"type": "AND"
},
"joins": [
{
"type": "INNER",
"sourceDataShapeName": "PTC.SCA.SCO.JobOrder",
"sourceFieldName": "UID",
"targetDataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"targetFieldName": "JobOrderUID"
},
{
"type": "INNER",
"sourceDataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"sourceFieldName": "ProcessingResourceUID",
"targetDataShapeName": "PTC.SCA.SCO.ProcessingResource",
"targetFieldName": "UID"
}
],
"sorts":[
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name",
"isAscending": true,
"isCaseSensitive": false
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name",
"isAscending": false,
"isCaseSensitive": false
}
]
}
Beispiel 3: Das folgende Beispiel zeigt einen Filter, der beim Abfragen des Data Shape PTC.ReasonCode.ReasonCategory als primärer Data Shape für die Abfrage verwendet werden kann. Dieser Filter enthält die Schlüssel as, die Funktion COUNT und groupBy.
{
"select": [
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"as": "count",
"function": "COUNT"
},
{
"dataShapeName": "PTC.ReasonCode.ReasonType",
"fieldName": "name",
"as": "typeName"
}
],
"joins": [
{
"type": "LEFT",
"sourceDataShapeName": "PTC.ReasonCode.ReasonCategory",
"sourceFieldName": "reasonTypeUid",
"targetDataShapeName": "PTC.ReasonCode.ReasonType",
"targetFieldName": "uid"
}
],
"groupBy": [
{
"dataShapeName": "PTC.ReasonCode.ReasonType",
"fieldName": "name"
}
]
}
Beispiel 4: Das folgende Beispiel zeigt einen Filter, der beim Abfragen des Data Shape PTC.ReasonCode.ReasonCategory als primärer Data Shape für die Abfrage verwendet werden kann. Dieser Filter enthält einen Self-Join zum Data Shape PTC.ReasonCode.ReasonCategory und verwendet sourceAlias und targetAlias, die Schlüssel as, die Funktion COUNT und groupBy.
{
"alias": "ReasonCategory1",
"select": [
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"as": "name",
"alias": "ReasonCategory1"
},
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"as": "name2",
"alias": "ReasonCategory2"
},
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"as": "countName",
"function": "COUNT",
"alias": "ReasonCategory1"
}
],
"filters": {
"filters": [
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"type": "EQ",
"value": "Scrap",
"alias": "ReasonCategory1"
}
],
"type": "AND"
},
"joins": [
{
"type": "LEFT",
"sourceDataShapeName": "PTC.ReasonCode.ReasonCategory",
"sourceFieldName": "uid",
"sourceAlias": "ReasonCategory1",
"targetDataShapeName": "PTC.ReasonCode.ReasonCategory",
"targetFieldName": "uid",
"targetAlias": "ReasonCategory2"
},
{
"type": "LEFT",
"sourceDataShapeName": "PTC.ReasonCode.ReasonCategory",
"sourceFieldName": "reasonTypeUid",
"sourceAlias": "ReasonCategory1",
"targetDataShapeName": "PTC.ReasonCode.ReasonType",
"targetFieldName": "uid",
"targetAlias": "ReasonType"
}
],
"groupBy": [
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"alias": "ReasonCategory1"
},
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"alias": "ReasonCategory2"
}
]
}
Weitere Beispiele zur Verwendung von Filtern in Abfragen finden Sie unter Abfrageparameter für Abfragedienste im ThingWorx Hilfe-Center. Hinweis: Die Filter Near und NotNear in diesem Thema werden in diesen JSON-Filtern nicht unterstützt.
War dies hilfreich?