Building block > Building block comuni > Building block di connessione database > Utilizzo di filtri JSON nei servizi di interrogazione
Utilizzo di filtri JSON nei servizi di interrogazione
I filtri JSON possono essere utilizzati in molti servizi di interrogazione. Le sezioni seguenti illustrano come utilizzare i filtri JSON in qualsiasi servizio di interrogazione che utilizza il parametro di input filter facoltativo.
Chiavi e operatori supportati
Nei filtri JSON è supportato l'utilizzo delle chiavi e degli operatori che seguono:
select
as
localizedFieldName
filters
Con i seguenti valori di type (operatori logici):
EQ - Uguale a
NE - Diverso da
LT - Minore di
LE - Minore o uguale a
GT - Maggiore di
GE - Maggiore o uguale a
AND - E
OR - O
IN - In
NOTIN - Non in
LIKE - Simile a
NOTLIKE - Non simile a
BETWEEN - Tra
NOTBETWEEN - Non tra
TAGGED - Con tag
NOTTAGGED - Senza tag
MATCHES - Corrisponde a
NOTMATCHES - Non corrisponde a
MISSINGVALUE - Valore mancante
NOTMISSINGVALUE - Valore non mancante
isCaseSensitive - Confronto con distinzione tra maiuscole e minuscole se true; utilizzato con EQ, NE, LIKE, NOTLIKE, MATCHES e NOTMATCHES.
sorts
isAscending - Ordinamento crescente se true, ordinamento decrescente se false
isCaseSensitive - Ordinamento con distinzione tra maiuscole e minuscole se true
joins, con i seguenti valori type (tipi di join):
INNER
LEFT
RIGHT
FULL
dataShapeName - Nome della data shape in cui risiede la colonna (fieldName)
fieldName - Nome della colonna nella data shape
value o values - Valore o valori di interesse nel database
alias - Alias per la data shape rispetto a cui il servizio di interrogazione esegue l'interrogazione. Quando si specifica un alias, è necessario utilizzare alias nelle chiavi select, filters, joins e sorts.
function:
MIN
MAX
COUNT - Non supportato per i campi DATETIME.
AVG
SUM
groupBy
locale
* 
Nei filtri di esempio riportati di seguito, i campi Name in PTC.SCA.SCO.JobOrderProcessingResourceRequirement e PTC.SCA.SCO.JobOrder sono proprietà personalizzate aggiunte a tali data shape. Per utilizzare i filtri nel modo indicato, è necessario aggiungere questi campi alle data shape.
Quando si specificano proprietà personalizzate in un filtro JSON, è possibile specificare la data shape principale per l'oggetto, come illustrato negli esempi riportati di seguito. Non è necessario specificare la data shape _AP correlata utilizzata per aggiungere la proprietà personalizzata.
Chiave select
In una chiave select è possibile selezionare campi specifici di data shape specifiche che si desidera siano restituite dall'interrogazione. Creare una matrice JSON in cui ciascun oggetto specifica il nome dataShapeName e fieldName di un campo che deve essere restituito dall'interrogazione. dataShapeName può essere il nome della data shape principale (la data shape rispetto alla quale è in esecuzione il servizio) o il nome di un'altra data shape inclusa nell'interrogazione da un join. Se viene specificato un alias per una data shape, utilizzare tale alias ogni volta che si desidera fare riferimento a quella tabella dati specifica all'interno della chiave select. Quando non è definito alcun alias per una data shape, l'interrogazione utilizza per default un valore di alias univoco generato per la tabella dati. Ogni volta che non si specifica l'alias e il JSON fa riferimento alla stessa data shape, viene utilizzato lo stesso valore di alias univoco generato per la tabella dati.
Quando viene utilizzato as, la infotable di output aggiunge un campo per tale chiave select utilizzando il valore di as come nome del campo.
Le funzioni (MIN, MAX, COUNT, AVG, SUM) possono essere utilizzate in una chiave select. Un esempio di filtro JSON che include la funzione COUNT è disponibile qui.
* 
Se nella chiave select è utilizzata una funzione di aggregazione e sono presenti più oggetti select nella chiave select, è necessario utilizzare groupBy anche nel filtro o l'interrogazione non riesce.
Ad esempio, la chiave select seguente può essere utilizzata in un filtro JSON per il servizio GetJobOrders per restituire il nome di un requisito di risorse di elaborazione di commessa, il nome e l'ID di una commessa e il nome di una risorsa di elaborazione:
{
"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"
}
]
}
Nell'esempio precedente, i campi Name nelle data shape PTC.SCA.SCO.JobOrderProcessingResourceRequirement e PTC.SCA.SCO.JobOrder sono proprietà supplementari aggiunte alle data shape.
* 
Il servizio BuildSelectFromDataShapes nell'oggetto PTC.DBConnection.QueryUtils può essere utilizzato per creare la chiave select per le data shape specificate. Il seguente input del servizio di esempio restituisce una chiave select per le data shape PTC.SCA.SCO.JobOrderPRocessingResourceRequirement, PTC.SCA.SCO.JobORder e PTC.SCA.SCO.ProcessingResource:
{
"dataShapes": [{
"name": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement"
},
{
"name": "PTC.SCA.SCO.JobOrder"
},
{
"name": "PTC.SCA.SCO.ProcessingResource"
}
]
}
Chiave filters
La chiave filters consente di filtrare i risultati dell'interrogazione per i record corrispondenti a valori specifici. È possibile combinare in stringhe più filtri creando matrici JSON filters, separando i singoli filtri con una virgola e unendoli mediante l'operatore AND o OR. Ogni filtro specifica un dataShapeName, un fieldName, un type e un value o values (per l'operatore IN). Entrambi i filtri singoli e multipli devono essere quindi raggruppati sotto un'altra chiave filters.
dataShapeName può essere il nome della data shape principale (la data shape rispetto alla quale è in esecuzione il servizio) o il nome di un'altra data shape inclusa nell'interrogazione da un join. Se non si specifica un dataShapeName per il filtro, viene utilizzato il nome della data shape rispetto alla quale viene eseguito il servizio. Se viene specificato un alias per una data shape, utilizzare tale alias ogni volta che si desidera fare riferimento a quella tabella dati specifica all'interno della chiave filters. Quando non è definito alcun alias per una data shape, l'interrogazione utilizza per default un valore di alias univoco generato per la tabella dati. Ogni volta che non si specifica l'alias e il JSON fa riferimento alla stessa data shape, viene utilizzato lo stesso valore di alias univoco generato per la tabella dati.
Ad esempio, la chiave filters seguente può essere utilizzata in un filtro JSON per il servizio GetHistoricalData per restituire tutti i risultati nella tabella di database dei dati cronologici in cui è stata creata o aggiornata una commessa:
{
"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"
}
}
Chiave sorts
La chiave sorts consente di ordinare i risultati dell'interrogazione in base a un campo di data shape specifico (dataShapeName e fieldName), in ordine crescente o decrescente (isAscending) e di stabilire se il filtro riconosce la distinzione tra maiuscole e minuscole (isCaseSensitive). È possibile eseguire l'ordinamento su più campi includendo più oggetti di ordinamento nella matrice, separati da virgole.
dataShapeName può essere il nome della data shape principale (la data shape rispetto alla quale è in esecuzione il servizio) o il nome di un'altra data shape inclusa nell'interrogazione da un join. Se non si specifica un dataShapeName, viene utilizzato il nome della data shape rispetto alla quale viene eseguito il servizio. Se viene specificato un alias per una data shape, utilizzare tale alias ogni volta che si desidera fare riferimento a quella tabella dati specifica all'interno della chiave sorts. Quando non è definito alcun alias per una data shape, l'interrogazione utilizza per default un valore di alias univoco generato per la tabella dati. Ogni volta che non si specifica l'alias e il JSON fa riferimento alla stessa data shape, viene utilizzato lo stesso valore di alias univoco generato per la tabella dati.
Ad esempio, la chiave sorts seguente può essere utilizzata in un filtro JSON con il servizio GetJobOrders per ordinare i risultati in base al nome del requisito di risorse di elaborazione di commessa in ordine crescente, quindi in base al nome della commessa in ordine decrescente (presupponendo che il requisito di risorse di elaborazione di commessa sia incluso nell'interrogazione tramite un join).
{
"sorts":[
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name",
"isAscending": true,
"isCaseSensitive": false
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name",
"isAscending": false,
"isCaseSensitive": false
}
]
}
Join
Un join viene utilizzato per combinare righe di due o più data shape, in base a un campo correlato tra le data shape. Per utilizzare i campi delle data shape nelle chiavi di selezione, ordinamento o filtro, includere tali data shape (tranne la data shape principale) nell'interrogazione utilizzando un join.
Ogni join è costituito dal tipo di join (type), dalla data shape e dal nome del campo di origine o di sinistra (sourceDataShapeName e sourceFieldName) e dalla data shape e dal nome del campo di destinazione o di destra (targetDataShapeName e targetFieldName).
Utilizzare sourceAlias e targetAlias rispettivamente per le data shape di origine e destinazione del join. targetAlias deve essere univoco. sourceAlias deve fare riferimento all'alias principale per l'interrogazione o a un targetAlias precedente. Quando non è definito sourceAlias o targetAlias per una data shape, l'interrogazione utilizza per default un valore di alias univoco generato per la tabella dati. Ogni volta che non si specifica soureAlias o targetAlias e il JSON fa riferimento alla stessa data shape, viene utilizzato lo stesso valore di alias univoco generato per la tabella dati.
Sono supportati i seguenti tipi di join: INNER, LEFT, RIGHT e FULL.
INNER - Un join interno restituisce tutti i record che hanno valori corrispondenti in entrambe le data shape.
LEFT - Un join di sinistra restituisce tutti i record della data shape di sinistra (origine) e i record corrispondenti della data shape di destra (destinazione). Se non è presente alcuna corrispondenza, il risultato dal lato destro (destinazione) del join è NULL.
RIGHT - Un join di destra restituisce tutti i record della data shape di destra (destinazione) e i record corrispondenti della data shape di sinistra (origine). Se non è presente alcuna corrispondenza, il risultato dal lato sinistro (origine) del join è NULL.
FULL - Un join completo restituisce tutti i record in cui è presente una corrispondenza nella data shape di sinistra (origine) o di destra (destinazione).
Gli autojoin sono supportati quando i valori di sourceAlias e targetAlias per il join sono diversi. Se l'autojoin si trova nella data shape principale, sourceAlias deve corrispondere al valore di alias della data shape principale.
Ad esempio, la chiave joins seguente può essere utilizzata in un filtro JSON per il servizio GetJobOrders per restituire tutti i record in cui UID nella commessa corrisponde al campo JobOrderUID nel requisito di risorse di elaborazione di commessa e dove il campo ProcessingResourceUID nel requisito di risorse di elaborazione di commessa corrisponde al campo UID della risorsa di elaborazione.
{
"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"
}
]
}
Raggruppa per
La chiave groupBy consente di aggregare le righe nell'output in righe di riepilogo in base a un campo di data shape specifico (dataShapeName e fieldName). dataShapeName può essere il nome della data shape principale (la data shape rispetto alla quale è in esecuzione il servizio) o il nome di un'altra data shape inclusa nell'interrogazione da un join. Se non si specifica un dataShapeName, viene utilizzato il nome della data shape rispetto alla quale viene eseguito il servizio. La chiave groupBy viene spesso utilizzata con le funzioni (MIN, MAX, COUNT, AVG, SUM).
Se viene specificato un alias per una data shape, utilizzare tale alias ogni volta che si desidera fare riferimento a quella tabella dati specifica all'interno della chiave groupBy. Quando non è definito alcun alias per una data shape, l'interrogazione utilizza per default un valore di alias univoco generato per la tabella dati. Ogni volta che non si specifica l'alias e il JSON fa riferimento alla stessa data shape, viene utilizzato lo stesso valore di alias univoco generato per la tabella dati.
Ad esempio, la chiave groupBy seguente può essere utilizzata in un filtro JSON per un servizio di interrogazione per raggruppare i risultati in base al nome del tipo di motivo:
{
"groupBy": [
{
"dataShapeName": "PTC.ReasonCode.ReasonType",
"fieldName": "name"
}
}
Lingua
La chiave locale consente di restituire l'output localizzato nei risultati dell'interrogazione. Per il valore di locale, specificare la lingua desiderata per l'output. I valori della lingua corrispondono al campo code nella tabella Language. Per ulteriori informazioni, vedere [link to topic explaining the DB localization functionality, forthcoming].
Quando si specifica la chiave locale, è necessario specificare localizedFieldName nella chiave select insieme a fieldName e dataShapename per fornire e denominare la colonna utilizzata nell'output dell'interrogazione per il token localizzato.
Ad esempio, le seguenti chiavi locale e select possono essere utilizzate in un filtro JSON per un servizio di interrogazione per restituire i nomi dei codici motivo in francese:
{
"locale":"fr",
"select":[
{
"fieldName":"displayName_Token",
"dataShapeName":"PTC.ReasonCode.Reason",
"localizedFieldName":"reason_name_localized"
}
],
"filters":{
"filters":[
{
"dataShapeName":"PTC.ReasonCode.Reason",
"fieldName":"name",
"type":"EQ",
"value":"Unknown"
}
],
"type":"AND"
}
}
Filtri JSON di esempio
Esempio 1 L'esempio seguente mostra un filtro utilizzabile con il servizio GetHistoricalData. Il filtro restituisce tutti i risultati nel database dei dati cronologici in cui è stata creata una commessa, quindi ordina i risultati in ordine crescente in base al momento di creazione di ogni commessa.
{
"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
}
]
}
Esempio 2 L'esempio seguente mostra un filtro utilizzabile con il servizio GetJobOrders. Con questo filtro:
Per ogni risultato vengono restituiti il Name e l'ID della commessa, il Name della risorsa di elaborazione correlata e il Name del requisito di risorse di elaborazione di commessa.
I risultati vengono filtrati solo per le risorse di elaborazione che hanno come ID un valore di WC1.
I risultati restituiti sono relativi ai record in cui l'UID nella commessa corrisponde al campo JobOrderUID nel requisito di risorse di elaborazione di commessa e dove il campo ProcessingResourceUID nel requisito di risorse di elaborazione di commessa corrisponde al campo UID nella risorsa di elaborazione.
I risultati vengono ordinati in base al Name del requisito di risorse di elaborazione di commessa in ordine crescente, quindi in base al Name della commessa in ordine decrescente.
{
"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
}
]
}
Esempio 3: nell'esempio riportato di seguito viene illustrato un filtro che può essere utilizzato durante l'interrogazione rispetto alla data shape PTC.ReasonCode.ReasonCategory come data shape principale per l'interrogazione. Questo filtro include le chiavi as, la funzione COUNT e 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"
}
]
}
Esempio 4: nell'esempio riportato di seguito viene illustrato un filtro che può essere utilizzato durante l'interrogazione rispetto alla data shape PTC.ReasonCode.ReasonCategory come data shape principale per l'interrogazione. Questo filtro include un autojoin rispetto alla data shape PTC.ReasonCode.ReasonCategory utilizzando sourceAlias e targetAlias, le chiavi as, la funzione COUNT e 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"
}
]
}
Per ulteriori esempi di utilizzo dei filtri nelle interrogazioni, vedere Parametro di interrogazione per servizi di interrogazione in ThingWorx Help Center. Nota - I filtri Near e NotNear descritti in tale argomento non sono supportati in questi filtri JSON.
È stato utile?