Publié le :
Macro CREATION_INTERNE

Création et Test d'un Web Service SAS pour l'envoi d'objets

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script commence par utiliser un DATA _NULL_ avec l'utilitaire '%webout' pour définir la logique du service web. Cette logique consiste à parcourir une liste de tables SAS© (fournie par la macro-variable 'sasjs_tables' ou les fichiers entrants '_webin_') et à les écrire dans le flux de sortie web. Ensuite, la macro '%ms_createwebservice' est appelée pour déployer ce code en tant que service 'sendObj'. Des tables de test ('work.somedata1', 'work.somedata2') sont créées. La macro '%ms_testservice' est utilisée pour appeler le service nouvellement créé avec ces tables en entrée. Enfin, des étapes DATA _NULL_ et des appels à la macro '%mp_assert' sont utilisés pour valider que les données retournées par le service sont conformes aux attentes, confirmant ainsi le bon fonctionnement du service.
Analyse des données

Type : CREATION_INTERNE


Les données utilisées pour le test ('work.somedata1' et 'work.somedata2') sont créées directement dans le script à l'aide d'une étape DATA. Aucune source de données externe n'est requise.

1 Bloc de code
DATA STEP
Explication :
Ce bloc DATA _NULL_ écrit le code SAS qui constituera le corps du web service. Il utilise '%webout' pour préparer une sortie web. Une macro interne '%x' est définie pour itérer sur une liste de tables (provenant de 'sasjs_tables' ou des fichiers uploadés) et les écrire en tant qu'objets dans la réponse web, en convertissant les valeurs manquantes en chaînes de caractères.
Copié !
1filename ft15f001 temp;
2DATA _null_;
3 file ft15f001;
4 INFILE CARDS;
5 INPUT;
6 put _infile_;
7cards4;
8 %put Initialising sendObj: ;
9 %put _all_;
10 %webout(FETCH)
11 %webout(OPEN)
12 %macro x();
13 %IF (%symexist(sasjs_tables) and %LENGTH(&sasjs_tables)>0)
14 %THEN %DO i=1 %to %sysfunc(countw(&sasjs_tables));
15 %let TABLE=%scan(&sasjs_tables,&i);
16 %webout(OBJ,&TABLE,missing=STRING)
17 %END;
18 %ELSE %DO i=1 %to &_webin_file_count;
19 %webout(OBJ,&&_webin_name&i,missing=STRING)
20 %END;
21 %mend x; %x()
22 %webout(CLOSE)
23;;;;
24RUN;
2 Bloc de code
Macro Call
Explication :
Appel à la macro '%ms_createwebservice' pour créer et déployer le service web 'sendObj' dans le répertoire spécifié par '&mcTestAppLoc/services', en utilisant le code généré à l'étape précédente.
Copié !
1%put creating web service: &mcTestAppLoc/services;
2%ms_createwebservice(
3 path=&mcTestAppLoc/services,
4 name=sendObj,
5 mdebug=&sasjs_mdebug
6)
7%put created web service: &mcTestAppLoc/services;
3 Bloc de code
Macro Call
Explication :
Appel à la macro '%mp_assert' pour vérifier que la création du service s'est déroulée sans erreur (condition 'syscc=0'). Le résultat du test est enregistré dans 'work.test_results'.
Copié !
1%mp_assert(
2 iftrue=(&syscc=0),
3 desc=No errors after service creation,
4 outds=work.test_results
5)
4 Bloc de code
DATA STEP Data
Explication :
Cette étape DATA crée deux tables SAS de test, 'work.somedata1' et 'work.somedata2', avec des données identiques contenant des valeurs numériques, une chaîne avec des guillemets et des espaces, et une valeur manquante spéciale.
Copié !
1DATA work.somedata1 work.somedata2;
2 x=1;
3 y=' t"w"o';
4 z=.z;
5 label x='x factor';
6 OUTPUT;
7RUN;
5 Bloc de code
Macro Call Data
Explication :
Appel à la macro '%ms_testservice' pour exécuter le web service 'sendObj'. Les tables 'work.somedata1' et 'work.somedata2' sont passées en entrée. Les résultats du service seront stockés dans la bibliothèque 'testlib1'.
Copié !
1%ms_testservice(&mcTestAppLoc/services/sendObj,
2 inputdatasets=work.somedata1 work.somedata2,
3 debug=log,
4 mdebug=1,
5 outlib=testlib1,
6 outref=test1
7)
6 Bloc de code
DATA STEP
Explication :
Ces deux étapes DATA _NULL_ vérifient le contenu des tables retournées par le service web ('testlib1.somedata1' et 'testlib1.somedata2'). Si les données sont conformes à ce qui est attendu (notamment la transformation de la valeur manquante '.z' en caractère 'Z'), les macro-variables 'test1' et 'test2' sont mises à 'PASS'.
Copié !
1%let test1=FAIL;
2DATA _null_;
3 SET testlib1.somedata1;
4 IF x=1 and y=' t"w"o' and z="Z" THEN call symputx('test1','PASS');
5 putlog (_all_)(=);
6RUN;
7 
8%let test2=FAIL;
9DATA _null_;
10 SET testlib1.somedata2;
11 IF x=1 and y=' t"w"o' and z="Z" THEN call symputx('test2','PASS');
12 putlog (_all_)(=);
13RUN;
7 Bloc de code
Macro Call
Explication :
Appels finaux à la macro '%mp_assert' pour valider formellement les résultats des vérifications précédentes. Si les macro-variables 'test1' et 'test2' sont à 'PASS', les tests sont considérés comme réussis.
Copié !
1%mp_assert(
2 iftrue=(&test1=PASS),
3 desc=somedata1 created correctly,
4 outds=work.test_results
5)
6%mp_assert(
7 iftrue=(&test2=PASS),
8 desc=somedata2 created correctly,
9 outds=work.test_results
10)
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 : Des informations de copyright (HMS Analytical Software GmbH, SAS Institute Inc.) sont détectées dans les commentaires faisant référence à d'autres fichiers.