54%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL
55 ,showmeta=N,maxobs=MAX,workobs=0
57%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name
58 sasjs_tables SYS_JES_JOB_URI _EXECUTIONTASKS;
59%
if %index(
"&_debug",log) %then %let _debug=128;
62%let action=%upcase(&action);
64%
if &action=FETCH %then %
do;
65 %
if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 128 %then %
do;
66 options mprint notes mprintnest;
69 %
if not %symexist(_webin_fileuri1) %then %
do;
70 %let _webin_file_count=%eval(&_webin_file_count+0);
71 %let _webin_fileuri1=&_webin_fileuri;
72 %let _webin_name1=&_webin_name;
73 %
if &_EXECUTIONTASKS=
true %then %
do;
76 %
if %upcase(&_webin_name)=_SASJS_NOOP %then %let _webin_file_count=0;
81 %
if %length(&sasjs_tables.X)>1 %then %
do;
84 %
do i=1 %to %sysfunc(countw(&sasjs_tables));
85 %let table=%scan(&sasjs_tables,&i,%str( ));
86 %
if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;
88 file
"%sysfunc(pathname(work))/&table..csv" recfm=n;
91 do i=1 to &&sasjs&i.data0;
92 if &&sasjs&i.data0=1 then line=symget(
"sasjs&i.data");
93 else line=symget(cats(
"sasjs&i.data",i));
94 if i=1 and substr(line,1,7)=
'%nrstr(' then
do;
98 if i=&&sasjs&i.data0 and nrflg=1 then
do;
99 line=substr(line,1,length(line)-1);
105 infile
"%sysfunc(pathname(work))/&table..csv" termstr=crlf ;
107 if _n_=1 then call symputx(
'input_statement',_infile_);
110 infile
"%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd
112 input &input_statement;
116 %
else %
do i=1 %to &_webin_file_count;
118 %
if &_EXECUTIONTASKS=
true %then %
do;
119 filename indata
"%sysfunc(pathname(&&_webin_fileref&i))" lrecl=999999;
122 filename indata filesrvc
"&&_webin_fileuri&i" lrecl=999999;
125 infile indata termstr=crlf lrecl=32767;
127 if _n_=1 then call symputx(
'input_statement',_infile_);
128 %
if %str(&_debug) ge 128 %then %
do;
129 if _n_<20 then putlog _infile_;
136 data &&_webin_name&i;
137 infile indata firstobs=2 dsd termstr=crlf ;
138 input &input_statement;
140 %let sasjs_tables=&sasjs_tables &&_webin_name&i;
143%
else %
if &action=OPEN %then %
do;
146 %
if "X&SYS_JES_JOB_URI.X"=
"XX" %then %
do;
147 filename _webout temp lrecl=999999 mod;
150 filename _webout filesrvc parenturi=
"&SYS_JES_JOB_URI"
151 name=
"_webout.json" lrecl=999999 mod;
155 %
if %upcase(&fref) ne _WEBOUT %then %
do;
156 filename &fref temp lrecl=999999 permission=
'A::u::rwx,A::g::rw-,A::o::---';
160 data _null_;file &fref;
161 %
if %str(&_debug) ge 128 and &_EXECUTIONTASKS=
true %then %
do;
162 put
'>>weboutBEGIN<<';
164 put
'{"SYSDATE" : "' "&SYSDATE" '"';
165 put
',"SYSTIME" : "' "&SYSTIME" '"';
168%
else %
if &action=ARR or &action=OBJ %then %
do;
169 %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref
170 ,engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs
173%
else %
if &action=CLOSE %then %
do;
174 %
if %str(&workobs) > 0 %then %
do;
176 data;run;%let tempds=%scan(&syslast,2,.);
177 ods output Members=&tempds;
178 proc datasets library=WORK memtype=data;
179 %local wtcnt;%let wtcnt=0;
182 if not (upcase(name) =:
"DATA");
184 call symputx(cats(
'wt',i),name,
'l');
185 call symputx(
'wtcnt',i,
'l');
186 data _null_; file &fref mod; put
",""WORK"":{";
189 data _null_; file &fref mod;
190 dsid=open(
"WORK.&wt",
'is');
191 nlobs=attrn(dsid,
'NLOBS');
192 nvars=attrn(dsid,
'NVARS');
194 if &i>1 then put
','@;
196 put
'"nlobs":' nlobs;
197 put
',"nvars":' nvars;
198 %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y
201 data _null_; file &fref mod;put
"}";
203 data _null_; file &fref mod;put
"}";run;
207 data _null_;file &fref mod;
208 length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;
209 put
",""_DEBUG"" : ""&_debug"" ";
210 _PROGRAM=quote(trim(resolve(symget(
'_PROGRAM'))));
211 put
',"_PROGRAM" : ' _PROGRAM ;
212 autoexec=quote(urlencode(trim(getoption(
'autoexec'))));
213 put
',"AUTOEXEC" : ' autoexec;
214 put
",""MF_GETUSER"" : ""%mf_getuser()"" ";
215 SYS_JES_JOB_URI=quote(trim(resolve(symget(
'SYS_JES_JOB_URI'))));
216 put
',"SYS_JES_JOB_URI" : ' SYS_JES_JOB_URI ;
217 put
",""SYSJOBID"" : ""&sysjobid"" ";
218 put
",""SYSCC"" : ""&syscc"" ";
219 syserrortext=cats(symget(
'syserrortext'));
220 if findc(syserrortext,
'"\'!!'0A0D09000E0F010210111A
'x) then do;
221 syserrortext='"'!!trim(
222 prxchange('s/"/\\
"/',-1, /* double quote */
223 prxchange('s/\x0A/\n/',-1, /* new line */
224 prxchange('s/\x0D/\r/',-1, /* carriage return */
225 prxchange('s/\x09/\\t/',-1, /* tab */
226 prxchange('s/\x00/\\u0000/',-1, /* NUL */
227 prxchange('s/\x0E/\\u000E/',-1, /* SS */
228 prxchange('s/\x0F/\\u000F/',-1, /* SF */
229 prxchange('s/\x01/\\u0001/',-1, /* SOH */
230 prxchange('s/\x02/\\u0002/',-1, /* STX */
231 prxchange('s/\x10/\\u0010/',-1, /* DLE */
232 prxchange('s/\x11/\\u0011/',-1, /* DC1 */
233 prxchange('s/\x1A/\\u001A/',-1, /* SUB */
234 prxchange('s/\\/\\\\/',-1,syserrortext)
237 else syserrortext=cats('"',syserrortext,'"');
238 put ',
"SYSERRORTEXT" :
' syserrortext;
239 put ",""SYSHOSTNAME"" : ""&syshostname"" ";
240 put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";
241 put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";
242 SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));
243 put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;
244 put ",""SYSJOBID"" : ""&sysjobid"" ";
245 put ",""SYSSCPL"" : ""&sysscpl"" ";
246 put ",""SYSSITE"" : ""&syssite"" ";
247 put ",""SYSUSERID"" : ""&sysuserid"" ";
248 sysvlong=quote(trim(symget('sysvlong
')));
249 put ',
"SYSVLONG" :
' sysvlong;
250 syswarningtext=cats(symget('syswarningtext
'));
251 if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
252 syswarningtext='"'!!trim(
253 prxchange('s/
"/\\"/
',-1, /* double quote */
254 prxchange('s/\x0A/\n/
',-1, /* new line */
255 prxchange('s/\x0D/\r/
',-1, /* carriage return */
256 prxchange('s/\x09/\\t/
',-1, /* tab */
257 prxchange('s/\x00/\\u0000/
',-1, /* NUL */
258 prxchange('s/\x0E/\\u000E/
',-1, /* SS */
259 prxchange('s/\x0F/\\u000F/
',-1, /* SF */
260 prxchange('s/\x01/\\u0001/
',-1, /* SOH */
261 prxchange('s/\x02/\\u0002/
',-1, /* STX */
262 prxchange('s/\x10/\\u0010/
',-1, /* DLE */
263 prxchange('s/\x11/\\u0011/
',-1, /* DC1 */
264 prxchange('s/\x1A/\\u001A/
',-1, /* SUB */
265 prxchange('s/\\/\\\\/
',-1,syswarningtext)
268 else syswarningtext=cats('"',syswarningtext,'"');
269 put ',"SYSWARNINGTEXT
" : ' syswarningtext;
270 put ',"END_DTTM
" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
272 memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)
";
273 memsize=quote(cats(memsize));
274 put ',"MEMSIZE
" : ' memsize;
276 %if %str(&_debug) ge 128 and &_EXECUTIONTASKS=true %then %do;
279 %if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;
280 data _null_; rc=fcopy("&fref
","_webout
");run;