Publicado el :
Macro CREATION_INTERNE

Creación y Prueba de un Web Service SAS para el envío de objetos

Este código también está disponible en: Deutsch English Français
En espera de validación
Attention : Este código requiere privilegios de administrador.
El script comienza utilizando un DATA _NULL_ con la utilidad '%webout' para definir la lógica del servicio web. Esta lógica consiste en recorrer una lista de tablas SAS© (proporcionada por la macrovariable 'sasjs_tables' o los archivos de entrada '_webin_') y escribirlas en el flujo de salida web. Luego, se llama a la macro '%ms_createwebservice' para implementar este código como el servicio 'sendObj'. Se crean tablas de prueba ('work.somedata1', 'work.somedata2'). Se utiliza la macro '%ms_testservice' para llamar al servicio recién creado con estas tablas como entrada. Finalmente, se utilizan pasos DATA _NULL_ y llamadas a la macro '%mp_assert' para validar que los datos devueltos por el servicio cumplen con las expectativas, confirmando así el correcto funcionamiento del servicio.
Análisis de datos

Type : CREATION_INTERNE


Los datos utilizados para la prueba ('work.somedata1' y 'work.somedata2') se crean directamente en el script mediante un paso DATA. No se requiere ninguna fuente de datos externa.

1 Bloque de código
DATA STEP
Explicación :
Este bloque DATA _NULL_ escribe el código SAS que constituirá el cuerpo del servicio web. Utiliza '%webout' para preparar una salida web. Se define una macro interna '%x' para iterar sobre una lista de tablas (provenientes de 'sasjs_tables' o archivos cargados) y escribirlas como objetos en la respuesta web, convirtiendo los valores faltantes en cadenas de caracteres.
¡Copiado!
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 Bloque de código
Macro Call
Explicación :
Llamada a la macro '%ms_createwebservice' para crear y desplegar el servicio web 'sendObj' en el directorio especificado por '&mcTestAppLoc/services', utilizando el código generado en el paso anterior.
¡Copiado!
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 Bloque de código
Macro Call
Explicación :
Llamada a la macro '%mp_assert' para verificar que la creación del servicio se realizó sin errores (condición 'syscc=0'). El resultado de la prueba se registra en 'work.test_results'.
¡Copiado!
1%mp_assert(
2 iftrue=(&syscc=0),
3 desc=No errors after service creation,
4 outds=work.test_results
5)
4 Bloque de código
DATA STEP Data
Explicación :
Este paso DATA crea dos tablas SAS de prueba, 'work.somedata1' y 'work.somedata2', con datos idénticos que contienen valores numéricos, una cadena con comillas y espacios, y un valor faltante especial.
¡Copiado!
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 Bloque de código
Macro Call Data
Explicación :
Llamada a la macro '%ms_testservice' para ejecutar el web service 'sendObj'. Las tablas 'work.somedata1' y 'work.somedata2' se pasan como entrada. Los resultados del servicio se almacenarán en la biblioteca 'testlib1'.
¡Copiado!
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 Bloque de código
DATA STEP
Explicación :
Estos dos pasos DATA _NULL_ verifican el contenido de las tablas devueltas por el servicio web ('testlib1.somedata1' y 'testlib1.somedata2'). Si los datos cumplen con lo esperado (incluida la transformación del valor faltante '.z' en el carácter 'Z'), las macrovariables 'test1' y 'test2' se establecen en 'PASS'.
¡Copiado!
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 Bloque de código
Macro Call
Explicación :
Llamadas finales a la macro '%mp_assert' para validar formalmente los resultados de las verificaciones anteriores. Si las macrovariables 'test1' y 'test2' están en 'PASS', las pruebas se consideran exitosas.
¡Copiado!
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)
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Se detecta información de derechos de autor (HMS Analytical Software GmbH, SAS Institute Inc.) en los comentarios que hacen referencia a otros archivos.