Publié le :
Administration CREATION_INTERNE

Obtenir les contextes de serveur SAS

En attente de validation
Attention : Ce code nécessite des droits administrateur.
Cette macro, `%mm_getservercontexts`, interroge les dépôts de métadonnées SAS© pour obtenir la liste des contextes de serveur. Elle commence par identifier tous les dépôts de métadonnées disponibles, puis itère sur chacun d'eux. Pour chaque dépôt, elle utilise `PROC METADATA` avec une requête spécifique pour extraire les objets de type `ServerContext`. Ces contextes sont ensuite transformés via un map XML et ajoutés à un jeu de données de sortie spécifié par l'utilisateur (`outds`). La macro gère également le retour à la configuration originale du dépôt de métadonnées après son exécution.
Analyse des données

Type : CREATION_INTERNE


Les données proviennent des dépôts de métadonnées SAS interrogeant les contextes de serveur. Un appel à la macro `%mm_getrepos` est effectué initialement, potentiellement pour lister les dépôts de métadonnées disponibles. La sortie est un jeu de données SAS créé par la macro.

1 Bloc de code
MACRO
Explication :
Définition de la macro `%mm_getservercontexts` avec un paramètre pour le jeu de données de sortie. Initialisation des variables locales et récupération du dépôt de métadonnées actuel. Appel de la macro `%mm_getrepos` pour lister les dépôts disponibles.
Copié !
1%macro mm_getservercontexts(
2 outds=work.mm_getrepos
3)/*/STORE SOURCE*/;
4%local repo repocnt x;
5%let repo=%sysfunc(getoption(metarepository));
6 
7/* first get list of available repos */
8%mm_getrepos(outds=work.repos)
2 Bloc de code
DATA STEP Data
Explication :
Crée les variables macro nécessaires et initialise le jeu de données de sortie `&outds` avec les champs requis. Prépare également les fichiers temporaires pour la gestion de la sortie XML.
Copié !
1%let repocnt=0;
2DATA _null_;
3 SET repos;
4 where repositorytype in('CUSTOM','FOUNDATION');
5 keep id name ;
6 call symputx(cats('repo',_n_),name,'l');
7 call symputx('repocnt',_n_,'l');
8RUN;
9filename __mc1 temp;
10filename __mc2 temp;
11DATA &outds;
12 LENGTH serveruri servername $200;
13 call missing (of _all_);
14 stop;
15RUN;
3 Bloc de code
MACRO / PROC METADATA Data
Explication :
Boucle sur chaque dépôt de métadonnées trouvé. Définit l'option `metarepository` pour le dépôt courant. Exécute `PROC METADATA` pour extraire les `ServerContext`. Génère un map XML pour structurer les données, utilise `LIBNAME XML` pour les lire, et `PROC APPEND` pour ajouter les résultats au jeu de données de sortie. Nettoie la libname XML après utilisation.
Copié !
1%DO x=1 %to &repocnt;
2 options metarepository=&&repo&x;
3 PROC METADATA in=
4 "<GetMetadataObjects><Reposid>$METAREPOSITORY</Reposid>
5 <Type>ServerContext</Type><Objects/><NS>SAS</NS>
6 <Flags>0</Flags><Options/></GetMetadataObjects>"
7 out=__mc1;
8 RUN;
9 /*
10 data _null_;
11 infile __mc1 lrecl=1048576;
12 input;
13 put _infile_;
14 run;
15 */
16 DATA _null_;
17 file __mc2;
18 put '<SXLEMAP version="1.2" name="SASContexts"><TABLE name="SASContexts">';
19 put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/ServerContext";
20 put "</TABLE-PATH>";
21 put '<COLUMN name="serveruri">';
22 put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/ServerContext/ @Id";
23 put "</PATH>";
24 put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>";
25 put '</COLUMN>';
26 put '<COLUMN name="servername">';
27 put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/ServerContext/ @Name";
28 put "</PATH>";
29 put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>";
30 put '</COLUMN>';
31 put '</TABLE></SXLEMAP>';
32 RUN;
33 LIBNAME __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;
34 PROC APPEND base=&outds DATA=__mc3.SASContexts;RUN;
35 LIBNAME __mc3 clear;
36%END;
4 Bloc de code
MACRO
Explication :
Restaure l'option `metarepository` à sa valeur d'origine. Nettoie les références aux fichiers temporaires utilisés. Termine la définition de la macro.
Copié !
1options metarepository=&repo;
2 
3filename __mc1 clear;
4filename __mc2 clear;
5 
6%mend mm_getservercontexts;
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.
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« Dans les environnements SAS complexes, les définitions de serveurs ne résident pas toujours uniquement dans le référentiel 'Foundation'. L'erreur classique est de se limiter au contexte par défaut.

La force de %mm_getservercontexts est sa capacité à itérer dynamiquement sur l'ensemble des dépôts de métadonnées (Foundation et Custom). En balayant systématiquement chaque repository, cette macro garantit une cartographie exhaustive de vos serveurs d'application (SASApp, etc.). C'est un outil indispensable pour les administrateurs qui doivent auditer l'architecture ou préparer des migrations, sans risquer de laisser des configurations 'fantômes' de côté. »