Personnalisation des outils et de la boîte à outilsCustomizing Tools and the Toolbox

Vous devez définir les éléments de boîte à outils pour les éléments que les utilisateurs sont autorisés à ajouter à leurs modèles.You must define toolbox items for the elements that you want to let users add to their models. Il existe deux types d'outils : les outils d'élément et les outils de connexion.There are two kinds of tools: element tools and connection tools. Dans le concepteur généré, un utilisateur peut sélectionner un outil d'élément pour déplacer des formes vers le diagramme et sélectionner un outil de connexion pour tracer des liens entre les formes.In the generated designer, a user can select an element tool to drag shapes to the diagram, and can select a connection tool to draw links between the shapes. En général, les outils d'élément permettent aux utilisateurs d'ajouter des instances de classes de domaine à leurs modèles et les outils de connexion d'ajouter des instances de relations de domaine.In general, element tools let users add instances of domain classes to their models, and connection tools let them add instances of domain relationships.

Dans cette rubrique :In this topic:

La définition de la boîte à outilsHow the toolbox is defined

Dans l'Explorateur DSL, développez le nœud Éditeur et les nœuds sous-jacents.In the DSL Explorer, expand the Editor node and the nodes underneath it. Généralement, vous voyez une arborescence qui se présente ainsi :Typically you will see a hierarchy that resembles this:


Editor
     Toobox Tabs
        MyDsl          //a tab
           Tools
               ExampleElement      // an element tool
               ExampleRelationship // a connection tool

Dans cette partie de l'Explorateur DSL, vous pouvez :In this part of DSL Explorer, you can:

  • Créer des onglets.Create new tabs. Les onglets définissent les en-têtes de section de la boîte à outils.Tabs define the section headings in the toolbox.

  • Créer des outils.Create new tools.

  • Copier et coller des outils.Copy and paste tools.

  • Monter ou descendre des outils dans la liste.Move tools up or down in the list.

  • Supprimer des onglets et des outils.Delete tabs and tools.

Important

Pour ajouter ou coller des éléments dans un Explorateur DSL, cliquez avec le bouton droit sur le grand-parent du nouveau nœud.To add or paste items in a DSL Explorer, right-click the grandparent of the new node. Par exemple, pour ajouter un outil, cliquez sur l’onglet et non le outils nœud.For example, to add a tool, right-click the tab, and not the Tools node. Pour ajouter un onglet, cliquez sur le éditeur nœud.To add a tab, right-click the Editor node.

Le icône Boîte à outils propriété de chaque outil fait référence à un fichier bitmap 16 x 16.The Toolbox Icon property of every tool references a 16x16 bitmap file. Ces fichiers sont généralement conservés dans le Dsl\Resources dossier.These files are usually kept in the Dsl\Resources folder.

Le classe propriété d’un outil d’élément fait référence à une classe concrète de domaine.The Class property of an element tool refers to a concrete domain class. Par défaut, l'outil crée les instances de cette classe.By default, the tool will create instances of this class. Cependant, vous pouvez écrire le code pour que l'outil crée des groupes d'éléments ou des éléments de différents types.However, you can write code to have the tool create groups of elements, or elements of different types.

Le connexion Générateur propriété d’un outil de connexion fait référence à un générateur de connexion, qui définit les types d’éléments de l’outil peut se connecter, et quelles sont les relations crée entre eux.The Connection Builder property of a connection tool refers to a connection builder, which defines what types of elements the tool can connect, and what relationships it creates between them. Les générateurs de connexions sont définis comme nœuds dans l'Explorateur DSL.Connection builders are defined as nodes in the DSL Explorer. Les générateurs de connexions sont créés automatiquement lorsque vous définissez les relations de domaine, mais vous pouvez écrire le code qui permet de les personnaliser.Connection builders are created automatically when you define domain relationships, but you can write code to customize them.

