Bausteine > Datenmodell erweitern > Dem Datenmodell benutzerdefinierte Entitäten hinzufügen
Dem Datenmodell benutzerdefinierte Entitäten hinzufügen
Das Hinzufügen neuer Entitäten zum Datenmodell umfasst mehrere Schritte:
Neue Bausteine erstellen
Führen Sie die folgenden Schritte aus, um den neuen Baustein zu erstellen:
1. Erstellen Sie ein neues Projekt. Verwenden Sie ein eindeutiges Präfix für Ihr Projekt, z.B. den Namen Ihres Unternehmens. Das Präfix "PTC" ist für Entitäten reserviert, die von PTC bereitgestellt werden. Erstellen Sie für dieses Beispiel ein Projekt mit dem Namen MyCompany.MyBuildingBlock. Fügen Sie für jede neue Dingvorlage, jedes neue Ding oder jede andere Entität, die Sie für diesen Baustein erstellen, Ihr neues Projekt als Wert Projekt auf der Seite Allgemeine Informationen für die Entität hinzu.
2. Erstellen Sie eine neue Einstiegspunkt-Dingvorlage in Ihrem Projekt. Nennen Sie die neue Dingvorlage für dieses Beispiel MyCompany.MyBuildingBlock.EntryPoint_TT. Die zu verwendende Basis-Dingvorlage hängt vom Typ des neuen Bausteins ab:
Wenn Ihr Baustein einen PTC Baustein erweitert, verwenden Sie die Einstiegspunkt-Dingvorlage aus dem PTC Baustein.
Wenn Ihr Baustein ein abstrakter Baustein ist, verwenden Sie die Dingvorlage PTC.Base.ComponentEntryPoint_TT.
Wenn Ihr Baustein ein Implementierungs-Baustein ist, verwenden Sie die Dingvorlage PTC.DefaultConfiguration.EntryPoint_TT.
.
Wenn Ihr Baustein ein Standardbaustein ist, verwenden Sie die Dingvorlage PTC.Base.ComponentEntryPoint_TT.
Wenn Ihr Baustein ein Benutzeroberflächen-Baustein ist, verwenden Sie die Dingvorlage PTC.Base.ComponentEntryPoint_TT.
3. Erstellen Sie ein neues Ding in Ihrem Projekt, das die in Schritt 2 erstellte Dingvorlage als Basis-Dingvorlage verwendet. Nennen Sie das neue Ding für dieses Beispiel MyCompany.MyBuildingBlock.EntryPoint.
4. Wenn Ihr Baustein nicht einen PTC Baustein erweitert, erstellen Sie eine neue Dingform in Ihrem Projekt, um die Dienstdefinitionen für die Verwaltung der neuen Entität zu speichern. Benennen Sie für dieses Beispiel die neue Dingform MyCompany.MyBuildingBlock.Managment_TS. Wenn Ihr Baustein einen PTC Baustein erweitert, überspringen Sie diesen Schritt.
5. Wenn Ihr Baustein nicht einen PTC Baustein erweitert, erstellen Sie eine neue Dingvorlage in Ihrem Projekt, die PTC.Base.CommonManager_TT als Basis-Dingvorlage verwendet. Nennen Sie die neue Dingvorlage für dieses Beispiel MyCompany.MyBuildingBlock.Manager_TT. Wenn Ihr Baustein einen PTC Baustein erweitert, überspringen Sie diesen Schritt.
6. Wenn Ihr Baustein nicht einen PTC Baustein erweitert, fügen Sie die Dingform, die Sie in Schritt 4 erstellt haben, dem Feld Implementierte Formen auf der Dingvorlage hinzu, die Sie in Schritt 5 erstellt haben. Wenn Ihr Baustein einen PTC Baustein erweitert, überspringen Sie diesen Schritt.
7. Erstellen Sie ein neues Ding in Ihrem Projekt, das die in Schritt 5 erstellte Dingvorlage als Basis-Dingvorlage verwendet. Nennen Sie das neue Ding für dieses Beispiel MyCompany.MyBuildingBlock.Manager, und verwenden Sie MyCompany.MyBuildingBlock.Manager_TT als Basis-Dingvorlage.
8. Wenn Ihr neuer Baustein einen PTC Baustein erweitert, fügen Sie alle Konfigurationen aus dem Manager-Ding für den ursprünglichen Baustein dem Manager-Ding für Ihren neuen Baustein hinzu.
a. Navigieren Sie zum Manager-Ding, das Sie in Schritt 7 erstellt haben, in diesem Beispiel MyCompany.MyBuildingBlock.Manager.
b. Fügen Sie unter Konfiguration die gleichen Konfigurationen hinzu, die auf der Seite Konfiguration für das Manager-Ding des ursprünglichen Bausteins enthalten sind.
9. Registrieren Sie den benutzerdefinierten Manager.
a. Navigieren Sie zu dem Ding PTC.Base.Manager.
b. Klicken Sie unter Konfiguration auf Hinzufügen für die Konfigurationstabelle DefaultGlobalManagerConfiguration.
Geben Sie unter Name einen Namen für den benutzerdefinierten Manager ein wie z.B. MyCompany.MyBuildingBlock.Manager.
Suchen Sie für Wert das in Schritt 7 erstellte benutzerdefinierte Manager-Ding, und wählen Sie es aus.
c. Klicken Sie auf Hinzufügen, um den benutzerdefinierten Manager zur Konfigurationstabelle hinzuzufügen.
d. Klicken Sie auf Speichern, um die Aktualisierungen für das Manager-Ding zu speichern.
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. Fügen Sie dem Projekt den Data Shape für Ihren neuen Baustein hinzu. 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.
Fügen Sie das Feld UID mit dem Basistyp LONG hinzu, und aktivieren Sie das Kontrollkästchen Ist primärer Schlüssel, um die Übereinstimmung mit dem Bausteindatenmodell sicherzustellen.
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.JobOrder.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. Sie können dies erreichen, indem Sie die Datenbankinformationen für Ihre Entität dem Dienst GetDBInfo im Manager-Ding für Ihren neuen Baustein (MyCompany.MyBuildingBlock.Manager) hinzufügen.
So fügen Sie die Datenbankinformationen für den neuen Data Shape einem vorhandenen Dienst GetDBInfo hinzu:
1. Navigieren Sie zum Manager-Ding für Ihren neuen Baustein (MyCompany.MyBuildingBlock.Manager).
2. Navigieren Sie unter Dienste zu dem Dienst GetDBInfo und überschreiben Sie ihn.
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 – Name der Spalte. Erforderlich.
unique – Angabe, ob die Spalte einen eindeutigen Wert aufweisen muss.
fieldNames – Array, das die Namen der Spalten enthält. Wenn nur eine Spalte angegeben wird, wird ein einzelner Index erstellt. Wenn mehrere Spalten angegeben werden, wird ein zusammengesetzter Index erstellt.
* 
Ein einzelner Index kann erstellt werden, indem name mit einem einzelnen Wert angegeben wird, der der Name der Spalte ist, anstatt einen einzelnen Wert für fieldnames anzugeben. Wenn sowohl name als auch fieldnames angegeben werden, wird name ignoriert, und der Index wird mit den Werten für fieldnames erstellt.
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.
defaultValue – Der Standardwert für die Eigenschaft.
* 
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.
CRUD-Dienste erstellen
Erstellen Sie die CRUD-Dienste, die für die Verwaltung von Instanzen des neuen Data Shape erforderlich sind.
1. Klicken Sie in der Verwaltungs-Dingform für Ihren Baustein (MyCompany.MyBuildingBlock.Managment_TS) unter Dienste auf Hinzufügen, und erstellen Sie die erforderlichen Dienste. Verwenden Sie die vorhandenen CRUD-Dienste für Bausteinentitäten als Modelle.
Erstellungsdienst:
Geben Sie einen Namen für den Dienst ein. Geben Sie für dieses Beispiel AddMyObjects 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);
2. Klicken Sie auf Speichern, um die neuen Dienste auf Ihrer Dingform zu speichern.
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.
War dies hilfreich?