Développer du code pour créer une extension d’une infrastructure

Effectué

Lorsque vous êtes amené à modifier le comportement d’un élément, vous devez créer une extension de cet élément. Certains éléments nécessitent le développement de code pour modifier le comportement, comme l’ajout d’un gestionnaire d’événements. Dans d’autres cas, l’extension de classe permet de modifier la composition d’un élément.

Extensions de classe

Pour développer les règles métier liées à une table, vous devez créer une classe d’extension. Si vous souhaitez ajouter un autre champ d’identification à la table et le renseigner, vous devez créer un gestionnaire d’événements de données pour l’événement Inserting, puis implémenter la règle qui permet de renseigner le nouveau champ dans ce gestionnaire d’événements. Vous pouvez créer une classe qui permet d’améliorer la table et d’accéder aux champs et méthodes de cette table de manière simple. Lorsque vous créez une extension de classe, vous devez y ajouter l’attribut ExtensionOf, utiliser le suffixe _Extension et indiquer la classe comme étant final.

Voici un exemple de création de classe qui permet de développer l’extension InventTable. Des méthodes peuvent ensuite être ajoutées à cette classe étendue où le commentaire est utilisé.

[ExtensionOf(tableStr(InventTable))]
final class InventTableNew_Extension
{
 	public void newDefaultInventLocationId()
	 {
	 //enter your code here
	 }
}

Gestionnaires d’événements

Un gestionnaire d’événements sert à écrire ou copier du code dans un élément qui est exécuté lorsqu’un événement donné se produit, par exemple lorsqu’un champ est modifié ou qu’un enregistrement est supprimé. Certains éléments, comme les tableaux et les formulaires, contiennent un nœud Événements dans la fenêtre du concepteur qui, une fois développée, répertorie tous les événements associés à cet élément. Si vous êtes amené à ajouter un comportement supplémentaire qui n’existe pas actuellement dans un élément, vous devez créer une extension de cet élément, puis ajouter un gestionnaire d’événements à l’élément étendu.

Les méthodes suivantes sont utilisées pour les gestionnaires d’événements extraits de la table CustTable. Pour copier et ajouter ces méthodes à votre classe ou élément étendu, cliquez avec le bouton droit sur l’événement dans la fenêtre du concepteur de l’élément et sélectionnez Copiez la méthode du gestionnaire d’événements.

Capture d’écran de Visual Studio montrant comment copier la méthode du gestionnaire d’événements dans la fenêtre du concepteur de table.

  • Événement OnDeleted : il s’agit d’un gestionnaire post-événement qui est déclenché lorsqu’un enregistrement est supprimé d’une table. Vous pouvez l’utiliser, par exemple, pour afficher un message d’informations lorsqu’un enregistrement est supprimé.
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::Deleted)]
public static void CustTable_onDeleted(Common sender, DataEventArgs e)
{
}
  • Événement OnInserting : il est déclenché lorsque des données sont insérées. Par exemple, il peut être déclenché lorsque vous ajoutez un nouveau client dans les applications de finances et d’opérations.
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::Inserting)]
public static void CustTable_onInserting(Common sender, DataEventArgs e)
{
}
  • Événement OnValidatedWrite : il s’agit d’un gestionnaire post-événement qui est déclenché après une saisie de données. Il sert à valider les données qui sont écrites sur une page, par exemple pour s’assurer qu’un client est majeur en vérifiant sa date de naissance.
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::ValidatedWrite)]
public static void CustTable_onValidatedWrite(Common sender, DataEventArgs e)
{
}

Chaîne de commandes

Vous pouvez encapsuler les méthodes définies dans la classe de base que vous étendez. Vous pouvez également étendre les règles des méthodes publiques et protégées sans avoir à utiliser le gestionnaire d’événements.

Lors de l’encapsulation d’une méthode, vous pouvez accéder aux méthodes publiques et protégées, ainsi qu’aux variables de la classe de base. Si vous appliquez un wrapper à une méthode, le mot-clé next crée une chaîne de commandes.

La chaîne de commandes est un modèle de conception dans lequel une demande est traitée par une série de récepteurs. Une classe d’extension est utilisée pour encapsuler des méthodes protégées ou publiques de classes, tables, entités de données et formulaires. Vous devez savoir que certaines restrictions s’appliquent dans le cadre de l’encapsulation des méthodes :

  • La méthode wrapper doit avoir la même signature que la méthode de base.
  • Lorsque vous étendez des classes de formulaires, seules les méthodes de niveau racine peuvent être encapsulées, pas les méthodes définies dans les classes imbriquées.

Les méthodes wrapper d’une classe d’extension doivent toujours appeler le mot-clé next pour que la méthode next de la chaîne et, enfin, l’implémentation d’origine soient toujours appelées. Ce processus garantit que chaque méthode de la chaîne est prise en compte dans le résultat. La méthode doit appeler next() sans aucune condition.