Blocs de construction > Extension du modèle de données > Ajout de propriétés personnalisées à des entités de modèle de données
Ajout de propriétés personnalisées à des entités de modèle de données
De nombreuses entités du modèle de données de blocs de construction sont associées à une forme de données _AP pour permettre l'ajout de propriétés personnalisées. Par exemple, la forme de données de l'ordre de travail (PTC.JobOrder.JobOrder) est associée à une forme de données PTC.JobOrder.JobOrder_AP. L'exemple de cette rubrique ajoute une nouvelle propriété City à la forme de données PTC.JobOrder.JobOrder_AP.
L'ajout de propriétés personnalisées au modèle de données implique plusieurs étapes :
Pour voir un exemple illustrant comment remplir programmatiquement la nouvelle propriété personnalisée à l'aide d'un service, consultez la section Remplissage d'une propriété personnalisée.
Ajouter un champ à la forme de données
1. Dans ThingWorx Composer, accédez à la forme de données _AP pour l'entité. Pour cet exemple, accédez à PTC.JobOrder.JobOrder_AP.
2. Sous Définitions de champ, cliquez sur Ajouter.
3. Dans le volet Nouvelle définition de champ, spécifiez les éléments suivants :
Nom : nom de la propriété. Dans cet exemple, entrez City. Le nouveau nom ne peut pas correspondre au nom des champs de la forme de données d'origine.
Type de base : type de données de la propriété. Dans cet exemple, sélectionnez STRING. Les types de données suivants sont pris en charge :
STRING
NUMBER
INTEGER
BOOLEAN
LONG
TEXT
DATETIME
THINGNAME
THINGSHAPENAME
THINGTEMPLATENAME
USERNAME
SCHEDULE
IMAGELINK
* 
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é MyPrimaryCity génère une colonne nommée myprimarycity. 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.
4. Cliquez sur Icône de coche. pour ajouter la nouvelle définition de champ.
5. Cliquez sur Enregistrer pour enregistrer les mises à jour apportées à la forme de données.
Mettre à jour les informations de base de données avec des contraintes de base de données
Si votre nouvelle propriété requiert des contraintes de base de données, procédez comme suit :
1. Accédez au gestionnaire de l'entité à laquelle vous ajoutez la nouvelle propriété. Pour cet exemple, accédez à l'objet PTC.JobOrderImpl.Manager.
2. Créez un double de cet objet de gestionnaire que vous pouvez personnaliser. Pour cet exemple, nommez l'objet de gestionnaire dupliqué MyCompany.MyJobOrderImpl.Manager. Pour la valeur Projet sur l'objet de gestionnaire dupliqué, utilisez le projet pour un bloc de construction que vous avez créé. Dans cet exemple, vous utiliseriez un bloc de construction basé sur le bloc de construction PTC.JobOrderImpl qui comporte un projet nommé MyCompany.MyJobOrderImpl. Pour plus d'informations, consultez la rubrique Créer un nouveau bloc de construction.
3. Enregistrez le gestionnaire dupliqué.
a. Accédez à l'objet PTC.Base.Manager.
b. Sous Configuration, modifiez la ligne de gestionnaire appropriée dans la table de configuration DefaultGlobalManagerConfiguration et définissez la valeur managerThingName sur le nouvel objet de gestionnaire dupliqué que vous avez créé à l'étape 2. Pour cet exemple, mettez à jour la ligne de PTC.JobOrder.Manager pour définir MyCompany.MyJobOrderImpl.Manager comme managerThingName.
c. Cliquez sur Enregistrer pour enregistrer les modifications apportées à l'objet de gestionnaire.
4. Accédez à l'objet de gestionnaire dupliqué que vous avez créé à l'étape 2. Pour cet exemple, accédez à MyCompany.MyJobOrderImpl.Manager.
5. Sous Services, recherchez et remplacez le service GetDBInfo.
6. Dans l'éditeur de script, faites défiler vers le bas jusqu'à l'entrée correspondant à la forme de données à laquelle vous avez ajouté la propriété. Dans cet exemple, recherchez l'entrée suivante :
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
7. Mettez à jour l'entrée de la forme de données avec les informations contenues dans la base de données pour la nouvelle propriété.
Si la propriété doit être indexée, ajoutez-la au tableau indexedFields de la forme de données, avec les propriétés suivantes :
name : nom de la colonne. Obligatoire.
unique : permet de spécifier si la propriété 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_colonne1>_<nom_de_colonne2>_<nom_de_colonneN>_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.
Si la propriété doit être une clé étrangère, ajoutez un tableau foreignKeys pour la forme de données, avec les propriétés suivantes :
name : nom de la propriété 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.
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.
Pour spécifier des contraintes de base de données supplémentaires pour la propriété, ajoutez-la en tant qu'entrée dans un tableau fields :
name : nom de la nouvelle propriété. Obligatoire.
length : longueur de colonne de la nouvelle propriété, si elle est différente de la longueur de colonne par défaut de la base de données.
notNull : permet de spécifier si la propriété ne doit pas être nulle.
defaultValue : valeur par défaut de la propriété.
* 
Si une colonne de la base de données doit avoir une valeur unique, spécifiez-la à l'aide d'unique dans le tableau indexedFields, plutôt que dans le tableau fields.
Dans cet exemple, pour spécifier que City possède une longueur de colonne de 4 000 caractères et ne peut pas avoir une valeur nulle, mettez à jour l'entrée de la forme de données PTC.JobOrder.JobOrder_AP comme suit :
{
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
"fields": [{
"name": "City",
"length": 4000
"notNull": true
}]
},
8. Cliquez sur Enregistrer pour enregistrer les modifications apportées au service.
Synchroniser les informations de base de données et le schéma de base de données
Synchroniser les informations de base de données 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.
Remplissage d'une propriété personnalisée
Le code suivant est un exemple de la façon d'inclure la propriété personnalisée dans un service pour remplir programmatiquement la propriété. Ce code utilise le service CreateInfoTable disponible sur chaque objet de gestionnaire dans les blocs de construction de modèle de conception d'implémentation pour fusionner les formes de données PTC.JobOrder.JobOrder et PTC.JobOrder.JobOrder_AP dans une seule table d'informations et renseigne la nouvelle propriété Montreal avec la valeur de City.
var jobOrderDataShapeName = "PTC.JobOrder.JobOrder";
var jobOrderManagerThingName = me.GetJobOrderManager();
var jobOrders = Things[jobOrderManagerThingName ].CreateInfoTable({
dataShapeName: jobOrderDataShapeName
});
var jobOrder = {};
jobOrder.ID = "" + 121;
jobOrder.WorkType = 1;
jobOrder.Description = "test";
jobOrder.City = "Montreal";
jobOrders.AddRow(jobOrder);

var newJobOrders = Things[jobOrderManagerThingName ].CreateJobOrders({
JobOrders: jobOrders
});
Est-ce que cela a été utile ?