Operator Advisor anpassen > JSON-Filter für Abfragedienste verwenden
JSON-Filter für Abfragedienste verwenden
Operator Advisor unterstützt die Verwendung von JSON-Filtern für Abfragedienste. In den folgenden Abschnitten wird erläutert, wie Sie diese JSON-Filter in jedem der Operator Advisor Dienste 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
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
sorts
isAscending – Aufsteigend bei true, absteigend bei false
isCaseSensitive – Sortierung unter Beachtung der Groß-/Kleinschreibung, wenn true
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
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.
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.
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). Anschließend müssen die Filter 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.
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.SCA.SCO.HistoricalData",
"fieldName": "DataShapeName",
"type": "EQ",
"value": "PTC.SCA.SCO.JobOrder"
},
{
"dataShapeName": "PTC.SCA.SCO.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.
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). 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.
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"
}
]
Beispiel für JSON-Filter
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.SCA.SCO.HistoricalData",
"fieldName": "DataShapeName",
"type": "EQ",
"value": "PTC.SCA.SCO.JobOrder"
},
{
"dataShapeName": "PTC.SCA.SCO.HistoricalData",
"fieldName": "ReferenceKey",
"type": "EQ",
"value": 1
}
],
"type": "AND"
},
"sorts": [
{
"fieldName": "TimeStamp",
"isAscending": true,
"isCaseSensitive": false
}
]
}
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.
* 
In diesem Beispiel sind die Felder Name in PTC.SCA.SCO.JobOrderProcessingResourceRequirement und PTC.SCA.SCO.JobOrder zusätzliche Eigenschaften, die den Data Shapes hinzugefügt wurden. Um den Filter so verwenden zu können, wie gezeigt, müssen diese Felder den Data Shapes hinzugefügt werden.
{
"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
}
]
}
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 von Operator Advisor nicht unterstützt.