Pour ajouter un outil à la boîte à outilsTo add a tool to the toolbox

  1. Vous créez généralement un outil d'élément après avoir créé une classe de formes et l'avoir mappée sur une classe de domaines.You usually create an element tool after you have created a shape class and mapped it to a domain class.

    Vous créez généralement un outil de connecteur après avoir créé une classe de connecteurs et l'avoir mappée sur une relation de référence.You usually create a connector tool after you have created a connector class and mapped it to a reference relationship.

  2. Dans l’Explorateur DSL, développez le éditeur nœud et le onglets de boîte à outils nœud.In DSL Explorer, expand the Editor node and the Toolbox Tabs node.

    Cliquez sur un nœud d’onglet de boîte à outils, puis cliquez sur ajouter un nouvel outil d’élément ou ajouter un nouvel outil de connexion.Right-click a toolbox tab node, and then click Add New Element Tool or Add New Connection Tool.

  3. Définir le icône Boîte à outils propriété pour faire référence à une image bitmap 16 x 16.Set the Toolbox Icon property to refer to a 16x16 bitmap.

    Si vous souhaitez définir une nouvelle icône, créez un fichier bitmap dans l’Explorateur de solutions dans le Dsl\Resources dossier.If you want to define a new icon, create a bitmap file in Solution Explorer in the Dsl\Resources folder. Le fichier doit avoir des valeurs de propriété suivantes : Action de génération = contenu; Copier dans le répertoire de sortie = ne copiez pas.The file should have the following property values: Build Action = Content; Copy to Output Directory = Do not copy.

  4. Pour un outil d’élément : définir le classe propriété de l’outil pour faire référence à une classe concrète de domaine qui est mappée à une forme.For an element tool: Set the Class property of the tool to refer to a concrete domain class that is mapped to a shape.

    Pour un outil de connecteur : définir le connexion Générateur propriété de l’outil à un des éléments qui sont proposés dans la liste déroulante.For a connector tool: Set the Connection Builder property of the tool to one of the items that are offered in the drop-down list. Les générateurs de connexions sont automatiquement créés lorsque vous mappez un connecteur sur une relation de domaine.Connection builders are automatically created when you map a connector to a domain relationship. Si vous avez créé récemment un connecteur, vous devez normalement sélectionner le générateur de connexions associé.If you have recently created a connector, you would normally select the associated connection builder.

  5. Pour tester le DSL, appuyez sur F5 ou CTRL+F5, et dans l'instance expérimentale de Visual StudioVisual Studio, ouvrez un exemple de fichier modèle.To test the DSL, press F5 or CTRL+F5, and in the experimental instance of Visual StudioVisual Studio, open a sample model file. Le nouvel outil doit apparaître sur la boîte à outils.The new tool should appear on the toolbox. Faites-le glisser vers le diagramme pour vérifier qu'un nouvel élément a été créé.Drag it onto the diagram to verify that it creates a new element.

    Si l'outil n'apparaît pas, arrêtez l'instance expérimentale de Visual StudioVisual Studio.If the tool does not appear, stop the experimental Visual StudioVisual Studio. Dans les fenêtres Démarrer menu, exécutez réinitialiser l’Instance expérimentale de Microsoft Visual Studio 2010.In the Windows Start menu, run Reset the Microsoft Visual Studio 2010 Experimental Instance. Sur le Visual StudioVisual Studio générer menu, cliquez sur régénérer la Solution.On the Visual StudioVisual StudioBuild menu, click Rebuild Solution. Puis, testez à nouveau le DSL.Then test the DSL again.

Personnalisation des outils de l’élémentCustomizing Element Tools

