Общие компоновочные блоки > Компоновочный блок подключения базы данных > Использование фильтров JSON в сервисах запросов
Использование фильтров JSON в сервисах запросов
Фильтры JSON могут использоваться во многих сервисах запросов. В следующих разделах описывается, как применять фильтры JSON в сервисах запросов, использующих дополнительный входной параметр filter.
Поддерживаемые ключи и операторы
Следующие ключи и операторы поддерживаются для использования в фильтрах JSON:
select
as
filters
Со следующими значениями type (логические операторы):
EQ: равно
NE: не равно
LT — Меньше
LE: меньше или равно
GT — Больше
GE: больше или равно
AND — И
OR — Или
IN - диапазон
NOTIN: не в
LIKE: подобно
NOTLIKE: не подобно
BETWEEN: между
NOTBETWEEN: не между
TAGGED: с тегами
NOTTAGGED: без тегов
MATCHES: соответствует
NOTMATCHES: не соответствует
MISSINGVALUE: значение отсутствует
NOTMISSINGVALUE: значение присутствует
isCaseSensitive: при значении true сравнение с учетом регистра; используется с EQ, NE, LIKE, NOTLIKE, MATCHES и NOTMATCHES.
sorts
isAscending: сортировка по возрастанию при значении true, и сортировка по убыванию при значении false
isCaseSensitive: чувствительная к регистру сортировка при значении true
joins со следующими значениями type (соединенные типы):
INNER
LEFT
RIGHT
FULL
dataShapeName: наименование профиля данных, в котором находится столбец (fieldName)
fieldName — Наименование столбца в профиле данных
value или values - одно или несколько взаимно определяющих значений в базе данных
alias: псевдоним профиля данных, запрашиваемого сервисом запросов. Если указан псевдоним, необходимо использовать alias для ключей select, filters, joins и sorts.
function:
MIN
MAX
COUNT: не поддерживается для полей DATETIME.
AVG
SUM
groupBy
* 
В следующих примерах фильтров, поля Name в PTC.SCA.SCO.JobOrderProcessingResourceRequirement и PTC.SCA.SCO.JobOrder являются пользовательскими свойствами, добавленными в такие профили данных. Необходимо добавить эти поля в профили данных для того, чтобы использовать фильтры как показано.
При указании пользовательских свойств фильтра JSON можно указать основной профиль данных для объекта, как показано в этих примерах. Не нужно указывать связанный профиль данных _AP, использованный для добавления пользовательского свойства.
Select
В ключе select можно выбрать специальные поля из специальных профилей данных, которые необходимо возвращать запросом. Создайте массив JSON в каждом объекте, определяющем dataShapeName и fieldName для поля, которое необходимо возвращать запросом. dataShapeName может быть наименованием основного профиля данных (профиль данных для которого выполняется служба) или наименованием другого профиля данных, включенного в запрос с помощью соединения. Если alias указан для профиля данных, то используйте alias в любом случае при необходимости на ссылку данных таблицы, указанных для ключа select. Если для профиля данных не указан alias, то в запросе по умолчанию использует уникальное автоматически созданное значение псевдонима для таблицы данных. Каждый раз, когда отсутствует указанный alias и JSON ссылается на один и тот же профиль данных, для таблицы данных будет использоваться одно уникальное автоматически созданное значение псевдонима.
Когда используется as в таблицу выходных данных добавляется поле ключа select, с использованием значения as в качестве имени поля.
Функции (MIN, MAX, COUNT, AVG, SUM) можно использовать с ключом select. Пример фильтра JSON с функцией COUNT доступен здесь.
* 
Если в ключе используется агрегатная функция select и имеется более одного объекта select в ключе select, то в фильтре необходимо использовать groupBy, или не удастся выполнить запрос.
Например, следующий ключ select можно использовать как фильтр JSON для службы GetJobOrders для возврата имени при требовании технологического ресурса для порядка работы, имени и идентификатора порядка работы и имени технологического ресурса:
{
"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 являются дополнительными свойствами, добавленными в профили данных.
* 
Сервис BuildSelectFromDataShapes в вещи PTC.DBConnection.QueryUtils можно использовать для построения ключа select для указанных профилей данных. В следующем примере служба ввода создает ключ select для профилей данных PTC.SCA.SCO.JobOrderPRocessingResourceRequirement, PTC.SCA.SCO.JobORder и PTC.SCA.SCO.ProcessingResource:
{
"dataShapes": [{
"name": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement"
},
{
"name": "PTC.SCA.SCO.JobOrder"
},
{
"name": "PTC.SCA.SCO.ProcessingResource"
}
]
}
Filters
Ключ filters позволяет фильтровать результаты запроса для записей, соответствующих определенным значениям. Можно объединить несколько фильтров, построив массивы JSON под названием filters, разделив каждый фильтр запятой и объединив их с помощью AND или оператора OR. Каждый фильтр указывает dataShapeName, fieldName, type, и value или values (для оператора IN). Отдельные и комплексные фильтры должны быть сгруппированы под другим ключом filters.
dataShapeName может быть наименованием основного профиля данных (профиль данных для которого выполняется служба) или наименованием другого профиля данных, включенного в запрос с помощью соединения. Если для фильтра не указан dataShapeName, то предполагается профиль данных, для которого выполняется сервис. Если alias указан для профиля данных, то используйте alias в любом случае при необходимости на ссылку данных таблицы, указанных для ключа filters. Если для профиля данных не указан alias, то в запросе по умолчанию использует уникальное автоматически созданное значение псевдонима для таблицы данных. Каждый раз, когда отсутствует указанный alias и JSON ссылается на один и тот же профиль данных, для таблицы данных будет использоваться одно уникальное автоматически созданное значение псевдонима.
Например, следующий ключ filters можно использовать в фильтре JSON для службы GetHistoricalData для возврата всех результатов таблицы базы данных с историческими данными, в которых был создан или обновлен порядок работы:
{
"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
С помощью ключа sorts можно производить сортировку результатов запроса, основанных на профиле данных особого поля (dataShapeName и fieldName), которое сортируется в восходящем или нисходящем порядке (isAscending), и определяет чувствительность фильтра к регистру (isCaseSensitive). Можно производить сортировку по нескольким полям, включая несколько объектов сортировки в массив, разделяя их запятыми.
dataShapeName может быть наименованием основного профиля данных (профиль данных для которого выполняется служба) или наименованием другого профиля данных, включенного в запрос с помощью соединения. Если не указан dataShapeName, то предполагается профиль данных, для которого выполняется служба. Если alias указан для профиля данных, то используйте alias в любом случае при необходимости на ссылку данных таблицы, указанных для ключа sorts. Если для профиля данных не указан alias, то в запросе по умолчанию использует уникальное автоматически созданное значение псевдонима для таблицы данных. Каждый раз, когда отсутствует указанный alias и JSON ссылается на один и тот же профиль данных, для таблицы данных будет использоваться одно уникальное автоматически созданное значение псевдонима.
Например, следующий ключ 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
}
]
}
Соединения
Соединение используется для объединения строк из двух профилей данных или более, основываясь на связующим их поле. Чтобы использовать поля в профилях данных с использованием выбора, сортировки или фильтрации ввода, необходимо включить такие профили данных (кроме основного профиля данных) в запрос с помощью соединения.
У каждого соединения есть тип (type), источник т. е. левый профиль данных и наименование поля (sourceDataShapeName и sourceFieldName), а также цель, т. е. правый профиль данных и наименование поля (targetDataShapeName и targetFieldName).
Используйте sourceAlias и targetAlias для изначального и целевого профилей данных соединения, соответственно. Значение targetAlias должно быть уникальным. sourceAlias должен ссылаться на основной alias или используемый ранее targetAlias для запроса. Если sourceAlias или targetAlias не указаны для профиля данных, то в запросе по умолчанию использует уникальное автоматически созданное значение псевдонима для таблицы данных. Каждый раз, когда отсутствует указанный soureAlias или targetAlias и JSON ссылается на один и тот же профиль данных, для таблицы данных будет использоваться одно уникальное автоматически созданное значение псевдонима.
Поддерживаются следующие типы соединений: INNER, LEFT, RIGHT и FULL.
INNER: внутреннее соединение возвращает все записи, для которых совпадают значения в обоих профилях данных.
LEFT: левое соединение возвращает все записи левого профиля данных (источника) и совпадающие записи правого (целевого) профиля данных. Если совпадений нет, то результат правой (целевой) стороны соединения равен NULL.
RIGHT: правое соединение возвращает все записи правого (целевого) профиля данных и совпадающие записи левого профиля данных (источника). Если совпадений нет, результат левой стороны (источник) соединения равен NULL.
FULL: полное соединение возвращает все записи при совпадении в левом профиле данных (источнике) или правом (целевом) профиле данных.
Самосоединения поддерживаются, если значения соединения sourceAlias и targetAlias отличаются. Если самосоединение выполняется в основном профиле данных, то sourceAlias должен совпадать со значением alias основного профиля данных.
Например, следующий ключ 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"
}
]
}
Группировать по
Ключ groupBy позволяет агрегировать строки выходных данных в суммарные строки на основе указанного поля профиля данных (dataShapeName и fieldName). dataShapeName может быть наименованием основного профиля данных (профиль данных для которого выполняется служба) или наименованием другого профиля данных, включенного в запрос с помощью соединения. Если не указан dataShapeName, то предполагается профиль данных, для которого выполняется служба. Ключ groupBy часто используется с функциями (MIN, MAX, COUNT, AVG, SUM).
Если alias указан для профиля данных, то используйте alias в любом случае при необходимости на ссылку данных таблицы, указанных для ключа groupBy. Если для профиля данных не указан alias, то в запросе по умолчанию использует уникальное автоматически созданное значение псевдонима для таблицы данных. Каждый раз, когда отсутствует указанный alias и JSON ссылается на один и тот же профиль данных, для таблицы данных будет использоваться одно уникальное автоматически созданное значение псевдонима.
Например, следующий ключ groupBy можно использовать в фильтре JSON для сервиса запроса, чтобы сгруппировать результаты по названию или типу причины.
{
"groupBy": [
{
"dataShapeName": "PTC.ReasonCode.ReasonType",
"fieldName": "name"
}
}
Примеры фильтров JSON
Пример 1. В следующем примере показан фильтр, который можно использовать для службы GetHistoricalData. Этот фильтр возвращает все значения в таблицу базы данных с историческими данными, в которой был создан порядок работы, и сортирует результаты в восходящем порядке в соответствии со временем создания каждого порядка работы.
{
"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
}
]
}
Пример 2. В следующем примере показан фильтр, который можно использовать для службы GetJobOrders. С помощью этого фильтра:
Для каждого результата, Name и ID порядка работы, возвращаются Name соответствующего ресурса обработки и Name соответствующего требования ресурса обработки для порядка работы.
Результаты фильтруются только для ресурсов обработки со значением ID для WC1.
Результаты возвращены для тех записей, где UID в порядке работы совпадает с полем JobOrderUID требования ресурса обработки для порядка работы, и где поле ProcessingResourceUID требования ресурса обработки для порядка работы совпадает с полем UID ресурса обработки.
Результаты отсортированы по Name требования ресурса обработки для порядка работы в восходящем порядке и по 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
}
]
}
Пример 3. В следующем примере показан фильтр, который можно использовать при запросе профиля данных PTC.ReasonCode.ReasonCategory в качестве основного профиля данных для запроса. Этот фильтр включает в себя ключи as, функцию COUNT и 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"
}
]
}
Пример 4. В следующем примере показан фильтр, который можно использовать при запросе профиля данных PTC.ReasonCode.ReasonCategory в качестве основного профиля данных для запроса. В этот фильтр включено самосоединение с профилем данных PTC.ReasonCode.ReasonCategory с использование sourceAlias и ключи targetAlias, as, функция COUNT и 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"
}
]
}
Для дополнительных примеров использования фильтров в запросах см.Параметр запроса для службы запросов в Центре справки ThingWorx. Примечание. Фильтры Near и NotNear, описанные в этом разделе, не поддерживаются в таких фильтрах JSON.
Было ли это полезно?