Attention : Ce code nécessite des droits administrateur.
La macro `%ms_adduser2group` prend un ID utilisateur (`uid`) et un ID de groupe (`gid`) en paramètres. Elle construit et envoie une requête POST à l'endpoint `/SASjsApi/group/&gid/&uid` d'un serveur SASjs. L'authentification est gérée via un fichier token dont le chemin est spécifié dans la variable `&_sasjs_tokenfile`. La macro utilise `PROC HTTP` pour effectuer l'appel API. En cas de succès, elle lit la réponse JSON, qui contient la liste mise à jour des membres du groupe, et la charge dans un jeu de données de sortie (`outds`). Des macros utilitaires comme `%mp_abort` et `%mf_getuniquefileref` sont utilisées pour la gestion des erreurs et la création de références de fichiers uniques.
Analyse des données
Type : EXTERNE
Les données ne sont pas créées localement. Le script interroge une API externe (SASjs Server) via PROC HTTP. La réponse de l'API, au format JSON, est ensuite lue et transformée en un jeu de données SAS. Le script dépend également de variables d'environnement (`&_sasjs_tokenfile`, `&_sasjs_apiserverurl`) pour fonctionner.
1 Bloc de code
Macro
Explication : Définit la macro `ms_adduser2group` avec ses paramètres. Effectue une vérification d'erreur initiale, déclare les variables locales, génère des références de fichier et de bibliothèque uniques avec des macros externes, et configure l'option `nobomfile` pour assurer la compatibilité avec l'API.
Explication : Ce DATA STEP crée un fichier temporaire qui servira d'en-tête pour la requête HTTP. Il y écrit l'en-tête 'accept: application/json' et y ajoute le contenu du fichier token d'authentification SASjs (`&_sasjs_tokenfile`).
Copié !
data _null_;
file &fref0 lrecl=1000;
infile "&_sasjs_tokenfile" lrecl=1000;
input;
if _n_=1 then put "accept: application/json";
put _infile_;
run;
1
DATA _null_;
2
file &fref0 lrecl=1000;
3
INFILE"&_sasjs_tokenfile" lrecl=1000;
4
INPUT;
5
IF _n_=1THEN put "accept: application/json";
6
put _infile_;
7
RUN;
3 Bloc de code
PROC HTTP Data
Explication : Utilise `PROC HTTP` pour envoyer une requête POST à l'API SASjs. L'URL est construite dynamiquement avec l'adresse du serveur, l'ID du groupe et l'ID de l'utilisateur. Les en-têtes préparés précédemment sont passés via `headerin=`, et la réponse JSON de l'API est écrite dans le fichier temporaire référencé par `&fref1`.
Explication : Ce bloc traite la réponse JSON de l'API. Un moteur `LIBNAME JSON` est utilisé pour mapper directement le fichier JSON de réponse comme une bibliothèque SAS. Ensuite, un DATA STEP lit la table 'users' de cette bibliothèque JSON (correspondant à la clé 'users' dans le JSON) et la copie dans le jeu de données de sortie `&outds`, en supprimant les colonnes ordinales inutiles.
Copié !
libname &libref JSON fileref=&fref1;
data &outds;
set &libref..users;
drop ordinal_root ordinal_users;
%if &mdebug=1 %then %do;
putlog _all_;
%end;
run;
1
LIBNAME &libref JSON fileref=&fref1;
2
3
DATA &outds;
4
SET &libref..users;
5
drop ordinal_root ordinal_users;
6
%IF &mdebug=1 %THEN %DO;
7
putlog _all_;
8
%END;
9
RUN;
5 Bloc de code
Options
Explication : Restaure l'option `BOMFILE` à sa valeur d'origine. Ensuite, si le mode debug n'est pas activé (`mdebug=0`), il nettoie les ressources utilisées en libérant les références de fichier et de bibliothèque qui ont été allouées au début de la macro.
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.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.