Par défaut, l'outil crée une seule instance de la classe spécifiée, mais vous pouvez modifier ce comportement de deux façons :By default, the tool will create a single instance of the specified class, but you can vary this in two ways:

  • Définissez Directives de fusion d'éléments sur d'autres classes, en leur permettant d'accepter de nouvelles instances de cette classe et de créer des liens supplémentaires lorsque le nouvel élément est créé.Define Element Merge Directives on other classes, enabling them to accept new instances of this class, and enabling them to create additional links when the new element is created. Par exemple, vous pouvez autoriser l'utilisateur à déposer un Commentaire sur un autre élément et à créer ainsi un lien de référence entre les deux éléments.For example, you could allow the user to drop a Comment onto another element, and thereby create a reference link between the two.

    Ces personnalisations affectent aussi ce qui se passe quand l'utilisateur colle ou fait glisser un élément.These customizations also affect what happens when the user pastes or drags and drops an element.

    Pour plus d’informations, consultez personnalisation de création d’éléments et le déplacement des.For more information, see Customizing Element Creation and Movement.

  • Écrivez le code pour personnaliser l'outil de telle sorte qu'il puisse créer des groupes d'éléments.Write code to customize the tool so that it can create groups of elements. L'outil est initialisé par des méthodes de ToolboxHelper.cs que vous pouvez remplacer.The tool is initialized by methods in ToolboxHelper.cs that you can override. Pour plus d’informations, consultez création de groupes d’éléments à partir d’un outil.For more information, see Creating Groups of Elements from a Tool.

Création de groupes d’éléments à partir d’un outilCreating Groups of Elements from a Tool

Chaque outil d'élément contient un prototype des éléments qu'il doit créer.Each element tool contains a prototype of the elements that it should create. Par défaut, chaque outil d'élément crée un seul élément, mais il est également possible de créer un groupe d'objets liés avec un seul outil.By default, each element tool creates a single element, but it is also possible to create a group of related objects with one tool. Pour ce faire, vous initialisez l'outil avec un ElementGroupPrototype qui contient les éléments liés.To do this, you initialize the tool with an ElementGroupPrototype that contains the related items.

L'exemple suivant est extrait d'un DSL dans lequel se trouve un type Transistor.The following example is taken from a DSL in which there is a type Transistor. Chaque Transistor possède trois Terminaux nommés.Each Transistor has three named Terminals. L'outil d'élément pour Transistors stocke un prototype contenant quatre éléments de modèle et trois liens de relation.The element tool for Transistors stores a prototype containing four model elements and three relationship links. Lorsque l'utilisateur déplace l'outil sur le diagramme, le prototype est instancié et lié à la racine du modèle.When the user drags the tool onto the diagram, the prototype is instantiated and linked to the model root.

Ce code substitue une méthode qui est définie dans Dsl\GeneratedCode\ToolboxHelper.cs.This code overrides a method that is defined in Dsl\GeneratedCode\ToolboxHelper.cs.

Pour plus d’informations sur la personnalisation du modèle à l’aide du code de programme, consultez navigation et la mise à jour d’un modèle de Code de programme.For more information about customizing the model by using program code, see Navigating and Updating a Model in Program Code.

using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.Diagrams;

  public partial class CircuitsToolboxHelper
  {
    /// <summary>
    /// Toolbox initialization, called for each element tool on the toolbox.
    /// This version deals with each Component subtype separately.
    /// </summary>
    /// <param name="store"></param>
    /// <param name="domainClassId">Identifies the domain class this tool should instantiate.</param>
    /// <returns>prototype of the object or group of objects to be created by tool</returns>
    protected override ElementGroupPrototype CreateElementToolPrototype(Store store, Guid domainClassId)
    {
        if (domainClassId == Transistor.DomainClassId)
        {
            Transistor transistor = new Transistor(store);

            transistor.Base = new ComponentTerminal(store);
            transistor.Collector = new ComponentTerminal(store);
            transistor.Emitter = new ComponentTerminal(store);

            transistor.Base.Name = "base";
            transistor.Collector.Name = "collector";
            transistor.Emitter.Name = "emitter";

            // Create an ElementGroup for the Toolbox.
            ElementGroup elementGroup = new ElementGroup(store.DefaultPartition);
            elementGroup.AddGraph(transistor, true);
            // AddGraph includes the embedded parts

            return elementGroup.CreatePrototype();
        }
        else
        {
            return base.CreateElementToolPrototype(store, domainClassId);
}  }    }

Personnalisation des outils de connexionCustomizing Connection Tools

