Attention : Este código requiere privilegios de administrador.
El script comienza definiendo dinámicamente el código de un servicio web que lee `sashelp.class` y utiliza las funciones `%webout` para producir un resultado JSON. Este código se despliega luego como un servicio web llamado 'testsvc' a través de la macro `%mv_createwebservice`. Se inicia un jobflow con `%mv_jobflow` para ejecutar este servicio, con gestión de concurrencia y salida de logs. Después de la ejecución, la URI del resultado del servicio se extrae de los metadatos del jobflow. La macro `%mv_getjobresult` se utiliza para recuperar los datos reales del servicio a través de esta URI. Finalmente, el script valida que los datos recuperados corresponden al contenido esperado de `sashelp.class` utilizando una aserción sobre el número de observaciones del dataset resultante, a través de la macro `%mp_assertdsobs`.
Análisis de datos
Type : MIXTE
La fuente de datos principal es el dataset interno SAS `sashelp.class`. El script también crea varios datasets de trabajo temporales (`work.inputjobs`, `work.results`, `myweblib.test`, `work.out`, `work.test_results`) y manipula filerefs temporales (`testref`, `myjoblog`, `myweb`) para el almacenamiento intermedio del código del servicio, los logs del jobflow y los resultados del servicio web.
1 Bloque de código
DATA STEP Data
Explicación : Este bloque utiliza un `DATA _NULL_` para escribir código SAS en un archivo temporal (`testref`). El código escrito define un `DATA STEP` simple que carga `sashelp.class` en un dataset llamado `test`, luego utiliza las macros `%webout` para formatear este dataset como salida web (probablemente JSON), lo cual es típico para los servicios REST.
¡Copiado!
filename testref temp;
data _null_;
file testref;
put 'data test; set sashelp.class;run;';
put '%webout(OPEN)';
put '%webout(OBJ,test)';
put '%webout(CLOSE)';
run;
1
filename testref temp;
2
DATA _null_;
3
file testref;
4
put 'data test; set sashelp.class;run;';
5
put '%webout(OPEN)';
6
put '%webout(OBJ,test)';
7
put '%webout(CLOSE)';
8
RUN;
2 Bloque de código
MACRO mv_createwebservice
Explicación : Llama a la macro `%mv_createwebservice` para crear y desplegar un servicio web llamado `testsvc`. La ruta de despliegue se especifica mediante `&mcTestAppLoc/services/temp`, y el código del servicio se lee desde el fileref temporal `testref` definido previamente.
Explicación : Este bloque prepara la ejecución del servicio web. Se crea un dataset `work.inputjobs` para especificar el programa (`testsvc`) a ejecutar. Luego, se llama a la macro `%mv_jobflow` para iniciar la ejecución del servicio, gestionando la concurrencia con `maxconcurrency=4`. Los resultados del jobflow se almacenan en `work.results` y el log de ejecución se guarda en el fileref `myjoblog`.
¡Copiado!
data work.inputjobs;
_program="&mcTestAppLoc/services/temp/testsvc";
run;
%mv_jobflow(inds=work.inputjobs
,maxconcurrency=4
,outds=work.results
,outref=myjoblog
)
1
DATA work.inputjobs;
2
_program="&mcTestAppLoc/services/temp/testsvc";
3
RUN;
4
%mv_jobflow(inds=work.inputjobs
5
,maxconcurrency=4
6
,outds=work.results
7
,outref=myjoblog
8
)
4 Bloque de código
DATA STEP
Explicación : Lee el contenido del archivo de log `myjoblog` generado por el jobflow y lo escribe directamente en el log SAS, permitiendo visualizar los mensajes de ejecución del servicio.
¡Copiado!
data _null_;
infile myjoblog;
input;
put _infile_;
run;
1
DATA _null_;
2
INFILE myjoblog;
3
INPUT;
4
put _infile_;
5
RUN;
5 Bloque de código
DATA STEP
Explicación : Este `DATA _NULL_` recorre el dataset `work.results` (que contiene los metadatos del jobflow) y extrae el valor de la variable `uri` para almacenarlo en una variable de macro global llamada `uri`, esencial para la recuperación de los resultados del servicio. Todas las variables también se muestran en el log.
¡Copiado!
data _null_;
set work.results;
call symputx('uri',uri);
put (_all_)(=);
run;
1
DATA _null_;
2
SET work.results;
3
call symputx('uri',uri);
4
put (_all_)(=);
5
RUN;
6 Bloque de código
MACRO mv_getjobresult Data
Explicación : Llama a la macro `%mv_getjobresult` para recuperar los resultados del servicio web utilizando la URI obtenida previamente. El parámetro `result=WEBOUT_JSON` indica que la salida esperada está en formato JSON, que se almacena en el fileref `myweb` y un dataset `test` dentro de la librería `myweblib`.
Explicación : Lee el contenido bruto del archivo `myweb` (el resultado JSON del servicio web) y lo muestra en el log SAS para una revisión directa.
¡Copiado!
data _null_;
infile myweb;
input;
putlog _infile_;
run;
1
DATA _null_;
2
INFILE myweb;
3
INPUT;
4
putlog _infile_;
5
RUN;
8 Bloque de código
DATA STEP Data
Explicación : Crea un dataset de trabajo llamado `work.out` leyendo los datos estructurados del dataset `myweblib.test`, que contiene los datos de `sashelp.class` tal como los devuelve el servicio web e interpretados por la macro `mv_getjobresult`. También muestra todas las variables del nuevo dataset en el log.
¡Copiado!
data work.out;
set myweblib.test;
put (_all_)(=);
run;
1
DATA work.out;
2
SET myweblib.test;
3
put (_all_)(=);
4
RUN;
9 Bloque de código
MACRO mp_assertdsobs Data
Explicación : Llama a la macro de prueba `%mp_assertdsobs` para verificar que el dataset `work.out` contiene exactamente 19 observaciones. Esto valida que el servicio web ha devuelto correctamente todas las filas de `sashelp.class`. El resultado de esta aserción se registra en el dataset `work.test_results`.
¡Copiado!
%mp_assertdsobs(work.out,
desc=Test1 - 19 obs from sashelp.class in service result,
test=EQUALS 19,
outds=work.test_results
)
1
%mp_assertdsobs(work.out,
2
desc=Test1 - 19 obs from sashelp.class in service RESULT,
3
test=EQUALS 19,
4
outds=work.test_results
5
)
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.