Personalizzazione di Operator Advisor > Estensione del modello di dati di Operator Advisor > Aggiunta di entità personalizzate al modello di dati di Operator Advisor
Aggiunta di entità personalizzate al modello di dati di Operator Advisor
L'aggiunta di nuove entità al modello di dati di Operator Advisor richiede diversi passi:
Creare una data shape per la nuova entità
Per creare una data shape per la nuova entità, attenersi alla procedura descritta di seguito.
1. In ThingWorx Composer, creare una nuova data shape. In questo esempio, denominare la data shape MyObject.
2. In Definizioni campi, fare clic su Aggiungi e specificare le nuove definizioni di campo per ciascuna proprietà da includere nella data shape.
a. Designare un campo come chiave principale selezionando la casella di controllo Chiave principale per il campo.
b. Impostare il Tipo di base del campo chiave principale su LONG. Se il campo chiave principale è un tipo di dati LONG, i valori di questo campo vengono generati automaticamente e la logica per incrementare il valore viene gestita dal database. Se è selezionato un Tipo di base diverso, è necessario gestire la logica per l'univocità della chiave principale.
Per allinearsi al modello di dati di Operator Advisor, aggiungere un campo UID, con Tipo di base corrispondente a LONG e la casella di controllo Chiave principale selezionata.
3. Fare clic su Salva per salvare la nuova data shape.
* 
Quando la tabella di database viene creata per la data shape, il nome della tabella di database corrisponde al nome della data shape, meno l'eventuale prefisso, in tutte lettere minuscole. Ad esempio, se la data shape è denominata ABC.MyObject, il nome della tabella di database è myobject. Poiché i prefissi non sono inclusi nei nomi delle tabelle di database, non sono supportati più nomi di data shape che determinerebbero lo stesso nome della tabella di database, ad esempio ABC.MyObject e PTC.SCA.SCO.MyObject.
Analogamente, i nomi di colonna nella tabella di database corrispondono ai nomi di campo della data shape in lettere minuscole. Ad esempio, un campo denominato MyPrimaryLocation restituisce una colonna denominata myprimarylocation. Di conseguenza, i nomi di campo con le stesse lettere, ma con maiuscole diverse, ad esempio MyName, myName e myname, non sono supportati nella stessa data shape.
Aggiornare le informazioni del database per includere la nuova data shape
Aggiornare le informazioni del database per includere la nuova data shape. A tale scopo, è possibile aggiungere le informazioni del database al servizio Get<entity>DBInfo esistente per l'entità del modello di dati a cui appartiene logicamente la nuova entità oppure creare un nuovo servizio Get<entity>DBInfo per l'entità. Ad esempio, se la nuova entità fa logicamente parte dello schema del database delle commesse, aggiungere le informazioni del database per la nuova data shape al servizio GetJobOrderDBInfo.
Se si sceglie di creare un manager personalizzato per la nuova entità, creare un nuovo servizio Get<entity>DBInfo per l'entità.
Aggiunta delle informazioni del database a un servizio esistente
Per aggiungere le informazioni del database per la nuova data shape a un servizio Get<entity>DBInfo esistente, procedere nel modo di seguito riportato.
1. Passare al manager degli ordini di produzione di default (PTC.SCA.SCO.DefaultProductionOrderManager).
2. In Servizi, passare al servizio Get<entity>DBInfo e sostituirlo per l'entità. Ad esempio, il servizio GetJobOrderDBInfo o il servizio GetWorkDefinitionDBInfo.
3. Nell'editor dello script, aggiungere una voce per la nuova data shape come matrice, in modo analogo alle voci di data shape esistenti. Includere le informazioni del database per la data shape:
dataShapeName - Nome della data shape per la quale viene aggiunta la nuova tabella di database.
indexedFields - Colonne da indicizzare. L'indicizzazione consente di eseguire ricerche e ordinamento più rapidamente. È possibile definire più campi indicizzati in una matrice. Ogni elemento nella matrice può contenere le proprietà riportate di seguito.
name (obbligatorio) - Nome della colonna.
unique - Specificare se la colonna deve avere un valore univoco.
identifier - Nome dell'entità nel database. Se non viene specificato, il sistema genera automaticamente il valore nel formato <nome_tabella>_<nome_colonna>_idx. Se specificato, il valore deve essere univoco sia per i valori specificati che per tutti i valori generati automaticamente. La lunghezza massima per il valore è la lunghezza massima consentita dal database per gli identificatori.
fields - Qualsiasi colonna per cui è necessario specificare altri valori. È possibile definire più campi in una matrice. Ogni elemento nella matrice può contenere le proprietà riportate di seguito.
name - Nome della colonna. Obbligatorio.
length - Lunghezza della colonna, se la colonna è di tipo String e occorre specificare una lunghezza diversa dalla lunghezza di default del database.
notNull - Specificare se la colonna non deve essere nulla.
* 
Se una colonna deve avere un valore univoco, specificarlo utilizzando unique nella matrice indexedFields anziché nella matrice fields.
foreignKeys - Qualsiasi definizione di colonna di chiave esterna per la nuova tabella di database. È possibile definire più chiavi esterne in una matrice. Ogni elemento nella matrice deve contenere le proprietà riportate di seguito.
name - Nome della colonna sulla data shape corrente che fungerà da chiave esterna.
referenceDataShapeName - Data shape della tabella di database referenziata.
referenceFieldName - Nome del campo contenente il valore da referenziare.
identifier - Nome dell'entità nel database. Se non viene specificato, il sistema genera automaticamente il valore nel formato <nome_tabella>_<nome_colonna>_fk. Se specificato, il valore deve essere univoco sia per i valori specificati che per tutti i valori generati automaticamente. La lunghezza massima per il valore è la lunghezza massima consentita dal database per gli identificatori.
onDelete - Cosa accade eventualmente alle istanze della data shape corrente quando vengono eliminate le istanze della data shape referenziata.
deleteReference - Cosa accade eventualmente alle istanze della data shape referenziata quando vengono eliminate le istanze della data shape corrente.
Per ulteriori informazioni sui comportamenti di eliminazione, vedere Impostazione del comportamento di eliminazione con chiavi esterne.
Ad esempio, perché la nuova data shape MyObject non presenti campi indicizzati, una chiave esterna e l'impostazione della lunghezza del campo Location su 4000 caratteri, immettere:
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
4. Fare clic su Fine, quindi su Salva per salvare il servizio aggiornato.
Creazione di un nuovo servizio per ottenere le informazioni del database
Per creare un nuovo servizio e ottenere le informazioni del database per la data shape, procedere nel modo di seguito riportato.
1. Passare al manager degli ordini di produzione di default (PTC.SCA.SCO.DefaultProductionOrderManager) oppure al manager personalizzato per l'entità, se ne è stato creato uno.
2. In Servizi, fare clic su Aggiungi per aggiungere un nuovo servizio. Assegnare un nome al servizio Get<entity>DBInfo sostituendo <entità> con il nome della data shape. Ad esempio, GetMyObjectDBInfo.
3. Impostare il tipo di output per il servizio su JSON.
4. Utilizzando uno dei servizi Get<entity>DBInfo esistenti come modello, immettere le informazioni del database per la data shape. Per specificare le informazioni del database, vedere il passo c nella sezione precedente.
5. Fare clic su Fine, quindi su Salva per salvare il nuovo servizio.
6. Sostituire e modificare il servizio GetDBInfo.
7. Nell'editor dello script, aggiungere una voce per il nuovo servizio.
Ad esempio, se si ignora il servizio GetDBInfo nel manager degli ordini di produzione di default, aggiungere una voce per il servizio GetMyObjectDBInfo simile alla seguente:
Array.prototype.push.apply(dbInfo.dbInfo, me.GetMyObjectDBInfo().dbInfo);
Ad esempio, se si ignora il servizio GetDBInfo in un manager personalizzato, aggiungere una voce per il servizio GetMyObjectDBInfo in modo che il codice del servizio sia simile al seguente:
var dbInfo = {
dbInfo: []
};
Array.prototype.push.apply(dbInfo.dbInfo, me.GetMyObjectDBInfo().dbInfo);
var result = dbInfo;
8. Fare clic su Fine, quindi su Salva per salvare il servizio aggiornato.
Creare i servizi CRUD
Creare i servizi CRUD necessari per la gestione di istanze della nuova data shape.
1. Passare al manager degli ordini di produzione di default (PTC.SCA.SCO.DefaultProductionOrderManager) oppure al manager personalizzato per l'entità, se ne è stato creato uno.
2. In Servizi, fare clic su Aggiungi e creare i servizi necessari. Utilizzare i servizi CRUD esistenti per le entità Operator Advisor come modelli.
Servizio di creazione:
Immettere un nome per il servizio. In questo esempio, immettere CreateMyObjects.
Per l'input del servizio, aggiungere un input denominato MyObjects, con Tipo di base corrispondente a INFOTABLE. Come Data shape, selezionare la propria data shape.
Per l'output del servizio, selezionare INFOTABLE e scegliere la propria data shape.
Nel riquadro dello script, immettere codice simile al seguente:
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
Servizio di eliminazione:
Immettere un nome per il servizio. In questo esempio, immettere DeleteMyObject.
Per l'input del servizio, aggiungere un input denominato UID, con Tipo di base corrispondente a STRING.
Per l'output del servizio, selezionare INFOTABLE e scegliere la propria data shape.
Nel riquadro dello script, immettere codice simile al seguente:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
Servizio di aggiornamento:
Immettere un nome per il servizio. In questo esempio, immettere UpdateMyObjects.
Per l'input del servizio, aggiungere un input denominato MyObjects, con Tipo di base corrispondente a INFOTABLE. Come Data shape, selezionare la propria data shape.
Per l'output del servizio, selezionare INFOTABLE e scegliere la propria data shape.
Nel riquadro dello script, immettere codice simile al seguente:
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
Servizio per recuperare una singola istanza di questa data shape:
Immettere un nome per il servizio. In questo esempio, immettere GetMyObject.
Per l'input del servizio, aggiungere un input denominato UID, con Tipo di base corrispondente a STRING.
Per l'output del servizio, selezionare INFOTABLE e scegliere la propria data shape.
Nel riquadro dello script, immettere codice simile al seguente:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
Un servizio per recuperare più istanze di questa data shape, includendo facoltativamente i parametri di input di filtro, offset e limite. Se non vengono specificati parametri di input, vengono restituite tutte le istanze di MyObject:
Immettere un nome per il servizio. In questo esempio, immettere GetMyObjects
Per l'input del servizio, procedere nel modo di seguito riportato.
Aggiungere un input denominato filter, con Tipo di base corrispondente a JSON.
Aggiungere un input denominato offset, con Tipo di base corrispondente a INTEGER.
Aggiungere un input denominato limit, con Tipo di base corrispondente a INTEGER.
Per l'output del servizio, selezionare INFOTABLE e scegliere la propria data shape.
Nel riquadro dello script, immettere codice simile al seguente:
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
3. Fare clic su Salva per salvare i nuovi servizi nel manager degli ordini di produzione di default (PTC.SCA.SCO.DefaultProductionOrderManager).
4. In Configurazione, aggiungere una voce per la nuova data shape e il nuovo servizio di creazione alla tabella ServiceConfigurationSettings. Ciò consente la creazione di istanze della nuova data shape utilizzando il servizio di creazione quando i dati vengono importati in Operator Advisor. Ogni data shape deve essere specificata una sola volta in questa tabella di configurazione.
Per ulteriori informazioni, vedere Importazione di dati da altri sistemi.
Sincronizzare le informazioni del database e lo schema del database
Aggiungere la nuova entità al database sincronizzando le informazioni del database con lo schema del database. Per ulteriori informazioni, vedere Sincronizzazione delle informazioni del database e dello schema del database.