Généralement, vous créez un outil d'élément lorsque vous créez une classe de connecteurs.Usually, you create an element tool when you create a new connector class. Une autre solution consiste à surcharger un outil en autorisant les types des deux extrémités à déterminer le type de la relation.Alternatively, you can overload one tool by allowing the types of the two ends to determine the type of the relationship. Par exemple, vous pouvez définir un outil de connexion capable de créer à la fois des relations de type Personne-Personne et des relations de type Personne-Ville.For example, you could define one connection tool that could create both Person-Person relationships and Person-Town relationships.

Les outils de connexion invoquent les générateurs de connexions.Connection tools invoke connection builders. Utilisez les générateurs de connexions pour spécifier de quelle façon les utilisateurs peuvent lier les éléments dans le concepteur généré.Use connection builders to specify how users can link elements in the generated designer. Les générateurs de connexions spécifient les éléments qui peuvent être liés et le type de lien créé entre eux.Connection builders specify the elements that can be linked and the kind of link that is created between them.

Lorsque vous créez une relation de référence entre classes de domaine, un générateur de connexions est automatiquement créé.When you create a reference relationship between domain classes, a connection builder is automatically created. Vous pouvez utiliser ce générateur de connexions lors du mappage d'un outil de connexion.You can use this connection builder when you map a connection tool. Pour plus d’informations sur la façon de créer des outils de connexion, consultez configuration de la boîte à outils.For more information about how to create connection tools, see Configuring the Toolbox.

Vous pouvez modifier le générateur de connexions par défaut de telle sorte qu'il puisse traiter un éventail différent de types source et cible, et créer différents types de relation.You can modify the default connection builder so that it can deal with a different range of source and target types, and create different types of relationship.

Vous pouvez aussi écrire le code personnalisé des générateurs de connexions pour spécifier les classes source et cible de la collection, définir le type de connexion à établir et déclencher d'autres actions associées à la création d'une connexion.You also can write custom code for connection builders to specify the source and target classes for the connection, define the type of connection to be made, and take other actions associated with the creation of a connection.

Structure des générateurs de connexionsThe Structure of Connection Builders

Les générateurs de connexions contiennent une ou plusieurs directives de connexion de liens, qui spécifient la relation de domaine et les éléments source et cible.Connection builders contain one or more link connect directives, which specify the domain relationship and the source and target elements. Par exemple, dans le modèle de solution de flux de tâches, vous pouvez voir les CommentReferencesSubjectsBuilder dans les Explorateur DSL.For example, in the Task Flow solution template, you can see the CommentReferencesSubjectsBuilder in the DSL Explorer. Le Générateur de connexion contient un seul lien se connecter à la directive nommée CommentReferencesSubjects, qui est mappée à la relation de domaine CommentReferencesSubjects.This connection builder contains one link connect directive named CommentReferencesSubjects, which is mapped to the domain relationship CommentReferencesSubjects. Cette directive de connexion de liens contient une directive de rôle source qui pointe vers la classe de domaine Comment et une directive de rôle cible qui pointe vers la classe de domaine FlowElement.This link connect directive contains a source role directive that points to the Comment domain class, and a target role directive that points to the FlowElement domain class.

Utilisation de générateurs de connexion pour limiter les rôles source et cibleUsing Connection Builders to Restrict Source and Target Roles

