Ne perdez plus votre code source : L'astuce SAS pour automatiser l'audit de vos Stored Processes

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Confirmé
Publié le :
Stéphanie

Le Conseil de l'Expert

Stéphanie
Spécialiste Machine Learning et IA.

L'extraction programmatique du code source via les métadonnées est une technique indispensable pour l'audit massif ou la migration de serveurs SAS 9. Contrairement à une ouverture manuelle dans SAS Management Console, l'utilisation de l'objet ClassifierMap combinée à l'attribut StoredText permet de scanner l'intégralité de votre référentiel en une seule étape DATA. Cette approche est particulièrement puissante pour effectuer des opérations de "rechercher-remplacer" (via TRANWRD) sur des centaines de programmes simultanément, par exemple pour mettre à jour des chemins de bibliothèques ou des noms de serveurs avant une bascule d'environnement.

Attention : Ce code nécessite des droits administrateur.
Ce programme utilise les fonctions d'interface de métadonnées SAS© (OMF) pour rechercher tous les objets Stored Process (ClassifierMap) contenant une note 'SourceCode'. Il récupère le texte du code source et l'écrit dans le journal SAS©. Le script inclut également une logique commentée pour effectuer des opérations de rechercher-remplacer sur le code source et mettre à jour les métadonnées. Note : Ce code est spécifique aux environnements disposant d'un serveur de métadonnées SAS© 9 (compatibilité legacy).
Analyse des données

Type : CREATION_INTERNE


Les données proviennent directement des fonctions d'interrogation du serveur de métadonnées SAS (metadata_resolve, etc.). Aucune table externe n'est requise.

1 Bloc de code
DATA STEP
Explication :
Étape DATA _NULL_ qui interagit avec le serveur de métadonnées. Elle définit une requête 'omsobj' pour trouver les Stored Processes, itère sur les résultats, extrait les notes associées, identifie celle nommée 'SourceCode', et récupère l'attribut 'StoredText' (le code). Le résultat est affiché dans la log.
Copié !
1DATA _null_;
2 
3/* Initialize the variables. */
4 
5 LENGTH program newprog $ 32587 type id $ 50 sp_uri $ 38 note_uri $ 34 note_name $ 255;
6 call missing(of _character_);
7 
8/* Define a query that will return only Stored Process objects with an associated source code TextStore object. */
9
10 sp_obj="omsobj:ClassifierMap?ClassifierMap[ @PublicType='StoredProcess'][Notes/TextStore[ @Name='SourceCode']]";
11
12/* Count how many objects meet that query. */
13
14 sp_count=metadata_resolve(sp_obj,type,id);
15
16/* If some exist, gather their information. */
17 
18 IF sp_count > 0 THEN DO i=1 to sp_count;
19
20/* Get the URI for each Stored Process object found that matches the query. */
21
22 rc=metadata_getnobj(sp_obj,i,sp_uri);
23
24/* Count how many notes are associated with the object. */
25
26 note_count=metadata_getnasn(sp_uri,"Notes",1,note_uri);
27
28/* If some exist, get their attributes. */
29
30 IF note_count > 0 THEN DO j=1 to note_count;
31 
32
33 rc=metadata_getnasn(sp_uri,"Notes",j,note_uri); /* get the URI of the note. */
34 rc=metadata_getattr(note_uri,"Name",note_name); /* get the name of the note. */
35
36/* If the Note's name is "SourceCode", get it's "StoredText" attribute. */
37 
38 IF note_name="SourceCode" THEN DO;
39 rc=metadata_getattr(note_uri,"StoredText",program);
40 put;
41 put note_uri=; /* Print the URI to the Log */
42 put;
43 put program=; /* Print the program to the log. */
44
45 /* Optional find and replace code. replace old_text and new_text with the word to replace. */
46 *newprog=tranwrd(program,'old_text','new_text');
47 *rc=metadata_setattr(note_uri,"StoredText",newprog);
48 END;
49 END;
50 END;
51RUN;
L'Astuce Pro
Pour manipuler des programmes volumineux depassant la limite standard des variables caracteres, utilisez l instruction de lecture par blocs avec la fonction METADATA_GETATTR sur l attribut StoredText, et veillez a verifier que l utilisateur executant le script possede les droits de lecture sur le dossier de metadonnées cible pour eviter que la fonction METADATA_RESOLVE ne renvoie un compteur a zero sans message d erreur explicite.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © 2023, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. SPDX-License-Identifier: Apache-2.0


Documentation liée

Aucune documentation spécifique pour cette catégorie.