Partager via


Bibliothèque de classes X++

Note

Les groupes d’intérêt communautaire sont maintenant passés de Yammer à Microsoft Viva Engage. Pour participer à une communauté Viva Engage et participer aux dernières discussions, renseignez le formulaire Demander l’accès à la communauté Finance et Operations Viva Engage , puis choisissez la communauté que vous souhaitez rejoindre.

Cet article décrit la bibliothèque de classes dans X++.

Il existe deux types de classes : les classes d’application et les classes système.

  • Classes d’application : ces classes sont implémentées dans X++. Ils sont disponibles dans le nœud Classes de code > dans l’Explorateur d’applications.
  • Classes système : ces classes sont parfois appelées classes de noyau. Ils sont répertoriés sous le nœud Classes de documentation > système dans l’Explorateur d’applications. Le code source de ces classes n’est pas disponible. Pour obtenir la liste des classes système, consultez l’API, la classe et la référence de table.

Structure classique d’une classe d’application

Les types de blocs de code suivants sont standard pour les classes d’application :

  • déclarations de classe et de variable : la déclaration de classe contient des modificateurs, tels que public, privé et étendu.
  • déclarations de variables : il s’agit des membres de champ pour les objets construits à partir de la classe. Lorsque vous tapez le mot clé sur une variable d’instance de classe, IntelliSense peut afficher une liste des membres.
  • nouvelle méthode : cette méthode crée une instance de la classe. Le constructeur peut être appelé uniquement à l’aide du nouveau mot clé. Les classes dérivées peuvent appeler la nouvelle méthode de leur constructeur en appelant la référence de super méthode. Pour plus d’informations, consultez héritage X++.
  • méthode finalise : cette méthode finalise une instance de la classe. Cette méthode est la méthode de destructeur. Toutefois, il s’agit d’un destructeur par convention uniquement. Le système n’appelle pas automatiquement la méthode finalise pendant le garbage collection.

Les méthodes supplémentaires pour une classe ont les types suivants :

  • Méthodes d’instance
  • Méthodes statiques
  • Méthodes principales

Les méthodes peuvent être créées sur de nombreux types d’éléments. Voici quelques exemples :

  • Cours
  • Maps
  • Points de vue
  • Ensembles de données
  • Formulaires
  • Queries

Substitution de classes d’application pour les classes système

Vous devez utiliser les classes d’application de remplacement au lieu des classes système qu’elles étendent.

Dans l’Explorateur d’applications, sous Classes de documentation > système, plusieurs classes de noyau ou système ont des noms commençant par un x minuscule. Ces classes sont appelées classes x-system. Par exemple, ces classes système sont xApplication et xVersionControl. Certaines de ces classes sont étendues par les classes d’application. Par exemple, la classe Application étend la classe système xApplication .

Les classes qui dérivent des classes x-system sont appelées classes d’application de substitution. Dans l’Explorateur d’applications, sous le nœud Classes , l’icône en regard des classes d’application de remplacement diffère de l’icône standard.

Classes x-system

Certaines classes d’application de substitution sont associées à une variable globale spéciale qui représente une instance de la classe. Par exemple, la variable appl fait référence à un objet pré-instancié de la classe Application . L’avantage de la variable appl est que le système gère l’objet dans toute l’étendue de votre session. Votre code serait moins efficace s’il a utilisé à plusieurs reprises la nouvelle syntaxe Application() pour obtenir une instance de la classe Application . Vous ne devez pas utiliser la classe système xApplication . Utilisez plutôt la classe d’application de remplacement d’application .

Vous pouvez référencer les membres statiques de la classe Application à l’aide de la syntaxe standard suivante : Application ::checkForNewBatchJobs(). Toutefois, pour référencer les membres d’instance de la classe Application , vous devez utiliser la variable appl de cette classe, le cas échéant. Ce modèle s’applique à la plupart des classes x-system. La classe d’application de substitution session est une exception, car il n’existe aucune variable globale spéciale pour session.

Le tableau suivant répertorie les classes x-system qui ont une classe d’application de remplacement correspondante. Les variables globales spéciales sont également affichées pour ces classes qui en ont une.

