Operator Advisor 사용자 정의 > 질의 서비스에 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 - 데이터베이스의 값 또는 관심 대상 값
선택
select 키에서 질의에 의해 반환하려는 특정 데이터 셰이프에서 특정 필드를 선택할 수 있습니다. 각 객체가 질의에 의해 반환될 필드에 대해 dataShapeNamefieldName을 지정하는 JSON 배열을 구성합니다. dataShapeName은 기본 데이터 셰이프(서비스가 실행 중인 데이터 셰이프)의 이름 또는 조인에 의해 질의에 포함된 다른 데이터 셰이프의 이름이 될 수 있습니다.
예를 들어, JSON 필터에 다음 select 키를 사용하여 GetJobOrders 서비스가 작업 지시서 처리 리소스 요구 사항의 이름, 작업 지시서의 이름 및 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 연산자를 연결하여 여러 필터를 함께 사용할 수 있습니다. 각 필터는 dataShapeName, fieldName, typevalue 또는 values(IN 연산자의 경우)를 지정합니다. 그런 다음 다른 filters 키 아래에서 여러 필터를 그룹화해야 합니다.
dataShapeName은 기본 데이터 셰이프(서비스가 실행 중인 데이터 셰이프)의 이름 또는 조인에 의해 질의에 포함된 다른 데이터 셰이프의 이름이 될 수 있습니다. 필터에 dataShapeName이 지정되지 않은 경우, 서비스가 실행 중인 데이터 셰이프로 간주됩니다.
예를 들어, JSON 필터에 다음 filters 키를 사용하여 작업 지시서가 작성 또는 업데이트된 기록 데이터 데이터베이스 테이블에 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": "IN",
"values": [1,2]
}
],
"type": "AND"
}
Sorts
sorts 키를 사용하면 특정 데이터 셰이프 필드(dataShapeNamefieldName)를 기준으로 질의 결과를 정렬하고, 오름차순 또는 내림차순(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
}
]
조인
조인은 데이터 셰이프 간의 관련 필드를 기준으로 둘 이상의 데이터 셰이프에서 행을 결합하는 데 사용됩니다. 선택 키나 정렬 키, 필터 키에서 데이터 셰이프의 필드를 사용하려면 조인을 통해 질의에 기본 데이터 셰이프가 아닌 해당 데이터 셰이프를 포함합니다.
각 조인은 조인 유형(type), 소스 또는 왼쪽 데이터 셰이프 및 필드 이름(sourceDataShapeNamesourceFieldName), 대상 또는 오른쪽 데이터 셰이프 및 필드 이름(targetDataShapeNametargetFieldName)으로 구성됩니다. 다음 유형의 조인이 지원됩니다. INNER, LEFT, RIGHTFULL.
INNER - 내부 조인은 두 데이터 셰이프 모두에서 일치하는 값이 있는 모든 기록을 반환합니다.
LEFT - 왼쪽 조인은 왼쪽(소스) 데이터 셰이프의 모든 기록과 오른쪽(대상) 데이터 셰이프의 일치하는 기록을 반환합니다. 일치하는 항목이 없는 경우, 조인의 오른쪽(대상) 결과는 NULL입니다.
RIGHT - 오른쪽 조인은 오른쪽(대상) 데이터 셰이프의 모든 기록과 왼쪽(소스) 데이터 셰이프의 일치하는 기록을 반환합니다. 일치하는 항목이 없는 경우, 조인의 왼쪽(소스) 결과는 NULL입니다.
FULL - 전체 조인은 왼쪽(소스) 또는 오른쪽(대상) 데이터 셰이프에 일치하는 항목이 있는 모든 기록을 반환합니다.
예를 들어, JSON 필터에 다음 joins 키를 사용하여 GetJobOrders 서비스가 작업 지시서의 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이 반환됩니다.
결과가 ID 값이 WC1인 처리 리소스에 대해서만 필터링됩니다.
반환된 결과는 작업 지시서의 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에서 지원되지 않습니다.