Vous pouvez utiliser les générateurs de connexion pour restreindre l'occurrence de certaines classes dans le rôle source ou le rôle cible d'une relation de domaine donnée.You can use connection builders to restrict the occurrence of certain classes in either the source role or the target role of a given domain relationship. Par exemple, il se peut que vous ayez une classe de domaine de base avec une relation de domaine vers une autre classe de domaine, mais que vous ne vouliez pas que toutes les classes dérivées de la classe de base aient les mêmes rôles dans cette relation.For example, you may have a base domain class that has a domain relationship to another domain class, but you may not want all derived classes of the base class to have the same roles in that relationship. Dans la solution de flux de tâches, il existe quatre classes concrètes domaine (StartPoint, point de terminaison, MergeBranch, et synchronisation) qui hérite directement de la classe abstraite domaine élément FlowElement, et deux concret des classes de domaine (tâche et ObjectInState) qui hériter indirectement.In the Task Flow solution, there are four concrete domain classes (StartPoint, EndPoint, MergeBranch, and Synchronization) that inherit directly from the abstract domain class FlowElement, and two concrete domain classes (Task and ObjectInState) that inherit indirectly from it. Il existe également un flux relation prend de référence élément FlowElement classes de domaine dans son rôle source et le rôle cible.There is also a Flow reference relationship that takes FlowElement domain classes in both its source role and target role. Toutefois, une instance d’un point de terminaison classe de domaine ne doit pas être la source d’une instance d’un flux relation, ni doit une instance d’un StartPoint classe être le cible d’une instance d’un flux relation.However, an instance of an EndPoint domain class should not be the source of an instance of a Flow relationship, nor should an instance of a StartPoint class be the target of an instance of a Flow relationship. Le FlowBuilder Générateur de connexion a un lien se connecter à la directive nommée flux qui spécifie quelles classes de domaine peuvent jouer le rôle de source (tâche, MergeBranch, StartPoint, et synchronisation) et qui peuvent jouer le rôle de cible (MergeBranch, Point de terminaison, et synchronisation).The FlowBuilder connection builder has a link connect directive named Flow that specifies which domain classes can play the source role (Task, MergeBranch, StartPoint, and Synchronization) and which can play the target role(MergeBranch, Endpoint, and Synchronization).

Vous pouvez ajouter plusieurs directives de connexion de liens à un générateur de connexions.You can add more than one link connect directive to a connection builder. Vous pouvez masquer une partie de la complexité du modèle de domaine à partir d’utilisateurs et de conserver le boîte à outils de surcharger trop.This can help you hide some of the complexities of the domain model from users and keep the Toolbox from getting too cluttered. Vous pouvez ajouter les directives de connexion de liens de différentes relations de domaine à un seul générateur de connexions.You can add link connect directives for several different domain relationships to a single connection builder. Cependant, vous devez regrouper les relations de domaine quand elles exécutent à peu près la même fonction.However, you should combine domain relationships when they perform approximately the same function.

Dans la solution de flux de tâches, le flux outil de connexion est utilisé pour dessiner les instances des deux le flux et le transition des relations de domaine.In the Task Flow solution, the Flow connection tool is used to draw instances of both the Flow and the ObjectFlow domain relationships. Le FlowBuilder possède de générateur de connexion, en plus de la flux lien se connecter à la directive décrite précédemment, deux lien se connecter directives nommés transition.The FlowBuilder connection builder has, in addition to the Flow link connect directive described earlier, two link connect directives named ObjectFlow. Ces directives spécifient qu’une instance d’un transition relation peut-être être établie entre des instances de la ObjectInState classe de domaine, ou à partir d’une instance d’un ObjectInState à une instance d’un tâche, mais pas entre deux instances d’un tâche, ou à partir d’une instance d’un tâche à une instance d’un ObjectInState.These directives specify that an instance of an ObjectFlow relationship may be drawn between instances of the ObjectInState domain class, or from an instance of an ObjectInState to an instance of a Task, but not between two instances of a Task, or from an instance of a Task to an instance of an ObjectInState. Toutefois, une instance d’un flux relation peut être établie entre deux instances d’un tâche.However, an instance of a Flow relationship may be drawn between two instances of a Task. Si vous compilez et exécutez la solution de flux de tâches, vous pouvez voir ce dessin un flux à partir d’une instance d’une ObjectInState à une instance d’un tâche crée une instance d’une Transition, mais dessin un flux entre deux instances d’un tâche crée une instance d’un flux.If you compile and run the Task Flow solution, you can see that drawing a Flow from an instance of an ObjectInState to an instance of a Task creates an instance of an ObjectFlow, but drawing a Flow between two instances of a Task creates an instance of a Flow.

Code personnalisé pour générateurs de connexionsCustom Code for Connection Builders

