Veröffentlicht am :
Verwaltung EXTERNE

SAS VA-Berichte über die REST-API auflisten und lokalisieren

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Attention : Dieser Code erfordert Administratorrechte.
Der Skript beginnt damit, den Dienst 'reports' über PROC HTTP aufzurufen, um eine gefilterte Liste von Berichten (hier nach Namen) zu erhalten. Die JSON-Antwort wird mit einer LIBNAME JSON gelesen. Anschließend wird für jeden gefundenen Bericht ein Makro (%save_VA_Report_Path) ausgeführt. Dieses Makro verwendet einen weiteren API-Aufruf ('folders/ancestors'), um den Pfad des übergeordneten Ordners des Berichts zu finden. Der Pfad wird rekonstruiert und im finalen Dataset gespeichert. Schließlich zeigt der Skript die Liste der Berichte mit ihrem Pfad, ihrer ID und den Erstellungs-/Änderungsmetadaten an.
Datenanalyse

Type : EXTERNE


Die Daten werden dynamisch durch Aufrufe der SAS Viya REST-API generiert. Der erste Aufruf ruft die Metadaten der Berichte ab, und die nachfolgenden Aufrufe rufen die Ordnerstruktur für jeden Bericht ab.

1 Codeblock
PROC HTTP Data
Erklärung :
Dieser Block führt eine GET-Anfrage an die SAS Viya Reports API aus, um eine Sammlung von Berichten abzurufen, die nach ihrem Namen ('Report 2') gefiltert sind. Die Antwort im JSON-Format wird in der temporären Fileref 'rptFile' gespeichert.
Kopiert!
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 Codeblock
DATA STEP Data
Erklärung :
Weisen Sie eine 'rptFile'-Bibliothek zu, um das empfangene JSON zu lesen. Anschließend liest ein DATA-Schritt die Elemente der Berichtssammlung, um die Tabelle 'ds_rpts' zu erstellen, wobei relevante Variablen wie ID, Name und Zeitstempel beibehalten und umbenannt werden.
Kopiert!
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 Codeblock
MACRO
Erklärung :
Definiert ein Makro, das einen Berichts-URI als Eingabe nimmt. Das Makro führt einen PROC HTTP-Aufruf durch, um die übergeordneten Ordner des Berichts zu finden, verwendet PROC SQL, um den vollständigen Pfad zu rekonstruieren, und aktualisiert dann das Dataset 'ds_rpts' mit diesem Pfad für den entsprechenden Bericht. Hinweis: Die Aktualisierung des Datasets 'ds_rpts' ist ineffizient, da sie die Tabelle bei jedem Aufruf neu erstellt.
Kopiert!
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 */ URL = "&BASE_URI/folders/ancestors?childUri=/reports/reports/&reportURI";
7 HEADERS "Accept" = "application/vnd.sas.content.folder.ancestor+json";
8 RUN;
9 LIBNAME fldFile json;
10
11/* generate the path from the returned folders above */
12 PROC SQL noprint;
13 select name into :fldname separated BY '/'
14 from fldFile.ancestors
15 order BY ordinal_ancestors desc;
16 QUIT;
17 
18 DATA tmpsave;
19 LENGTH cc $ 36;
20 SET ds_rpts;
21 cc = "&locURI";
22 IF trim(id) = trim(cc) THEN
23 rptPath=resolve('&fullpath.&fldname.');
24 drop cc;
25 RUN;
26
27 DATA ds_rpts;
28 SET tmpsave;
29 RUN;
30 
31%MEND save_VA_Report_Path;
4 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA _NULL_ Schritt durchläuft die Tabelle 'ds_rpts' und verwendet 'CALL EXECUTE', um das Makro '%save_VA_Report_Path' für jeden gefundenen Bericht (jede 'id') dynamisch aufzurufen, um den Berichtspfad zu füllen.
Kopiert!
1DATA _null_;
2 SET ds_rpts;
3 call execute('%save_VA_Report_Path('||id||')');
4RUN;
5 Codeblock
PROC PRINT
Erklärung :
Gib den endgültigen Inhalt des Datasets 'ds_rpts' aus, um den Pfad, den Namen, die ID, den Ersteller und die Zeitstempel jedes Berichts anzuzeigen.
Kopiert!
1 
2PROC PRINT
3DATA=ds_rpts;
4var rptPath name rptID createdBy CreatedAt LastModified;
5RUN;
6 
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.