Использование фильтров JSON
Использование фильтров JSON
Operator Advisor поддерживает фильтры JSON в сервисах запросов. В следующих разделах объясняется, как использовать эти фильтры JSON в службах Operator Advisor, использующих дополнительный входной параметр filter.
Поддерживаемые ключи и операторы
Следующие ключи и операторы поддерживаются для использования в фильтрах 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
В ключе select можно выбрать специальные поля из специальных профилей данных, которые необходимо возвращать запросом. Создайте массив JSON в каждом объекте, определяющем dataShapeName и fieldName для поля, которое необходимо возвращать запросом. dataShapeName может быть наименованием основного профиля данных (профиль данных для которого выполняется служба) или наименованием другого профиля данных, включенного в запрос с помощью соединения.
Например, следующий ключ select можно использовать как фильтр JSON для службы 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"
}
]
В приведенном ранее примере поля Name в PTC.SCA.SCO.JobOrderProcessingResourceRequirement и PTC.SCA.SCO.JobOrder являются дополнительными свойствами, добавленными в профили данных.
Filters
Ключ filters позволяет фильтровать результаты запроса для записей, соответствующих определенным значениям. Можно объединить несколько фильтров, построив массивы JSON под названием filters, разделив каждый фильтр запятой и объединив их с помощью AND или оператора OR. Каждый фильтр указывает dataShapeName, fieldName, type, и value или values (для оператора IN). Фильтры должны быть сгруппированы под другим ключом filters.
dataShapeName может быть наименованием основного профиля данных (профиль данных для которого выполняется служба) или наименованием другого профиля данных, включенного в запрос с помощью соединения. Если для фильтра не указан dataShapeName, то предполагается профиль данных, для которого выполняется сервис.
Например, следующий ключ filters можно использовать в фильтре 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": "IN",
"values": [1,2]
}
],
"type": "AND"
}
Sorts
С помощью ключа sorts можно производить сортировку результатов запроса, основанных на профиле данных особого поля (dataShapeName и fieldName), которое сортируется в восходящем или нисходящем порядке (isAscending), и определяет чувствительность фильтра к регистру (isCaseSensitive). Можно производить сортировку по нескольким полям, включая несколько объектов сортировки в массив, разделяя их запятыми.
dataShapeName может быть наименованием основного профиля данных (профиль данных для которого выполняется служба) или наименованием другого профиля данных, включенного в запрос с помощью соединения. Если не указан dataShapeName, то предполагается профиль данных, для которого выполняется служба.
Например, следующий ключ sorts можно использовать как фильтр JSON для службы GetJobOrders, чтобы произвести сортировку результатов по наименованию требования ресурса обработки для порядка работы в восходящем порядке или по наименованию порядка работы в нисходящем порядке (предполагается, что требование ресурса обработки для порядка работы включено в запрос с помощью соединения).
"sorts":[
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name",
"isAscending": true,
"isCaseSensitive": false
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name",
"isAscending": false,
"isCaseSensitive": false
}
]
Joins
Соединение используется для объединения строк из двух профилей данных или более, основываясь на связующим их поле. Профили данных (кроме основного) необходимо включить в запрос с помощью соединения для использования полей в профилях данных ключей select, sorts, или filters.
У каждого соединения есть тип (type), источник т. е. левый профиль данных и наименование поля (sourceDataShapeName и sourceFieldName), а также цель, т. е. правый профиль данных и наименование поля (targetDataShapeName и targetFieldName). Поддерживаются следующие типы соединений: INNER, LEFT, RIGHT и FULL.
INNER: внутреннее соединение возвращает все записи, для которых совпадают значения в обоих профилях данных.
LEFT: левое соединение возвращает все записи левого профиля данных (источника) и совпадающие записи правого (целевого) профиля данных. Если совпадений нет, то результат правой (целевой) стороны соединения равен NULL.
RIGHT: правое соединение возвращает все записи правого (целевого) профиля данных и совпадающие записи левого профиля данных (источника). Если совпадений нет, результат левой стороны (источник) соединения равен NULL.
FULL: полное соединение возвращает все записи при совпадении в левом профиле данных (источнике) или правом (целевом) профиле данных.
Например, следующий ключ joins можно использовать в фильтре JSON для службы 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. С помощью этого фильтра:
Для каждого результата, Name и ID порядка работы, возвращаются Name соответствующего ресурса обработки и Name сооветствующего требования ресурса обработки для порядка работы.
Результаты фильтруются только для ресурсов обработки со значением ID для WC1.
Результаты возвращены для тех записей, где UID в порядке работы совпадает с полем JobOrderUID требования ресурса обработки для порядка работы, и где поле ProcessingResourceUID требования ресурса обработки для порядка работы совпадает с полем UID ресурса обработки.
Результаты отсортированы по Name требования ресурса обработки для порядка работы в восходящем порядке и по Name порядка работы в нисходящем порядке.
* 
В этом примере поля Name в PTC.SCA.SCO.JobOrderProcessingResourceRequirement и PTC.SCA.SCO.JobOrder являются дополнительными свойствами, добавленными в профили данных. Неободимо добавить эти поля в профили данных для того, чтобы использовать фильтр как показано.
{
"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. Примечание: фильтры Near и NotNear, описанные в данной статье, не поддерживаются в Operator Advisor.