15
Avr 20

SAS No Code


Le langage SAS est la principale force de ce progiciel. En effet, orienté gestion de données et comprenant de nombreuses fonctionnalités, il permet de résoudre la majorité des cas. Cependant, sa maitrise est complexe; et beaucoup d'utilisateurs ne souhaitent pas investir du temps à apprendre un langage de programmation et s'oriente vers des outils plus visuels comme Alteryx par exemple.

SAS Enterprise Guide permet d'accèder à des fonctionnalités du langage SAS sans avoir à coder. Cependant il n'offre qu'un interface au "PROC" et non aux étapes DATA.

SAS met à un disposition un template c# et vb pour créer de nouvelles interface. Nous allons voir un exemple en c#.

Création d'une nouvelle interface dans SAS Enterprise Guide

De quoi avons nous besoin pour construire une nouvelle interface ?
- D'installer Microsoft Visual Studio Community,
- Du template c# téléchargeable sur le site de SAS ici

La documentation est accessible ici.

Il faut ensuite copier le template dans le dossier <spécifique à votre installation>\Visual Studio 2019\Templates\ProjectTemplates\SAS Custom Tasks sans le dézipper.

Création d'un projet de nouvelle interface dans Microsoft Visual Studio Community

Lancer Microsoft Visual Studio Community puis choisir Créer un projet :

Taper SAS dans la barre de recherche puis choisir "SAS C# Custom Task, v4.3" et faire suivant. Cette version est compatible avec les versions suivantes de SEG (8.2 comprise).

Saisir le nom, la localisation du projet puis faire Créer.

Composition d'un projet SAS C# Custom Task, v4.3

Sur la droite, nous voyons l'arborescence du projet:

Voici une description des différents fichier:
- <Nom projet>Task.cs : contient les propriétés globales du projet tel que son nom, sa catégorie, le nombre de tables en sorties, leurs noms, ...
- <Nom projet>TaskForm.cs : contient les méthodes gérant les événements liés aux composants visuels contenus dans le projet
- <Nom projet>TaskForm.Designer.cs : contient la définition des composants visuels.
- <Nom projet>TaskSettings.cs : c'est ici que l'on définie les variables qui vont être enregistrer les intéractions de l'utilisateur et définir le code à exécuter.

Exemple pas à pas

Mettre à jour les références du projet

Sélectionner le plus haut niveau dans l'explorateur de solutions puis cliquer sur l'icône en forme de clé.

Dans la partie Chemin d'accès des références, renseigner le chemin vers les dll de SAS Enterprise Guide. N'oubliez pas de cliquer sur "Ajouter un dossier".

Dans la partie Application, choisir la version du framework en correlation avec votre version de SAS Enterprise Guide.

Dans la partie Déboguer, sélectionner le chemin vers l'exécutable de SAS Enterprise Guide.


Modification du fichier <Nom projet>Task.cs

Le premier fichier à modifier est la classe c# principale de la solution. Faire un clique droit puis afficher le code.

La partie avant la définition de la classe c# permet de définir si votre tâche nécessite une table en entrée, un fichier, un cube, une infomap ou n'a pas de prérequis.
Remplacer la partie [InputRequired(InputResourceType.Data)] par le prérequis voulu.

Ensuite dans la méthode InitializeComponent() saisir les informations générales de votre tâche.

Enfin, il faut surcharge la méthode OutputDataDescriptorList qui permet de définir les noms des tables en sortie. Sans ceci, SEG n'affichera pas les tables dans le flux de processus.
Dans l'exemple ci-contre, la propriété DataOut contient le nom de la table en sortie.



Modification du fichier <Nom projet>TaskSettings.cs

Nous allons ici définir les propriétés qui vont enregistrer les choix de l'utilisateur dans les composants visuels et définir le code à exécuter.
Ces valeurs passent des écrans vers le code à l'aide de fichier XML que SEG va exploiter.

Tout d'abords, il faut déclarer les propriétés.
Par exemple ici, nous déclarons une variable qui va enregistrer le nom de la table en sortie saisi par l'utilisateur ainsi que le nom d'une nouvelle colonne qui va contenir la somme cumulée.

Ensuite, il faut initier ces propriétés.

La prochaine étape consiste à modifier la méthode ToXML() qui permet d'enregistrer les valeurs des propriétés dans un fichier XML.

Puis modifier la méthode FromXml(string xml) qui permet d'initialiser les valeurs des propriétés depuis le fichier XML enregistré avec la méthode ToXML().

La dernière étape consiste à modifier la méthode GetSasProgram qui va générer le code qui va être exécuté par SEG. A ce moment, le code n'est pas exécuté; il sera lorsque la tâche sera soumise.


Modification du fichier <Nom projet>TaskForm.Designer.cs

Cette classe permet de définir les composants visuels de la tâche, leurs propriétés, leurs emplacements, les événements,...

Tout d'abord, il faut déclarer les composants visuels.

Ensuite, dans la méthode InitializeComponent(), il faut initialiser les composants.

Dans cette même méthode, il faut pour chacun des composants définir leurs propriétés.
Dans l'exemple ci-contre, on définie entres-autres:
- la position (Location),
- la taille (Size),
- l'évenement lorsque l'on modifie le composant visuel, une zone de texte (TextChanged).

Enfin il faut rajouter les composants dans le contrôleur en faisant this.Controls.Add(this.<composant>);.
On définie également ici la taille du composant ainsi que le titre.

A ce stade, on ne peut pas voir le résultat car il faut définir auparavant les événements.


Modification du fichier <Nom projet>TaskForm.cs

Modifier la méthode OnLoad. Celle-ci permet d'initialiser les valeurs des écrans à l'aide des XML. Cette méthode est appelée lorsque l'on ouvre la tâche. C'est à dire que lorsque l'on exécute le flux de processus sans ouvrir la tâche, cette méthode n'est pas appelée.

Ensuite modifier la méthode OnClosing. Celle-ci permet de passer les valeurs depuis les écrans vers les propriétés de la classe principale (Settings).

Enfin définir les éventuels événements des composants.

A ce moment là, il est possible de voir le résultat. Il est possible d'ajuster les composants en mode cliquer-glisser.

Vous pouvez maintenant générer la solution qui prendra la forme d'une dll. Celle-ci pourra être importer dans SEG dans le gestionnaire des add-in dans Outils.
Une fois déclaré dans SEG, vous pouvez exécuter la solution depuis Microsoft Visual Studio.

Nous venons de voir les grands principes de création d'une nouvelle tâche.