Les quatre cases à cocher de l'interface utilisateur définissent différents types de personnalisation de générateurs de connexions :There are four checkboxes in the user interface that define different types of customization of connection builders:

  • le personnalisé accepter case à cocher dans une directive de rôle source ou ciblethe Custom accept check box on a source or target role directive

  • le de connexion personnalisées case à cocher dans une directive de rôle source ou ciblethe Custom connect check box on a source or target role directive

  • le utilise une connexion personnalisée case à cocher dans une directive de se connecterthe Uses custom connect check box on a connect directive

  • le personnalisé d’est propriété du Générateur de connexionthe Is Custom property of the connection builder

    Vous devez écrire un certain code de programme pour procéder à ces personnalisations.You have to provide some program code to make these customizations. Pour savoir quel code vous devez fournir, cochez l'une de ces cases, cliquez sur Transformer tous les modèles, puis générez votre solution.To discover what code you must supply, check one of these boxes, click Transform All Templates, and then build your solution. Il en résultera un rapport d'erreurs.An error report will result. Double-cliquez sur le rapport d'erreurs pour afficher un commentaire expliquant quel code vous devez ajouter.Double-click the error report to see a comment that explains what code you should add.

Note

Pour ajouter un code personnalisé, créez une définition de classe partielle dans un fichier de code distinct des fichiers de code des dossiers GeneratedCode.To add custom code, create a partial class definition in a code file separate from the code files in the GeneratedCode folders. Pour éviter de perdre votre travail, vous ne devez pas modifier les fichiers de code générés.To avoid losing your work, you should not edit the generated code files. Pour plus d’informations, consultez substituer et étendre les Classes générées.For more information, see Overriding and Extending the Generated Classes.

Création du code de connexion personnaliséCreating Custom Connection code

Dans chaque lien de connexion directive, le de Source de directives de rôle onglet définit à partir de les types que vous pouvez faire glisser.In each link connect directive, the Source role directives tab defines from what types you can drag. De même, la cibler des directives de rôle onglet définit pour les types que vous pouvez faire glisser.Similarly, the Target role directives tab defines to what types you can drag. Pour chaque type, vous pouvez plus spécifier s’il faut autoriser la connexion (pour la connexion à ce lien, la directive) en définissant le personnalisé accepter indicateur et puis en fournissant le code supplémentaire.For each type, you can further specify whether to allow the connection (for that link connect directive) by setting the Custom Accept flag and then supplying the extra code.

Vous pouvez également personnaliser ce qui se produit quand la connexion est établie.You can also customize what occurs when the connection is made. Par exemple, vous pouvez personnaliser uniquement le cas où le déplacement se produit vers ou depuis une classe particulière, tous les cas commandés par une directive de connexion de liens ou la totalité du générateur de connexions FlowBuilder.For example, you can customize just the case where the drag occurs to or from a particular class, all the cases that one link connect directive governs, or the whole FlowBuilder connection builder. Pour chacune de ces options, vous pouvez définir des indicateurs personnalisés au niveau approprié.For each of these options, you can set custom flags at the appropriate level. Lorsque vous transformez tous les modèles et essayez de générer la solution, les messages d'erreur vous dirigent vers les commentaires qui se trouvent dans le code généré.When you transform all templates and try to build the solution, error messages direct you to comments that are in the generated code. Ces commentaires identifient ce que vous devez fournir.These comments identify what you must supply.

Dans l'exemple Diagramme de composants, le générateur de connexions de la relation de domaine Connexion est personnalisé pour limiter les connexions qui peuvent être établies entre les ports.In the Components Diagram sample, the connection builder for the Connection domain relationship is customized to restrict the connections that can be made between ports. L'illustration suivante montre que vous ne pouvez établir des connexions qu'à partir des éléments OutPort vers les éléments InPort, mais que vous pouvez imbriquer des composants les uns à l'intérieur des autres.The following illustration shows that you can make connections only from OutPort elements to InPort elements, but you can nest components inside each other.

Connexion arrivant à un OutPort à partir d’un composant imbriquéConnection Coming in to an OutPort from a Nested Component

Générateur de connexions

