Operator Advisor anpassen > Operator Advisor Datenmodell erweitern > Dem Operator Advisor Datenmodell benutzerdefinierte Entitäten hinzufügen
Dem Operator Advisor Datenmodell benutzerdefinierte Entitäten hinzufügen
Das Hinzufügen neuer Entitäten zum Operator Advisor Datenmodell umfasst mehrere Schritte:
Data Shapes für die neue Entität erstellen
Um einen Data Shape für die neue Entität zu erstellen, führen Sie die folgenden Schritte aus:
1. Erstellen Sie in ThingWorx Composer einen neuen Data Shape. Benennen Sie für dieses Beispiel den Data Shape MyObject.
2. Klicken Sie unter Felddefinitionen auf Hinzufügen, und geben Sie neue Felddefinitionen für jede Eigenschaft an, die in den Data Shape integriert werden soll.
a. Legen Sie ein Feld als primären Schlüssel fest, indem Sie das Kontrollkästchen Ist primärer Schlüssel für dieses Feld aktivieren.
b. Legen Sie den Basistyp des Primärschlüsselfeldes auf LONG fest. Wenn das Primärschlüsselfeld den Datentyp LONG aufweist, werden die Werte für dieses Feld automatisch generiert, und die Logik zum Inkrementieren des Werts wird von der Datenbank verarbeitet. Wenn ein anderer Basistyp ausgewählt ist, müssen Sie die Logik für die Eindeutigkeit des primären Schlüssels verarbeiten.
Um die Übereinstimmung mit dem Operator Advisor Datenmodell sicherzustellen, fügen Sie ein Feld UID mit dem Basistyp LONG und aktiviertem Kontrollkästchen Ist primärer Schlüssel hinzu.
3. Klicken Sie auf Speichern, um den neuen Data Shape zu speichern.
* 
Wenn die Datenbanktabelle für den Data Shape erstellt wird, entspricht der Name der Datenbanktabelle dem Data Shape-Namen minus einem beliebigen Präfix in Kleinbuchstaben. Wenn z.B. der Data Shape den Namen ABC.MyObject besitzt, lautet der Name der Datenbanktabelle myobject. Da Präfixe nicht in den Namen der Datenbanktabellen enthalten sind, werden mehrere Data Shape-Namen, die zu denselben Datenbanktabellennamen führen würden, wie ABC.MyObject und PTC.SCA.SCO.MyObject, nicht unterstützt.
Ebenso entsprechen die Spaltennamen in der Datenbanktabelle den Feldnamen aus dem Data Shape in Kleinbuchstaben. Beispiel: Ein Feld mit dem Namen MyPrimaryLocation resultiert in einer Spalte mit dem Namen myprimarylocation. Daher werden Feldnamen mit denselben Buchstaben, jedoch abweichender Groß-/Kleinschreibung, wie MyName, myName und myname, nicht für denselben Data Shape unterstützt.
Datenbankinformationen mit dem neuen Data Shape aktualisieren
Aktualisieren Sie Datenbankinformationen mit dem neuen Data Shape. Dazu können Sie die Datenbankinformationen dem vorhandenen Dienst Get<entity>DBInfo für die Datenmodell-Entität, der die neue Entität logisch zugehörig ist, hinzufügen. Oder Sie können einen neuen Dienst Get<entity>DBInfo für die Entität erstellen. Wenn die neue Entität z.B. logisch ein Teil des Schemas für die Projektauftrag-Datenbank ist, fügen Sie die Datenbankinformationen für den neuen Data Shape dem Dienst GetJobOrderDBInfo hinzu.
Erstellen Sie einen neuen Dienst Get<entity>DBInfo für die Entität, wenn Sie einen benutzerdefinierten Manager für die neue Entität erstellen möchten.
Datenbankinformationen einem vorhandenen Dienst hinzufügen
So fügen Sie die Datenbankinformationen für den neuen Data Shape einem vorhandenen Dienst Get<entity>DBInfo hinzu:
1. Navigieren Sie zum standardmäßigen Produktionsauftrags-Manager (PTC.SCA.SCO.DefaultProductionOrderManager).
2. Navigieren Sie unter Dienste zu dem Dienst Get<entity>DBInfo und überschreiben Sie ihn für die Entität. Beispielsweise den Dienst GetJobOrderDBInfo oder GetWorkDefinitionDBInfo.
3. Fügen Sie im Skripteditor einen Eintrag für den neuen Data Shape als Array hinzu, der den vorhandenen Data-Shape-Einträgen ähnelt. Geben Sie die Datenbankinformationen für den Data Shape ein:
dataShapeName – Name des Data Shape, für den die neue Datenbanktabelle hinzugefügt wird.
indexedFields – Spalten, die indiziert werden sollen. Die Indizierung ermöglicht ein schnelleres Suchen und Sortieren. Mehrere indizierte Felder können in einem Array definiert werden. Jedes Element in dem Array kann die folgenden Eigenschaften enthalten:
name (erforderlich) – Name der Spalte.
unique – Angabe, ob die Spalte einen eindeutigen Wert aufweisen muss.
identifier – Der Name der Entität in der Datenbank. Wenn kein Name festgelegt wird, generiert das System den Wert automatisch im Format <Tabellenname>_<Spaltenname>_idx. Wenn der Name festgelegt wird, muss dieser sowohl für festgelegte Werte als auch für alle automatisch generierten Werte eindeutig sein. Die maximale Länge für den Wert entspricht der in der Datenbank zulässigen maximalen Länge von IDs.
fields – Jede Spalte, für die eine zusätzliche Angabe erforderlich ist. Mehrere Felder können in einem Array definiert werden. Jedes Element in dem Array kann die folgenden Eigenschaften enthalten:
name – Name der Spalte. Erforderlich.
length – Länge der Spalte, wenn es sich bei der Spalte um einen String handelt und eine andere Länge als die Standardlänge der Datenbank erforderlich ist.
notNull – Angabe, ob die Spalte nicht Null sein darf.
* 
Wenn eine Spalte einen eindeutigen Wert aufweisen muss, legen Sie dies anhand von unique im Array indexedFields fest und nicht im Array fields.
foreignKeys – Alle Fremdschlüssel-Spaltendefinitionen für die neue Datenbanktabelle. Mehrere Fremdschlüssel können in einem Array definiert werden. Jedes Element in dem Array muss die folgenden Eigenschaften enthalten:
name – Name der Spalte im aktuellen Data Shape, bei der es sich um einen Fremdschlüssel handeln soll.
referenceDataShapeName – Der Data Shape der referenzierten Datenbanktabelle.
referenceFieldName – Der Name des Felds mit dem referenzierten Wert.
identifier – Der Name der Entität in der Datenbank. Wenn kein Name festgelegt wird, generiert das System den Wert automatisch im Format <Tabellenname>_<Spaltenname>_fk. Wenn der Name festgelegt wird, muss dieser sowohl für festgelegte Werte als auch für alle automatisch generierten Werte eindeutig sein. Die maximale Länge für den Wert entspricht der in der Datenbank zulässigen maximalen Länge von IDs.
onDelete – Verhalten des aktuellen Data Shape (sofern überhaupt reagiert wird), wenn Instanzen des referenzierten Data Shape gelöscht werden
deleteReference – Verhalten des referenzierten Data Shape (sofern überhaupt reagiert wird), wenn Instanzen des aktuellen Data Shape gelöscht werden
Weitere Informationen zum Verhalten bei Löschvorgängen finden Sie unter Löschverhalten für Fremdschlüssel festlegen.
Wenn beispielsweise für den neuen Data Shape MyObject keine indizierten Felder jedoch aber ein Fremdschlüssel vorhanden sein sollen und die Länge des Feldes Location auf 4000 Zeichen festgelegt werden soll, geben Sie Folgendes ein:
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
4. Klicken Sie auf Fertig und anschließend auf Speichern, um den aktualisierten Dienst zu speichern.
Neue Dienste zum Abrufen von Datenbankinformationen erstellen
So erstellen Sie einen neuen Dienst, um die Datenbankinformationen für den neuen Data Shape abzurufen:
1. Navigieren Sie zum standardmäßigen Produktionsauftrags-Manager (PTC.SCA.SCO.DefaultProductionOrderManager) oder zum benutzerdefinierten Manager für die Entität, wenn Sie einen erstellt haben.
2. Klicken Sie unter Dienste auf Hinzufügen, um einen neuen Dienst hinzuzufügen. Benennen Sie den Dienst mit Get<entity>DBInfo, und ersetzen Sie <Entität> durch den Namen des Data Shape. Beispiel: GetMyObjectDBInfo.
3. Legen Sie JSON als Ausgabetyp für den Dienst fest.
4. Wenn Sie einen der vorhandenen Dienste Get<entity>DBInfo als Vorlage verwenden, geben Sie die Datenbankinformationen für Ihren Data Shape ein. In Schritt c im vorherigen Abschnitt finden Sie Informationen zu den Datenbankinformationen, die festzulegen sind.
5. Klicken Sie auf Fertig und anschließend auf Speichern, um den neuen Dienst zu speichern.
6. Überschreiben und bearbeiten Sie den Dienst GetDBInfo.
7. Fügen Sie im Skripteditor einen Eintrag für den neuen Dienst hinzu.
Wenn Sie beispielsweise den Dienst GetDBInfo auf dem standardmäßigen Produktionsauftrags-Manager überschreiben, fügen Sie dem Dienst GetMyObjectDBInfo einen Eintrag hinzu, der folgendem ähnelt:
Array.prototype.push.apply(dbInfo.dbInfo, me.GetMyObjectDBInfo().dbInfo);
Wenn Sie beispielsweise den Dienst GetDBInfo auf einem benutzerdefinierten Manager überschreiben, fügen Sie dem Dienst GetMyObjectDBInfo einen Eintrag hinzu, wobei der Dienstcode etwa wie folgt aussehen sollte:
var dbInfo = {
dbInfo: []
};
Array.prototype.push.apply(dbInfo.dbInfo, me.GetMyObjectDBInfo().dbInfo);
var result = dbInfo;
8. Klicken Sie auf Fertig und anschließend auf Speichern, um den aktualisierten Dienst zu speichern.
CRUD-Dienste erstellen
Erstellen Sie die CRUD-Dienste, die für die Verwaltung von Instanzen des neuen Data Shape erforderlich sind.
1. Navigieren Sie zum standardmäßigen Produktionsauftrags-Manager (PTC.SCA.SCO.DefaultProductionOrderManager) oder zum benutzerdefinierten Manager für die Entität, wenn Sie einen erstellt haben.
2. Klicken Sie unter Dienste auf Hinzufügen, und erstellen Sie die erforderlichen Dienste. Verwenden Sie die vorhandenen CRUD-Dienste für Operator Advisor Entitäten als Modelle.
Erstellungsdienst:
Geben Sie einen Namen für den Dienst ein. Geben Sie für dieses Beispiel CreateMyObjects ein.
Fügen Sie als Diensteingabe eine Eingabe mit dem Namen MyObjects und dem Basistyp INFOTABLE hinzu. Wählen Sie für Data Shape Ihren Data Shape aus.
Wählen Sie als Dienstausgabe INFOTABLE aus und wählen Sie anschließend Ihren Data Shape.
Geben Sie im Fensterbereich "Skript" einen ähnlichen Code wie den folgenden ein:
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
Löschdienst:
Geben Sie einen Namen für den Dienst ein. Geben Sie für dieses Beispiel DeleteMyObject ein.
Fügen Sie als Diensteingabe eine Eingabe mit dem Namen UID und dem Basistyp STRING hinzu.
Wählen Sie als Dienstausgabe INFOTABLE aus und wählen Sie anschließend Ihren Data Shape.
Geben Sie im Fensterbereich "Skript" einen ähnlichen Code wie den folgenden ein:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
Aktualisierungsdienst:
Geben Sie einen Namen für den Dienst ein. Geben Sie für dieses Beispiel UpdateMyObjects ein.
Fügen Sie als Diensteingabe eine Eingabe mit dem Namen MyObjects und dem Basistyp INFOTABLE hinzu. Wählen Sie für Data Shape Ihren Data Shape aus.
Wählen Sie als Dienstausgabe INFOTABLE aus und wählen Sie anschließend Ihren Data Shape.
Geben Sie im Fensterbereich "Skript" einen ähnlichen Code wie den folgenden ein:
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
Dienst, um eine einzelne Instanz dieses Data Shape abzurufen:
Geben Sie einen Namen für den Dienst ein. Geben Sie für dieses Beispiel GetMyObject ein.
Fügen Sie als Diensteingabe eine Eingabe mit dem Namen UID und dem Basistyp STRING hinzu.
Wählen Sie als Dienstausgabe INFOTABLE aus und wählen Sie anschließend Ihren Data Shape.
Geben Sie im Fensterbereich "Skript" einen ähnlichen Code wie den folgenden ein:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
Dienst zum Abrufen mehrerer Instanzen dieses Data Shape, optional einschließlich Filter-, Versatz- und Grenzwert-Eingabeparameter – Wenn keine Eingabeparameter angegeben werden, werden alle Instanzen von MyObject zurückgegeben:
Geben Sie einen Namen für den Dienst ein. Geben Sie für dieses Beispiel GetMyObjects ein.
Geben Sie als Diensteingabe:
eine Eingabe mit dem Namen filter und dem Basistyp JSON ein.
eine Eingabe mit dem Namen offset und dem Basistyp INTEGER ein.
eine Eingabe mit dem Namen limit und dem Basistyp INTEGER ein.
Wählen Sie als Dienstausgabe INFOTABLE aus und wählen Sie anschließend Ihren Data Shape.
Geben Sie im Fensterbereich "Skript" einen ähnlichen Code wie den folgenden ein:
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
3. Klicken Sie auf Speichern, um die neuen Dienste im standardmäßigen Produktionsauftrags-Manager (PTC.SCA.SCO.DefaultProductionOrderManager) zu speichern.
4. Fügen Sie der Tabelle ServiceConfigurationSettings unter Konfiguration einen Eintrag für den neuen Data Shape und den neuen Erstellungsdienst hinzu. Dadurch können Instanzen des neu zu erstellenden Data Shape mit dem Erstellungsdienst erstellt werden, wenn Daten in Operator Advisor importiert werden. Jeder Data Shape sollte in dieser Konfigurationstabelle nur einmal angegeben werden.
Weitere Informationen finden Sie unter Daten aus anderen Systemen importieren.
Datenbankinformationen mit Datenbankschema synchronisieren
Fügen Sie die neue Entität der Datenbank hinzu, indem Sie die Datenbankinformationen mit dem Datenbankschema synchronisieren. Weitere Informationen finden Sie unter Datenbankinformationen mit Datenbankschema synchronisieren.