JSON フィルタの使用
JSON フィルタの使用
Operator Advisor では、クエリーサービスで JSON フィルタの使用がサポートされています。次のセクションでは、オプションの「filter」入力パラメータを使用する Operator Advisor サービスのいずれかでこれらの JSON フィルタを使用する方法について説明します。
サポートされるキーと演算子
JSON フィルタでは、以下のキーおよび演算子を使用できます。
select
filters (次の type 値 (論理演算子) を使用):
EQ - 指定値に等しい
NE - 指定値に等しくない
LT - 指定値より小さい
LE - 指定値以下
GT - 指定値より大きい
GE - 指定値以上
AND - 論理積
OR - 論理和
IN - いずれかに一致
sorts
isAscending - true の場合は昇順並べ替え、false の場合は降順並べ替え
isCaseSensitive - true の場合は大文字小文字を区別する並べ替え
joins (次の type 値 (結合タイプ) を使用):
INNER
LEFT
RIGHT
FULL
dataShapeName - 列 (fieldName) が存在するデータシェイプの名前
fieldName - データシェイプの列の名前
value または values - データベース内の 1 つまたは複数の目的の値
Select
select キーを使用すると、特定のデータシェイプから特定のフィールドを選択して、クエリーによって返すことができます。各オブジェクトがクエリーによって返されるフィールドの dataShapeName および fieldName を指定する、JSON 配列を構築します。dataShapeName は、プライマリデータシェイプの名前 (サービスが実行されているデータシェイプ)、または結合によってクエリーに含まれる別のデータシェイプの名前にすることができます。
たとえば、次の select キーを「GetJobOrders」サービスの JSON フィルタで使用して、ジョブオーダー処理リソース要件の名前、ジョブオーダーの名前と ID、および処理リソースの名前を返すことができます。
"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"
}
]
上記の例では、PTC.SCA.SCO.JobOrderProcessingResourceRequirementPTC.SCA.SCO.JobOrder の両方に対する Name フィールドは、データシェイプに追加されたその他のプロパティです。
Filters
filters キーを使用すると、特定の値に一致するレコードのクエリー結果をフィルタできます。filters と呼ばれる JSON 配列を作成する、各フィルタをコンマで区切る、およびフィルタを AND または OR 演算子で結合することにより、複数のフィルタをつなぎ合わせることができます。各フィルタは、dataShapeNamefieldNametype、および value または values (IN 演算子の場合) を指定します。次に、複数のフィルタを別の filters キーでグループ化しなければなりません。
dataShapeName は、プライマリデータシェイプの名前 (サービスが実行されているデータシェイプ)、または結合によってクエリーに含まれる別のデータシェイプの名前にすることができます。フィルタに dataShapeName が指定されていない場合、サービスが実行されるデータシェイプが指定されていると見なされます。
たとえば、次の filters キーを「GetHistoricalData」サービスの JSON フィルタで使用して、ジョブオーダーが作成または更新された履歴データのデータベーステーブル内のすべての結果を返すことができます。
"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
sorts キーを使用すると、特定のデータシェイプフィールド (dataShapeName および fieldName) に基づいてクエリー結果を並べ替えたり、昇順または降順 (isAscending) で並べ替えたり、フィルタで大文字と小文字を区別 (isCaseSensitive) するかどうかを指定できます。配列内に複数の並べ替えオブジェクトをコンマで区切って含めることによって、複数のフィールドに基づいて並べ替えることができます。
dataShapeName は、プライマリデータシェイプの名前 (サービスが実行されているデータシェイプ)、または結合によってクエリーに含まれる別のデータシェイプの名前にすることができます。dataShapeName が指定されていない場合、サービスが実行されるデータシェイプが指定されていると見なされます。
たとえば、次の sorts キーを「GetJobOrders」サービスの JSON フィルタで使用して、ジョブオーダー処理リソース要件の名前によって結果を昇順に並べ替え、その後、ジョブオーダー名によって降順に並べ替えることができます (ジョブオーダー処理リソース要件が、結合によってクエリーに含まれていると仮定します)。
"sorts":[
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name",
"isAscending": true,
"isCaseSensitive": false
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name",
"isAscending": false,
"isCaseSensitive": false
}
]
結合
結合を使用して、データシェイプ間の関連フィールドに基づいて、2 つ以上のデータシェイプの行を結合します。selectsorts、または filters キーでこれらのデータシェイプのフィールドを使用するためには、結合によってクエリーにデータシェイプ (プライマリデータシェイプ以外) を含める必要があります。
各結合は、結合タイプ (type)、ソースまたは左側のデータシェイプとフィールド名 (sourceDataShapeName および sourceFieldName)、およびターゲットまたは右側のデータシェイプとフィールド名 (targetDataShapeName および targetFieldName) から構成されています。INNERLEFTRIGHT、および FULL のタイプの結合がサポートされています。
INNER - 内部結合は、両方のデータシェイプに一致する値を持つすべてのレコードを返します。
LEFT - 左結合では、左側 (ソース) データシェイプのすべてのレコードと、右側 (ターゲット) データシェイプからの一致するレコードが返されます。一致するものがない場合、結合の右側 (ターゲット) の結果は NULL になります。
RIGHT - 右結合では、右側 (ターゲット) データシェイプのすべてのレコードと、左側 (ソース) データシェイプからの一致するレコードが返されます。一致するものがない場合、結合の左側 (ソース) の結果は NULL になります。
FULL - フル結合では、左側 (ソース) または右側 (ターゲット) のデータシェイプのいずれかに一致する、すべてのレコードを返します。
たとえば、次の joins キーを「GetJobOrders」サービスの JSON フィルタで使用して、ジョブオーダーの UID がジョブオーダー処理リソース要件の JobOrderUID フィールドと一致する場合、およびジョブオーダー処理リソース要件の ProcessingResourceUID フィールドが、処理リソースの UID フィールドと一致する場合に、すべてのレコードを返します。
"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"
}
]
JSON フィルタの例
次の例は、「GetHistoricalData」サービスで使用できるフィルタを示しています。このフィルタは、ジョブオーダーが作成された履歴データのデータベース内のすべての結果を返し、各ジョブオーダーが作成された時間の結果を昇順に並べ替えます。
{
"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
}
]
}
次の例は、「GetJobOrders」サービスで使用できるフィルタを示しています。このフィルタを使用した場合、以下のようになります。
各結果について、ジョブオーダーの NameID、関連する処理リソースの Name、および関連するジョブオーダー処理リソース要件の Name が返されます。
結果は、WC1ID 値を持つ処理リソースに対してのみフィルタされます。
返される結果は、ジョブオーダーの UID がジョブオーダー処理リソース要件の JobOrderUID フィールドと一致し、ジョブオーダー処理リソース要件の ProcessingResourceUID フィールドが処理リソースの UID フィールドと一致するレコードに対する結果です。
結果は、ジョブオーダー処理リソース要件の Name によって昇順に並べ替えられ、次にジョブオーダーの Name によって降順に並べ替えられます。
* 
この例では、PTC.SCA.SCO.JobOrderProcessingResourceRequirementPTC.SCA.SCO.JobOrder の両方に対する Name フィールドは、データシェイプに追加されたその他プロパティです。このフィルタを以下のように使用するには、これらのフィールドをデータシェイプに追加する必要があります。
{
"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
}
]
}
クエリーでのフィルタの使用に関するその他の例については、ThingWorx ヘルプセンターの クエリーサービス用クエリーパラメータ を参照してください。注記 - このトピックで説明している NearNotNear のフィルタは、Operator Advisor ではサポートされていません。