Par conséquent, il se peut que vous vouliez spécifier qu'une connexion puisse aller d'un composant imbriqué vers un OutPort.Therefore, you might want to specify that a connection can come from a nested component to an OutPort. Pour spécifier une telle connexion, vous définissez accepter de personnalisé utilise sur la InPort type en tant que rôle source et le OutPort type en tant que rôle de cible dans le détails DSL fenêtre, comme indiqué dans les illustrations suivantes :To specify such a connection, you set Uses Custom Accept on the InPort type as source role and the OutPort type as target role in the DSL Details window as shown in the following illustrations:

Lien de se connecter à la Directive dans l’Explorateur de DSLLink Connect Directive in DSL Explorer

Image du générateur de connexions

Lien de se connecter à la Directive dans la fenêtre des détails DSLLink Connect Directive in DSL Details Window

Vous devez ensuite fournir les méthodes de la classe ConnectionBuilder :You must then provide methods in the ConnectionBuilder class:

  public partial class ConnectionBuilder
  {
    /// <summary>
    /// OK if this component has children
    /// </summary>
    private static bool CanAcceptInPortAsSource(InPort candidate)
    {
       return candidate.Component.Children.Count > 0;
    }

    /// <summary>
    /// Only if source is on parent of target.
    /// </summary>
    private static bool CanAcceptInPortAndInPortAsSourceAndTarget                (InPort sourceInPort, InPort targetInPort)
    {
      return sourceInPort.Component == targetInPort.Component.Parent;
    }
// And similar for OutPorts...

Pour plus d’informations sur la personnalisation du modèle à l’aide du code de programme, consultez navigation et la mise à jour d’un modèle de Code de programme.For more information about customizing the model by using program code, see Navigating and Updating a Model in Program Code.

Vous pouvez utiliser un code similaire pour empêcher, par exemple, les utilisateurs de créer des boucles avec des liens parent-enfant.You can use similar code, for example, to prevent users from creating loops with parent-child links. Ces restrictions sont considérées comme des contraintes 'durs', car les utilisateurs ne peut pas violer les à tout moment.These restrictions are considered 'hard' constraints because users cannot violate them at any time. Vous pouvez également créer des contrôles de validation de 'l’option soft' utilisateurs pouvant contourner temporairement en créant des configurations non valides qu’ils ne peuvent pas enregistrer.You can also create 'soft' validation checks that users can bypass temporarily by creating invalid configurations that they cannot save.

Meilleure pratique de définition des générateurs de connexionsGood Practice in Defining Connection Builders

Vous devez définir un générateur de connexions pour créer différents types de relation uniquement s'ils sont conceptuellement associés.You should define one connection builder to create different types of relationships only if they are conceptually related. Dans l'exemple du flux de tâches, vous utilisez le même générateur pour créer des flux entre les tâches, ainsi qu'entre les tâches et les objets.In the task flow sample, you use the same builder to create flows between tasks and also between tasks and objects. Cependant, l'utilisation du même générateur pour créer des relations entre commentaires et tâches serait source de confusion.However, it would be confusing to use the same builder to create relationships between comments and tasks.

Si vous définissez un générateur de connexions pour plusieurs types de relation, vous devez vous assurer qu'il ne puisse pas correspondre à plus d'un type de la même paire d'objets source et cible.If you define a connection builder for multiple types of relationships, you should ensure that it cannot match more than one type from the same pair of source and target objects. Sinon, les résultats seront imprévisibles.Otherwise, the results will be unpredictable.

Code personnalisé vous permet d’appliquer des contraintes « durs », mais vous devez envisager si les utilisateurs doivent pouvoir modifier temporairement les connexions non valides.You use custom code to apply 'hard' constraints, but you should consider whether users should be able to temporarily make invalid connections. S'ils le peuvent, vous pouvez modifier les contraintes de telle sorte que les connexions ne soient pas validées tant que les utilisateurs n'ont pas enregistré les modifications.If they should, you can modify the constraints so that connections are not validated until users try to save changes.

Voir aussiSee Also