Publié le :
Administration CREATION_INTERNE

Récupérer les utilisateurs depuis les métadonnées SAS

En attente de validation
Attention : Ce code nécessite des droits administrateur.
Cette macro, mm_getusers, interroge le serveur de métadonnées SAS© 9 à l'aide de PROC METADATA pour récupérer une liste d'objets de type 'Person'. Elle peut soit retourner tous les utilisateurs, soit filtrer sur un nom d'utilisateur spécifique si le paramètre 'user' est fourni. La réponse XML de la procédure est ensuite traitée via un LIBNAME XML et une map SXLEMAP pour créer une table SAS© contenant les noms et les URI des utilisateurs. Ce code est spécifique à l'architecture SAS© 9 et n'est pas conçu pour SAS© Viya.
Analyse des données

Type : CREATION_INTERNE


Les données sont générées dynamiquement en interrogeant le serveur de métadonnées SAS 9 via PROC METADATA. Aucune source de données externe ou table SASHELP n'est utilisée.

1 Bloc de code
PROC METADATA Data
Explication :
Ce bloc utilise PROC METADATA pour envoyer une requête XML au serveur de métadonnées SAS. Si le paramètre 'user' est à 0, il demande tous les objets de type 'Person'. Sinon, il construit une requête XML plus complexe avec un filtre pour rechercher un utilisateur spécifique par son nom. La réponse XML du serveur est stockée dans le fileref temporaire 'response'.
Copié !
1%macro mm_getusers(
2 outds=work.mm_getusers,
3 user=0
4)/*/STORE SOURCE*/;
5 
6filename response temp;
7%IF %superq(user)=0 %THEN %DO;
8 PROC METADATA in= '<GetMetadataObjects>
9 <Reposid>$METAREPOSITORY</Reposid>
10 <Type>Person</Type>
11 <NS>SAS</NS>
12 <Flags>0</Flags>
13 <Options>
14 <Templates>
15 <Person Name=""/>
16 </Templates>
17 </Options>
18 </GetMetadataObjects>'
19 out=response;
20 RUN;
21%END;
22%ELSE %DO;
23 filename inref temp;
24 DATA _null_;
25 file inref;
26 put "<GetMetadataObjects>";
27 put "<Reposid>$METAREPOSITORY</Reposid>";
28 put "<Type>Person</Type>";
29 put "<NS>SAS</NS>";
30 put "<!-- Specify the OMI_XMLSELECT (128) flag -->";
31 put "<Flags>128</Flags>";
32 put "<Options>";
33 put "<Templates>";
34 put '<Person Name=""/>';
35 put "</Templates>";
36 LENGTH string $10000;
37 string=cats('<XMLSELECT search="Person[ @Name=',"'&user'",']"/>');
38 put string;
39 put "</Options>";
40 put "</GetMetadataObjects>";
41 RUN;
42 PROC METADATA in=inref out=response;
43 RUN;
44%END;
2 Bloc de code
DATA STEP Data
Explication :
Cette étape DATA _NULL_ génère dynamiquement une map XML (SXLEMAP) dans un fileref temporaire. Cette map définit comment transformer les données XML hiérarchiques (reçues de PROC METADATA) en une structure de table SAS à deux colonnes : 'uri' et 'name', en utilisant des expressions XPath pour localiser les attributs Id et Name des éléments Person.
Copié !
1filename sxlemap temp;
2DATA _null_;
3 file sxlemap;
4 put '<SXLEMAP version="1.2" name="SASObjects"><TABLE name="SASObjects">';
5 put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/Person";
6 put "</TABLE-PATH>";
7 put '<COLUMN name="uri">';
8 put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/Person/ @Id</PATH>";
9 put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>32</LENGTH>";
10 put '</COLUMN><COLUMN name="name">';
11 put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/Person/ @Name</PATH>";
12 put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>256</LENGTH>";
13 put '</COLUMN></TABLE></SXLEMAP>';
14RUN;
3 Bloc de code
PROC SORT Data
Explication :
Le moteur LIBNAME XML est utilisé pour créer une bibliothèque SAS virtuelle (_XML_) qui lit directement les données du fileref 'response' en appliquant le schéma défini par 'sxlemap'. PROC SORT est ensuite utilisé pour lire la table virtuelle '_XML_.SASObjects', la trier par nom, et créer la table de sortie finale spécifiée par le paramètre '&outds'. Enfin, les ressources temporaires (filerefs et libname) sont libérées.
Copié !
1LIBNAME _XML_ xml xmlfileref=response xmlmap=sxlemap;
2 
3PROC SORT DATA= _XML_.SASObjects out=&outds;
4 BY name;
5RUN;
6 
7filename sxlemap clear;
8filename response clear;
9LIBNAME _XML_ clear;
10 
11%mend mm_getusers;
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 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de. This file is part of SASUnit, the Unit testing framework for SAS(R) programs.