Classe d’application Classe x-system Variable globale
Args xArgs Sans objet
Application xApplication Appl
ClassFactory xClassFactory classFactory
Entreprise xCompany appl.company
Global xGlobal Sans objet
Informations xInfo Journal des informations
MenuFunction xMenuFunction Sans objet
Session xSession Sans objet
VersionControl xVersionControl versionControl

Exemple de classes x-system

L’exemple suivant montre la syntaxe permettant d’utiliser plusieurs variables spéciales qui référencent des instances des classes d’application de substitution.

TreeNode treeNode;
Args     args;
FormRun  formRun;

// appl variable
info(appl.buildNo());

// company variable
appl.company().reloadRights();

// infolog variable
treeNode = infolog.findNode("\\forms\\custTable");
info(treeNode.AOTgetProperty("Name"));
// Output is "CustTable".

// classFactory variable
args = new Args(formstr(Batch));
formRun = classFactory.formRunClass(args);
formRun.init();
formRun.run();
formRun.detach();
info("Method is ending. This is a message in the Infolog.");
// Output is "Method is ending. This is a message in the Infolog."

Classes de traitement par lots

Vous implémentez des classes à l’aide du système de traitement par lots et en étendant les classes RunBase et RunBaseBatch. Pour supprimer le bouton Périodicité de la boîte de dialogue Traitement par lots , vous utilisez la méthode Args ::p armEnum . Nous vous recommandons de désigner une classe à exécuter en tant que méthode batch liée au serveur. Les méthodes batch liées au serveur sont plus sécurisées que les méthodes batch qui ne sont pas liées au serveur pour les raisons suivantes :

  • La méthode est exécutée à l’aide des autorisations de l’utilisateur qui a envoyé la méthode.
  • La méthode peut utiliser uniquement des méthodes d’info et de classe globale spécifiques pour interagir avec le client qui le traite. Cette restriction limite l’interaction avec le client.

Permettre à une classe d’exécuter en tant que méthode batch liée au serveur

  1. Créez une classe qui étend la classe RunBaseBatch .

  2. Remplacez la méthode RunBaseBatch.runImpersonated pour retourner une valeur true, comme illustré dans l’exemple suivant.

    public boolean runsImpersonated()
    {
        return true;
    }
    
  3. Vérifiez que la classe appelle uniquement les méthodes Info et Global suivantes :

    • ajouter
    • Info.copy
    • Info.cut
    • Info.import
    • Info.export
    • Info.line
    • Info.num
    • Global ::error
    • Global ::info
    • Global ::warning

    Les méthodes Info.line et Info.num sont héritées de la classe xInfo .

Suppression du bouton Périodicité de la boîte de dialogue traitement par lots

Lorsque vous implémentez une classe à l’aide du système de traitement par lots, vous pouvez supprimer le bouton Périodicité en appelant la méthode Args.parmEnum et en passant la valeur d’énumération système NoYes ::Yes . L’énumération système NoYes détermine si le bouton Périodicité est supprimé de la boîte de dialogue. La valeur par défaut est NoYes ::No.

Dans l’exemple suivant, la classe InventTransferMultiShip est implémentée. La méthode BatchDialog ::main crée la boîte de dialogue traitement Batch .

static void noRecurrenceButton(Args _args)
{
    Args a;
    InventTransferMultiShip inventTransferMultiShip;
    a = new Args();
    inventTransferMultiShip = InventTransferMultiShip::construct();
    a.caller(inventTransferMultiShip);
    a.parmEnum(NoYes::Yes);
    BatchDialog::main(a);
}

Classes de manipulation d’images

Deux classes système vous permettent de manipuler des graphiques et des icônes : Image et Imagelist.

  • Image : cette classe vous permet de charger, d’enregistrer et de manipuler des images individuelles. Par exemple, vous pouvez capturer un écran et l’enregistrer en tant qu’image, rogner ou faire pivoter une image, ou manipuler la profondeur de couleur.
  • Imagelist : cette classe vous permet d’utiliser un ensemble d’images qui ont des propriétés communes, telles que la taille et la couleur de transparence. Vous pouvez afficher les listes d’images utilisées dans les classes d’application ImageListAppl .

Modèle objet de requête

