La macro n'utilise pas de données SAS (tables ou datasets) comme source. Elle opère directement sur le système de métadonnées de SAS, interrogeant et modifiant les définitions des processus stockés. Par conséquent, il n'y a pas de dépendance à des données externes ou des bibliothèques spécifiques pour son exécution fonctionnelle.
1 Bloc de code
DATA STEP
Explication : Ce bloc `DATA _NULL_` est utilisé pour interagir avec le serveur de métadonnées SAS. La fonction `metadata_pathobj` tente de localiser le processus stocké spécifié par le paramètre `target` et d'en extraire son type (`cmtype`) et son URI (`stpuri`). Ces informations sont ensuite stockées dans des variables macro locales. Une vérification est effectuée pour s'assurer que l'objet trouvé est bien un 'StoredProcess'. Si ce n'est pas le cas, un avertissement est émis et la macro se termine.
Copié !
data _null_;
length type uri $256;
rc=metadata_pathobj("","&target",'StoredProcess',type,uri);
call symputx('cmtype',type,'l');
call symputx('stpuri',uri,'l');
run;
%if &cmtype ne ClassifierMap %then %do;
%put %str(WARN)ING: No Stored Process found at ⌖
%return;
%end;
%put %str(WARN)ING: No Stored Process found at ⌖
9
%return;
10
%END;
2 Bloc de code
MACRO LOGIQUE
Explication : Ce simple bloc logique macro détermine la valeur du type de serveur à définir. Si le paramètre `type` est 'WKS', la variable macro `newtype` est définie à 'Wks'. Sinon, elle est définie à 'Sps'. Cette variable sera utilisée ultérieurement pour construire la chaîne XML de mise à jour des métadonnées.
Explication : Ce second bloc `DATA _NULL_` est le cœur de la logique de mise à jour. Il itère sur les notes associées à l'URI du processus stocké (`stpuri`) en utilisant `metadata_getnasn`. Il recherche spécifiquement la note dont le nom est 'Stored Process'. Une fois trouvée, la fonction `METADATA_SETATTR` est utilisée pour modifier son attribut 'StoredText'. Cet attribut est mis à jour avec une nouvelle chaîne XML qui définit le `LogicalServerType` du processus stocké en utilisant la variable macro `&newtype` déterminée précédemment. Le succès de cette opération est enregistré dans la variable macro `result`.
Copié !
data _null_;
length uri name value $256;
n=1;
do while(metadata_getnasn("&stpuri","Notes",n,uri)>0);
n+1;
rc=metadata_getattr(uri,"Name",name);
if name='Stored Process' then do;
rc = METADATA_SETATTR(uri,'StoredText'
,'<?xml version="1.0" encoding="UTF-8"?>'
!!'<StoredProcess><ServerContext LogicalServerType="'!!"&newtype"
!!'" OtherAllowed="false"/><ResultCapabilities Package="false" '
!!' Streaming="true"/><OutputParameters/></StoredProcess>');
if rc=0 then call symputx('result','SUCCESS');
stop;
end;
end;
run;
1
DATA _null_;
2
LENGTH uri name value $256;
3
n=1;
4
DO while(metadata_getnasn("&stpuri","Notes",n,uri)>0);
Explication : Ce bloc final est une instruction macro conditionnelle qui affiche un message dans le log SAS. Si la variable macro `result` est 'SUCCESS', un message de confirmation est affiché, indiquant que le type de serveur du processus stocké a été modifié. Sinon, un message d'erreur général est émis, signalant un problème lors de l'exécution de la macro.
Copié !
%if &result=SUCCESS %then %put NOTE: SUCCESS: STP &target changed to &type type;
%else %put %str(ERR)OR: Issue with &sysmacroname;
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 : Les informations de copyright sont détectées dans les fichiers référencés : 'Copyright (c) 2001-2006 Rodney Sparapani' (sous licence GNU General Public License) pour _version.sas, et 'Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de' (faisant partie de SASUnit) pour macro_without_brief_tag.sas. Ces références sont incluses dans le bloc d'aide de la macro principale.
« La macro %mm_updatestpservertype illustre une technique d'administration avancée : la modification directe de la configuration d'exécution d'un Stored Process. Bien que le titre mentionne SAS Viya 4 par erreur, le code utilise l'Open Metadata Architecture (OMA) propre à SAS 9.x. En manipulant l'attribut StoredText, vous intervenez directement sur la façon dont l'Object Spawner va instancier le moteur SAS pour répondre à une requête utilisateur.
Recommandations et points de vigilance
WKS vs STP (SPS) : Le choix du serveur est crucial pour les performances et les fonctionnalités. Le mode WKS (Workspace Server) est idéal pour les traitements intensifs avec des sessions dédiées, tandis que le mode STP (ou Stored Process Server) utilise un pool de sessions multi-utilisateurs, offrant une réactivité accrue pour les requêtes légères et fréquentes.
Risque lié à l'écrasement de StoredText : La fonction METADATA_SETATTR est ici utilisée pour injecter une chaîne XML complète. Attention : cette méthode écrase l'intégralité du contenu de l'attribut. Si votre Stored Process possédait des configurations spécifiques (capacités de résultats personnalisées, paramètres d'entrée, etc.), elles seront perdues. Une approche d'expert consisterait à lire le flux XML existant et à n'y modifier que l'attribut LogicalServerType via des fonctions de manipulation de chaînes ou de parseur XML.
Persistance des métadonnées : Contrairement à une modification via la SAS Management Console, les changements effectués par METADATA_SETATTR sont immédiats et définitifs dans le référentiel. Je recommande de toujours effectuer un export (SPK) de l'objet avant de lancer ce type de macro-automatisation. »
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.