Blocs de construction > Extension du modèle de données > Ajout d'entités personnalisées au modèle de données
Ajout d'entités personnalisées au modèle de données
L'ajout de nouvelles entités au modèle de données implique plusieurs étapes :
Créer un nouveau bloc de construction
Pour créer un nouveau bloc de construction, procédez comme suit :
1. Créez un nouveau projet. Utilisez un préfixe unique pour votre projet, tel que le nom de votre société. Le préfixe PTC est réservé pour les entités livrées par PTC. Pour cet exemple, créez un projet nommé MyCompany.MyBuildingBlock. Pour chaque nouveau modèle d'objet, objet ou autre entité que vous créez pour ce bloc de construction, ajoutez votre nouveau projet en tant que valeur de Projet sur la page Informations générales de l'entité.
2. Créez un nouveau modèle d'objet de point d'entrée dans votre projet. Pour cet exemple, nommez le nouveau modèle d'objet MyCompany.MyBuildingBlock.EntryPoint_TT. Le Modèle d'objet de base à utiliser dépend du type de votre nouveau bloc de construction :
Si votre bloc de construction s'étend à partir d'un bloc de construction PTC, utilisez le modèle d'objet de point d'entrée du bloc de construction PTC.
Si votre bloc de construction est un bloc de construction abstrait, utilisez le modèle d'objet PTC.Base.ComponentEntryPoint_TT.
Si votre bloc de construction est un bloc de construction d'implémentation, utilisez le modèle d'objet PTC.DefaultConfiguration.EntryPoint_TT
.
Si votre bloc de construction est un bloc de construction standard, utilisez le modèle d'objet PTC.Base.ComponentEntryPoint_TT.
Si votre bloc de construction est un bloc de construction d'interface utilisateur, utilisez le modèle d'objet PTC.Base.ComponentEntryPoint_TT.
3. Créez un nouvel objet dans votre projet qui utilise le modèle d'objet créé à l'étape 2 comme Modèle d'objet de base. Pour cet exemple, nommez le nouvel objet MyCompany.MyBuildingBlock.EntryPoint.
4. Si votre bloc de construction ne s'étend pas à partir d'un bloc de construction PTC, créez une nouvelle forme d'objet dans votre projet pour conserver les définitions de service pour la gestion de votre nouvelle entité. Pour cet exemple, nommez la nouvelle forme d'objet MyCompany.MyBuildingBlock.Managment_TS. Si votre bloc de construction s'étend à partir d'un bloc de construction PTC, ignorez cette étape.
5. Si votre bloc de construction ne s'étend pas à partir d'un bloc de construction PTC, créez un nouveau modèle d'objet dans votre projet qui utilise PTC.Base.CommonManager_TT comme Modèle d'objet de base. Pour cet exemple, nommez le nouveau modèle d'objet MyCompany.MyBuildingBlock.Manager_TT. Si votre bloc de construction s'étend à partir d'un bloc de construction PTC, ignorez cette étape.
6. Si votre bloc de construction ne s'étend pas à partir d'un bloc de construction PTC, ajoutez la forme d'objet que vous avez créée à l'étape 4 au champ Formes implémentées du modèle d'objet que vous avez créé à l'étape 5. Si votre bloc de construction s'étend à partir d'un bloc de construction PTC, ignorez cette étape.
7. Créez un nouvel objet dans votre projet qui utilise le modèle d'objet créé à l'étape 5 comme Modèle d'objet de base. Pour cet exemple, nommez le nouvel objet MyCompany.MyBuildingBlock.Manager et utilisez MyCompany.MyBuildingBlock.Manager_TT comme Modèle d'objet de base.
8. Si votre nouveau bloc de construction s'étend à partir d'un bloc de construction PTC, ajoutez les configurations de l'objet de gestionnaire du bloc de construction d'origine à l'objet de gestionnaire de votre nouveau bloc de construction.
a. Accédez à l'objet de gestionnaire que vous avez créé à l'étape 7, dans cet exemple, MyCompany.MyBuildingBlock.Manager.
b. Sous Configuration, ajoutez les mêmes configurations que celles de la page Configuration concernant l'objet de gestionnaire du bloc de construction d'origine.
9. Enregistrez le gestionnaire personnalisé.
a. Accédez à l'objet PTC.Base.Manager.
b. Sous Configuration, cliquez sur Ajouter pour la table de configuration DefaultGlobalManagerConfiguration.
Dans Nom, entrez un nom pour le gestionnaire personnalisé, par exemple MyCompany.MyBuildingBlock.Manager.
Dans Valeur, recherchez et sélectionnez l'objet de gestionnaire personnalisé créé à l'étape 7.
c. Cliquez sur Ajouter pour ajouter le gestionnaire personnalisé à la table de configuration.
d. Cliquez sur Enregistrer pour enregistrer les mises à jour apportées à l'objet de gestionnaire.
Créer une forme de données pour la nouvelle entité
Pour créer une forme de données pour la nouvelle entité, procédez comme suit :
1. Dans ThingWorx Composer, créez une nouvelle forme de données. Ajoutez la forme de données au projet pour votre nouveau bloc de construction. Dans cet exemple, nommez la forme de données MyObject.
2. Sous Définitions de champ, cliquez sur Ajouter et spécifiez de nouvelles définitions de champ pour chaque propriété à inclure dans la forme de données.
a. Pour désigner un champ en tant que clé primaire, cochez la case Est une clé primaire pour ce champ.
b. Définissez le Type de base du champ de clé primaire sur LONG. Si le champ de clé primaire est un type de données LONG, ses valeurs sont générées automatiquement et la logique d'incrémentation de la valeur est gérée par la base de données. Si vous avez sélectionné un Type de base différent, vous devez gérer la logique assurant l'unicité de la clé primaire.
Pour permettre un alignement avec le modèle de données du bloc de construction, ajoutez un champ UID ayant le Type de base de LONG, et cochez la case Est une clé primaire.
3. Cliquez sur Enregistrer pour enregistrer la nouvelle forme de données.
* 
Lorsque la table de la base de données est créée pour la forme de données, le nom de table de base de données est le nom de la forme de données, moins un préfixe, en minuscules. Par exemple, si la forme de données est nommée ABC.MyObject, le nom de table de base de données est myobject. Etant donné que les préfixes ne sont pas inclus dans les noms de table de base de données, les noms de forme de données multiples qui auraient pour résultat les mêmes noms de table de base de données, tels qu'ABC.MyObject et PTC.JobOrder.MyObject, ne sont pas pris en charge.
De même, les noms de colonne dans la table de base de données sont les noms de champ de la forme de données en minuscules. Par exemple, un champ nommé MyPrimaryLocation génère une colonne nommée myprimarylocation. Par conséquent, les noms de champ avec les mêmes lettres, mais des majuscules différentes, tels que MyName, myName et myname, ne sont pas pris en charge sur la même forme de données.
Mettre à jour les informations de base de données pour inclure la nouvelle forme de données
Mettre à jour les informations de base de données afin d'inclure la nouvelle forme de données. Pour ce faire, vous pouvez ajouter les informations de base de données de votre entité au service GetDBInfo de l'objet de gestionnaire de votre nouveau bloc de construction (MyCompany.MyBuildingBlock.Manager).
Pour ajouter les informations de base de données pour la nouvelle forme de données à un service GetDBInfo existant :
1. Accédez à l'objet de gestionnaire de votre nouveau bloc de construction (MyCompany.MyBuildingBlock.Manager).
2. Sous Services, accédez au service GetDBInfo et remplacez-le.
3. Dans l'éditeur de script, ajoutez une entrée pour la nouvelle forme de données sous la forme d'un tableau, similaire aux entrées de la forme de données existante. Incluez les informations de base de données pour votre forme de données :
dataShapeName : nom de la forme de données pour laquelle la nouvelle table de base de données est ajoutée.
indexedFields : colonnes à indexer. L'indexation accélère les recherches et le tri. Plusieurs champs indexés peuvent être définis dans un tableau. Chaque élément du tableau peut contenir les propriétés suivantes :
name : nom de la colonne. Obligatoire.
unique : permet de spécifier si la colonne doit avoir une valeur unique.
fieldNames : tableau contenant les noms des colonnes. Si une seule colonne est spécifiée, un index unique est créé. Si plusieurs colonnes sont spécifiées, un index composite est créé.
* 
Un index unique peut être créé en spécifiant name avec une valeur unique qui est le nom de la colonne, au lieu de spécifier une valeur unique pour fieldnames. Si name et fieldnames sont spécifiés, name est ignoré et l'index est créé à l'aide des valeurs fieldnames.
identifier : nom de l'entité dans la base de données. Si cette valeur n'est pas spécifiée, le système la génère automatiquement au format <nom_de_table>_<nom_de_colonne>_idx. Si cette valeur est spécifiée, elle doit être unique pour les valeurs spécifiées et pour toutes les valeurs générées automatiquement. La longueur maximale autorisée pour la valeur est celle autorisée par la base de données pour les identificateurs.
fields : toute colonne pour laquelle une spécification supplémentaire est requise. Vous pouvez définir plusieurs champs dans un tableau. Chaque élément du tableau peut contenir les propriétés suivantes :
name : nom de la colonne. Obligatoire.
length : longueur de la colonne, si la colonne est une String et si une longueur différente de la longueur par défaut de la base de données est requise.
notNull : permet de spécifier si la colonne ne doit pas être nulle.
defaultValue : valeur par défaut de la propriété.
* 
Si une colonne doit avoir une valeur unique, spécifiez-la à l'aide d'unique du tableau indexedFields, plutôt que dans le tableau fields.
foreignKeys : toute définition de colonne de clé étrangère pour la nouvelle table de base de données. Vous pouvez définir plusieurs clés étrangères dans un tableau. Chaque élément du tableau doit contenir les propriétés suivantes :
name : nom de la colonne de la forme de données actuelle à utiliser comme clé étrangère.
referenceDataShapeName : forme de données de la table de base de données référencée.
referenceFieldName : nom du champ contenant la valeur référencée.
identifier : nom de l'entité dans la base de données. Si cette valeur n'est pas spécifiée, le système la génère automatiquement au format <nom_de_table>_<nom_de_colonne>_fk. Si cette valeur est spécifiée, elle doit être unique pour les valeurs spécifiées et pour toutes les valeurs générées automatiquement. La longueur maximale autorisée pour la valeur est celle autorisée par la base de données pour les identificateurs.
onDelete : qu'advient-il, le cas échéant, des instances de la forme de données actuelle lorsque des instances de la forme de données référencée sont supprimées.
deleteReference : qu'advient-il, le cas échéant, des instances de la forme de données référencée lorsque des instances de la forme de données actuelle sont supprimées.
Pour plus d'informations sur les comportements en cas de suppression, consultez la rubrique Définition du comportement de l'action Supprimer avec des clés étrangères.
Par exemple, pour que la nouvelle forme de données MyObject ne comporte aucun champ indexé, ait une clé étrangère et pour définir une longueur de 4 000 caractères pour le champ Location, entrez ce qui suit :
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
4. Cliquez sur Terminé, puis sur Enregistrer pour enregistrer le service mis à jour.
Créer des services CRUD
Créez les services CRUD nécessaires à la gestion des instances de la nouvelle forme de données.
1. Sur la forme d'objet de gestion de votre bloc de construction (MyCompany.MyBuildingBlock.Managment_TS), sous Services, cliquez sur Ajouter et créez les services nécessaires. Utilisez les services CRUD existants pour les entités de blocs de construction comme modèles.
Service de création :
Entrez un nom de service. Dans cet exemple, entrez AddMyObjects.
Pour l'entrée de service, ajoutez une entrée nommée MyObjects, avec un Type de base de INFOTABLE. Dans le champ Forme de données, sélectionnez votre forme de données.
Pour la sortie de service, sélectionnez INFOTABLE, puis choisissez votre forme de données.
Dans le volet de script, entrez un code similaire à ce qui suit :
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
Service de suppression :
Entrez un nom de service. Dans cet exemple, entrez DeleteMyObject.
Pour l'entrée de service, ajoutez une entrée nommée UID, avec un Type de base de STRING.
Pour la sortie de service, sélectionnez INFOTABLE, puis choisissez votre forme de données.
Dans le volet de script, entrez un code similaire à ce qui suit :
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
Service de mise à jour :
Entrez un nom de service. Dans cet exemple, entrez UpdateMyObjects.
Pour l'entrée de service, ajoutez une entrée nommée MyObjects, avec un Type de base de INFOTABLE. Dans le champ Forme de données, sélectionnez votre forme de données.
Pour la sortie de service, sélectionnez INFOTABLE, puis choisissez votre forme de données.
Dans le volet de script, entrez un code similaire à ce qui suit :
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
Service permettant de récupérer une instance individuelle de cette forme de données :
Entrez un nom de service. Dans cet exemple, entrez GetMyObject.
Pour l'entrée de service, ajoutez une entrée nommée UID, avec un Type de base de STRING.
Pour la sortie de service, sélectionnez INFOTABLE, puis choisissez votre forme de données.
Dans le volet de script, entrez un code similaire à ce qui suit :
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
Un service permettant de récupérer plusieurs instances de cette forme de données, incluant éventuellement les paramètres d'entrée de filtre, de décalage et de limite. Si aucun paramètre d'entrée n'est spécifié, toutes les instances de MyObject sont renvoyées :
Entrez un nom de service. Dans cet exemple, entrez GetMyObjects.
Pour l'entrée de service :
Ajoutez une entrée nommée filter avec un Type de base de JSON.
Ajoutez une entrée nommée offset avec un Type de base de INTEGER.
Ajoutez une entrée nommée limit avec un Type de base de INTEGER.
Pour la sortie de service, sélectionnez INFOTABLE, puis choisissez votre forme de données.
Dans le volet de script, entrez un code similaire à ce qui suit :
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
2. Cliquez sur Enregistrer pour enregistrer les nouveaux services sur votre forme d'objet.
Synchroniser les informations de base de données et le schéma de base de données
Ajoutez la nouvelle entité à la base de données en synchronisant les informations de cette dernière avec le schéma de base de données. Pour plus d'informations, consultez la rubrique Synchronisation des informations et du schéma de base de données.
Est-ce que cela a été utile ?