Le modèle objet de requête contient des classes utilisées pour définir et exécuter une requête. Les objets de requête sont utilisés pour définir la source de données de requête, les champs retournés, les plages d’enregistrements et les relations avec les sources de données enfants. Les classes de requête sont plus visibles lorsque vous créez une requête dynamique dans le code, mais elles sont également utilisées en arrière-plan lorsque vous créez une requête statique dans l’Explorateur d’applications.

Le tableau suivant décrit les classes dans le modèle objet de requête.

Classe système Descriptif
QueryRun Cette classe exécute la requête et extrait les données.
Query Cette classe contient certaines propriétés et possède une ou plusieurs sources de données associées. Il s’agit du niveau supérieur de la définition de requête.
QueryBuildDataSource Cette classe définit l’accès à une source de données unique dans la requête. S’il existe plusieurs sources de données au même niveau dans une requête, des instructions SQL distinctes sont produites et exécutées de manière séquentielle. Si une source de données est un enfant d’une autre source de données, une jointure est créée entre les deux sources de données.
QueryBuildFieldList Cette classe définit les champs retournés par la base de données. Par défaut, la liste de champs est dynamique et tous les champs sont retournés à partir de la table de source de données, de la carte ou de la vue. Chaque source de données n’a qu’un seul objet QueryBuildFieldList . Cet objet contient des informations sur tous les champs sélectionnés. Vous pouvez spécifier des fonctions d’agrégation, telles que SUM, COUNT et AVG, sur l’objet de liste de champs.
QueryBuildRange Cette classe définit un sous-ensemble d’enregistrements retournés, en fonction d’un seul champ. Une plage est traduite en clause WHERE dans l’instruction SQL de requête. Si plusieurs champs sont utilisés pour limiter la requête (clause WHERE ), la source de données contient plusieurs plages.
QueryBuildDynalink Cette classe contient des informations sur une relation (limitation) à un enregistrement externe. Lorsque la requête est exécutée, ces informations sont converties en entrées supplémentaires dans la clause WHERE de l’instruction SQL de requête. Cette classe ne peut exister que sur la source de données parente d’une requête. Les formulaires utilisent la fonction lorsque deux sources de données sont synchronisées. La source de données enfant contiendra ensuite une ou plusieurs DLL à la source de données parente. La fonction est utilisée même si les deux sources de données sont placées sous deux formes différentes, mais sont toujours synchronisées.
QueryBuildLink Cette classe spécifie la relation entre les deux sources de données dans la jointure. Cette classe ne peut exister que sur une source de données enfant.

Vous pouvez également utiliser l’API SysDa pour interroger des données.

Vue d’ensemble des classes système

La source des classes système n’est pas disponible. Une classe système peut avoir les caractéristiques suivantes :

  • Méthodes statiques (ou méthodes de classe)
  • Méthodes dynamiques
  • Propriétés : ces propriétés sont des fonctions membres utilisées pour définir des propriétés. Par exemple , LeftMargin.

Vous ne pouvez pas remplacer les méthodes de classe système. Il n’est pas notre intention d’utiliser les classes système pour concevoir vos objets d’application à partir de zéro. Utilisez-les plutôt pour étendre ou modifier les fonctionnalités par défaut dans l’Explorateur d’applications. Par exemple, vous pouvez ajouter dynamiquement des informations supplémentaires à un rapport existant. Vous pouvez également modifier les options disponibles sur une page, en fonction de la sélection de l’utilisateur sur une page précédente.

Classes de relance

Les classes de collection vous permettent de créer des listes, des ensembles, des structs, des cartes et des tableaux.

Classes d’objets d’application

Ces classes système contiennent des fonctions qui sont activées chaque fois que vous utilisez l’Explorateur d’applications pour créer votre application. Par exemple, le système utilise la classe FormDesign lorsque vous définissez la disposition de votre formulaire dans le nœud Conceptions dans l’Explorateur d’applications. Ces classes vous permettent également de créer et de modifier des objets d’application.

Classes d’intégration

L’intégration à l’environnement est généralement implémentée par les classes. Voici quelques exemples des classes de cette catégorie :

  • COM : appel de méthodes sur des objets COM.
  • DLL : appel des fonctions DLL Microsoft Windows.
  • E/S : lire et écrire des fichiers externes.
  • ODBCConnection : interface ODBC (Open Database Connectivity) vers une base de données étrangère.