Veröffentlicht am :
Macro CREATION_INTERNE

Erstellung und Test eines SAS-Webdienstes zum Senden von Objekten

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Attention : Dieser Code erfordert Administratorrechte.
Das Skript beginnt mit der Verwendung eines DATA _NULL_ mit dem Dienstprogramm '%webout', um die Logik des Webdienstes zu definieren. Diese Logik besteht darin, eine Liste von SAS©-Tabellen (bereitgestellt durch die Makrovariable 'sasjs_tables' oder die Eingabedateien '_webin_') zu durchlaufen und sie in den Web-Ausgabestrom zu schreiben. Anschließend wird das Makro '%ms_createwebservice' aufgerufen, um diesen Code als Dienst 'sendObj' bereitzustellen. Testtabellen ('work.somedata1', 'work.somedata2') werden erstellt. Das Makro '%ms_testservice' wird verwendet, um den neu erstellten Dienst mit diesen Eingabetabellen aufzurufen. Schließlich werden DATA _NULL_-Schritte und Aufrufe des Makros '%mp_assert' verwendet, um zu überprüfen, ob die vom Dienst zurückgegebenen Daten den Erwartungen entsprechen, und so die korrekte Funktion des Dienstes zu bestätigen.
Datenanalyse

Type : CREATION_INTERNE


Die für den Test verwendeten Daten ('work.somedata1' und 'work.somedata2') werden direkt im Skript mithilfe eines DATA-Schritts erstellt. Es ist keine externe Datenquelle erforderlich.

1 Codeblock
DATA STEP
Erklärung :
Dieser DATA _NULL_-Block schreibt den SAS-Code, der den Kern des Webdienstes bilden wird. Er verwendet '%webout', um eine Web-Ausgabe vorzubereiten. Ein internes Makro '%x' wird definiert, um eine Liste von Tabellen (aus 'sasjs_tables' oder hochgeladenen Dateien) zu durchlaufen und diese als Objekte in die Web-Antwort zu schreiben, wobei fehlende Werte in Zeichenketten umgewandelt werden.
Kopiert!
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 Codeblock
Macro Call
Erklärung :
Aufruf des Makros '%ms_createwebservice' zum Erstellen und Bereitstellen des Webdienstes 'sendObj' im durch '&mcTestAppLoc/services' angegebenen Verzeichnis, unter Verwendung des im vorherigen Schritt generierten Codes.
Kopiert!
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 Codeblock
Macro Call
Erklärung :
Aufruf des Makros '%mp_assert', um zu überprüfen, ob die Diensterstellung ohne Fehler (Bedingung 'syscc=0') erfolgt ist. Das Testergebnis wird in 'work.test_results' gespeichert.
Kopiert!
1%mp_assert(
2 iftrue=(&syscc=0),
3 desc=No errors after service creation,
4 outds=work.test_results
5)
4 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA-Schritt erstellt zwei SAS-Testtabellen, 'work.somedata1' und 'work.somedata2', mit identischen Daten, die numerische Werte, eine Zeichenkette mit Anführungszeichen und Leerzeichen sowie einen speziellen fehlenden Wert enthalten.
Kopiert!
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 Codeblock
Macro Call Data
Erklärung :
Aufruf des Makros '%ms_testservice' zur Ausführung des Webdienstes 'sendObj'. Die Tabellen 'work.somedata1' und 'work.somedata2' werden als Eingabe übergeben. Die Dienstergebnisse werden in der Bibliothek 'testlib1' gespeichert.
Kopiert!
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 Codeblock
DATA STEP
Erklärung :
Diese beiden DATA _NULL_-Schritte überprüfen den Inhalt der vom Webdienst zurückgegebenen Tabellen ('testlib1.somedata1' und 'testlib1.somedata2'). Wenn die Daten den Erwartungen entsprechen (insbesondere die Umwandlung des fehlenden Wertes '.z' in das Zeichen 'Z'), werden die Makrovariablen 'test1' und 'test2' auf 'PASS' gesetzt.
Kopiert!
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 Codeblock
Macro Call
Erklärung :
Abschließende Aufrufe des Makros '%mp_assert', um die Ergebnisse der vorherigen Überprüfungen formal zu bestätigen. Wenn die Makrovariablen 'test1' und 'test2' auf 'PASS' stehen, gelten die Tests als erfolgreich.
Kopiert!
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)
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.
Urheberrechtsinformationen : Copyright-Informationen (HMS Analytical Software GmbH, SAS Institute Inc.) werden in Kommentaren gefunden, die auf andere Dateien verweisen.