Attention : Dieser Code erfordert Administratorrechte.
Das Skript beginnt mit der dynamischen Definition des Codes für einen Webservice, der `sashelp.class` liest und die `%webout`-Funktionen verwendet, um ein JSON-Ergebnis zu produzieren. Dieser Code wird dann als Webservice namens 'testsvc' über das Makro `%mv_createwebservice` bereitgestellt. Ein Jobflow wird mit `%mv_jobflow` initiiert, um diesen Dienst auszuführen, mit Verwaltung der Parallelität und Log-Ausgabe. Nach der Ausführung wird die URI des Dienstergebnisses aus den Metadaten des Jobflows extrahiert. Das Makro `%mv_getjobresult` wird verwendet, um die tatsächlichen Daten des Dienstes über diese URI abzurufen. Schließlich validiert das Skript, dass die abgerufenen Daten dem erwarteten Inhalt von `sashelp.class` entsprechen, indem es eine Assertion über die Anzahl der Beobachtungen des resultierenden Datasets über das Makro `%mp_assertdsobs` verwendet.
Datenanalyse
Type : MIXTE
Die Hauptdatenquelle ist das interne SAS-Dataset `sashelp.class`. Das Skript erstellt auch mehrere temporäre Arbeitsdatasets (`work.inputjobs`, `work.results`, `myweblib.test`, `work.out`, `work.test_results`) und manipuliert temporäre Filerefs (`testref`, `myjoblog`, `myweb`) zur Zwischenspeicherung des Dienstcodes, der Jobflow-Logs und der Webservice-Ergebnisse.
1 Codeblock
DATA STEP Data
Erklärung : Dieser Block verwendet ein `DATA _NULL_`, um SAS-Code in eine temporäre Datei (`testref`) zu schreiben. Der geschriebene Code definiert einen einfachen `DATA STEP`, der `sashelp.class` in ein Dataset namens `test` lädt und dann die `%webout`-Makros verwendet, um dieses Dataset als Webausgabe (wahrscheinlich JSON) zu formatieren, was typisch für REST-Dienste ist.
Kopiert!
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 Codeblock
MACRO mv_createwebservice
Erklärung : Ruft das Makro `%mv_createwebservice` auf, um einen Webservice namens `testsvc` zu erstellen und bereitzustellen. Der Bereitstellungspfad wird durch `&mcTestAppLoc/services/temp` angegeben, und der Service-Code wird aus dem zuvor definierten temporären Fileref `testref` gelesen.
Erklärung : Dieser Block bereitet die Ausführung des Webservices vor. Ein Dataset `work.inputjobs` wird erstellt, um das auszuführende Programm (`testsvc`) anzugeben. Anschließend wird das Makro `%mv_jobflow` aufgerufen, um die Ausführung des Dienstes zu starten, wobei die Parallelität mit `maxconcurrency=4` verwaltet wird. Die Jobflow-Ergebnisse werden in `work.results` gespeichert, und das Ausführungslog wird im Fileref `myjoblog` aufgezeichnet.
Kopiert!
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 Codeblock
DATA STEP
Erklärung : Liest den Inhalt der vom Jobflow generierten Logdatei `myjoblog` und schreibt ihn direkt in das SAS-Log, um die Ausführungsnachrichten des Dienstes sichtbar zu machen.
Kopiert!
data _null_;
infile myjoblog;
input;
put _infile_;
run;
1
DATA _null_;
2
INFILE myjoblog;
3
INPUT;
4
put _infile_;
5
RUN;
5 Codeblock
DATA STEP
Erklärung : Dieser `DATA _NULL_` durchläuft das Dataset `work.results` (das die Jobflow-Metadaten enthält) und extrahiert den Wert der `uri`-Variable, um ihn in einer globalen Makrovariable namens `uri` zu speichern, die für den Abruf der Dienstergebnisse unerlässlich ist. Alle Variablen werden ebenfalls im Log angezeigt.
Kopiert!
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 Codeblock
MACRO mv_getjobresult Data
Erklärung : Ruft das Makro `%mv_getjobresult` auf, um die Ergebnisse des Webservices unter Verwendung der zuvor erhaltenen URI abzurufen. Der Parameter `result=WEBOUT_JSON` weist darauf hin, dass die erwartete Ausgabe im JSON-Format vorliegt, das im Fileref `myweb` und einem Dataset `test` innerhalb der Bibliothek `myweblib` gespeichert wird.
Erklärung : Liest den Rohinhalt der Datei `myweb` (das JSON-Ergebnis des Webservices) und zeigt ihn zur direkten Überprüfung im SAS-Log an.
Kopiert!
data _null_;
infile myweb;
input;
putlog _infile_;
run;
1
DATA _null_;
2
INFILE myweb;
3
INPUT;
4
putlog _infile_;
5
RUN;
8 Codeblock
DATA STEP Data
Erklärung : Erstellt ein Arbeitsdataset namens `work.out`, indem die strukturierten Daten aus dem Dataset `myweblib.test` gelesen werden, das die von `sashelp.class` stammenden Daten enthält, wie sie vom Webservice zurückgegeben und vom Makro `mv_getjobresult` interpretiert wurden. Zeigt auch alle Variablen des neuen Datasets im Log an.
Kopiert!
data work.out;
set myweblib.test;
put (_all_)(=);
run;
1
DATA work.out;
2
SET myweblib.test;
3
put (_all_)(=);
4
RUN;
9 Codeblock
MACRO mp_assertdsobs Data
Erklärung : Ruft das Testmakro `%mp_assertdsobs` auf, um zu überprüfen, ob das Dataset `work.out` genau 19 Beobachtungen enthält. Dies validiert, dass der Webservice alle Zeilen von `sashelp.class` korrekt zurückgegeben hat. Das Ergebnis dieser Assertion wird im Dataset `work.test_results` gespeichert.
Kopiert!
%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
)
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.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.