Publicado el :

Listar y localizar informes de SAS VA a través de la API REST

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 llamando al servicio 'reports' a través de PROC HTTP para obtener una lista de informes filtrada (aquí, por nombre). La respuesta JSON se lee con una LIBNAME JSON. Luego, para cada informe encontrado, se ejecuta una macro (%save_VA_Report_Path). Esta macro utiliza otra llamada a la API ('folders/ancestors') para encontrar la ruta de la carpeta principal del informe. La ruta se reconstruye y se almacena en el dataset final. Finalmente, el script muestra la lista de informes con su ruta, identificador y metadatos de creación/modificación.
Análisis de datos

Type : EXTERNA


Los datos se generan dinámicamente mediante llamadas a la API REST de SAS Viya. La primera llamada recupera los metadatos de los informes, y las llamadas subsiguientes recuperan la estructura de carpetas para cada informe.

1 Bloque de código
PROC HTTP Data
Explicación :
Este bloque ejecuta una solicitud GET en la API de informes de SAS Viya para recuperar una colección de informes filtrados por su nombre ('Report 2'). La respuesta, en formato JSON, se almacena en el fileref temporal 'rptFile'.
¡Copiado!
1%let BASE_URI=%sysfunc(getoption(SERVICESBASEURL));
2%let fullpath=/SAS Content/;
3 
4FILENAME rptFile TEMP ENCODING='UTF-8';
5PROC HTTP METHOD = "GET" oauth_bearer=sas_services OUT = rptFile
6/* get a list of reports, say created by sbjciw, or report name is 'Report 2' */
7/* URL = "&BASE_URI/reports/reports?filter=eq(createdBy,'sbjciw')" */
8 URL = "&BASE_URI/reports/reports?filter=eq(name,'Report 2')";
9 HEADERS "Accept" = "application/vnd.sas.collection+json"
10 "Accept-Item" = "application/vnd.sas.summary+json";
11 
12RUN;
2 Bloque de código
DATA STEP Data
Explicación :
Asigna una librería 'rptFile' para leer el JSON recibido. Luego, un paso DATA lee los ítems de la colección de informes para crear la tabla 'ds_rpts', conservando y renombrando las variables relevantes como el ID, el nombre y las marcas de tiempo.
¡Copiado!
1LIBNAME rptFile json;
2 
3DATA ds_rpts (keep=rptID id name createdBy creationTimeStamp modifiedTimeStamp
4 rename=(modifiedTimeStamp=LastModified creationTimeStamp=CreatedAt));
5 LENGTH rptID $ 60 rptPath $ 100;
6 SET rptFile.items;
7 rptID = '/reports/reports/'||id;
8RUN;
3 Bloque de código
MACRO
Explicación :
Define una macro que toma una URI de informe como entrada. La macro realiza una llamada a PROC HTTP para encontrar las carpetas ancestrales del informe, utiliza PROC SQL para reconstruir la ruta completa y luego actualiza el dataset 'ds_rpts' con esta ruta para el informe correspondiente. Nota: La actualización del dataset ds_rpts es ineficiente ya que recrea la tabla en cada llamada.
¡Copiado!
1%MACRO save_VA_Report_Path(reportURI);
2 FILENAME fldFile TEMP ENCODING='UTF-8';
3 %let locURI = &reportURI;
4
5 PROC HTTP METHOD = "GET" oauth_bearer=sas_services OUT = fldFile
6 /* get the folders in which the reportURI is in */
7 URL = "&BASE_URI/folders/ancestors?childUri=/reports/reports/&reportURI";
8 HEADERS "Accept" = "application/vnd.sas.content.folder.ancestor+json";
9 RUN;
10 LIBNAME fldFile json;
11
12/* generate the path from the returned folders above */
13 PROC SQL noprint;
14 select name into :fldname separated BY '/'
15 from fldFile.ancestors
16 order BY ordinal_ancestors desc;
17 QUIT;
18 
19 DATA tmpsave;
20 LENGTH cc $ 36;
21 SET ds_rpts;
22 cc = "&locURI";
23 IF trim(id) = trim(cc) THEN
24 rptPath=resolve('&fullpath.&fldname.');
25 drop cc;
26 RUN;
27
28 DATA ds_rpts;
29 SET tmpsave;
30 RUN;
31 
32%MEND save_VA_Report_Path;
4 Bloque de código
DATA STEP Data
Explicación :
Este paso DATA _NULL_ recorre la tabla 'ds_rpts' y utiliza 'CALL EXECUTE' para llamar dinámicamente a la macro '%save_VA_Report_Path' para cada informe (cada 'id') encontrado, con el fin de poblar la ruta del informe.
¡Copiado!
1DATA _null_;
2 SET ds_rpts;
3 call execute('%save_VA_Report_Path('||id||')');
4RUN;
5 Bloque de código
PROC PRINT
Explicación :
Imprime el contenido final del dataset 'ds_rpts' para mostrar la ruta, el nombre, el ID, el creador y las marcas de tiempo de cada informe.
¡Copiado!
1 
2PROC PRINT
3DATA=ds_rpts;
4var rptPath name rptID createdBy CreatedAt LastModified;
5RUN;
6 
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.