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 ;
108 if _n_=1 then call symputx(
'input_statement'
109 ,prxchange(
's/:\$(?=[0-9 ])/:\$char/i',-1,_infile_)
113 infile
"%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd
115 input &input_statement;
119 %
else %
do i=1 %to &_webin_file_count;
121 %
if &_EXECUTIONTASKS=
true %then %
do;
122 filename indata
"%sysfunc(pathname(&&_webin_fileref&i))" lrecl=999999;
125 filename indata filesrvc
"&&_webin_fileuri&i" lrecl=999999;
128 infile indata termstr=crlf lrecl=32767;
131 if _n_=1 then call symputx(
'input_statement'
132 ,prxchange(
's/:\$(?=[0-9 ])/:\$char/i',-1,_infile_)
134 %
if %str(&_debug) ge 128 %then %
do;
135 if _n_<20 then putlog _infile_;
142 data &&_webin_name&i;
143 infile indata firstobs=2 dsd termstr=crlf ;
144 input &input_statement;
146 %let sasjs_tables=&sasjs_tables &&_webin_name&i;
149%
else %
if &action=OPEN %then %
do;
152 %
if "X&SYS_JES_JOB_URI.X"=
"XX" %then %
do;
153 filename _webout temp lrecl=999999 mod;
156 filename _webout filesrvc parenturi=
"&SYS_JES_JOB_URI"
157 name=
"_webout.json" lrecl=999999 mod;
161 %
if %upcase(&fref) ne _WEBOUT %then %
do;
162 filename &fref temp lrecl=999999 permission=
'A::u::rwx,A::g::rw-,A::o::---';
166 data _null_;file &fref;
167 %
if %str(&_debug) ge 128 and &_EXECUTIONTASKS=
true %then %
do;
168 put
'>>weboutBEGIN<<';
170 put
'{"SYSDATE" : "' "&SYSDATE" '"';
171 put
',"SYSTIME" : "' "&SYSTIME" '"';
174%
else %
if &action=ARR or &action=OBJ %then %
do;
175 %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref
176 ,engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs
179%
else %
if &action=CLOSE %then %
do;
180 %
if %str(&workobs) > 0 %then %
do;
182 data;run;%let tempds=%scan(&syslast,2,.);
183 ods output Members=&tempds;
184 proc datasets library=WORK memtype=data;
185 %local wtcnt;%let wtcnt=0;
188 if not (upcase(name) =:
"DATA");
190 call symputx(cats(
'wt',i),name,
'l');
191 call symputx(
'wtcnt',i,
'l');
192 data _null_; file &fref mod; put
",""WORK"":{";
195 data _null_; file &fref mod;
196 dsid=open(
"WORK.&wt",
'is');
197 nlobs=attrn(dsid,
'NLOBS');
198 nvars=attrn(dsid,
'NVARS');
200 if &i>1 then put
','@;
202 put
'"nlobs":' nlobs;
203 put
',"nvars":' nvars;
204 %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y
207 data _null_; file &fref mod;put
"}";
209 data _null_; file &fref mod;put
"}";run;
213 data _null_;file &fref mod;
214 length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;
215 put
",""_DEBUG"" : ""&_debug"" ";
216 _PROGRAM=quote(trim(resolve(symget(
'_PROGRAM'))));
217 put
',"_PROGRAM" : ' _PROGRAM ;
218 autoexec=quote(urlencode(trim(getoption(
'autoexec'))));
219 put
',"AUTOEXEC" : ' autoexec;
220 put
",""MF_GETUSER"" : ""%mf_getuser()"" ";
221 SYS_JES_JOB_URI=quote(trim(resolve(symget(
'SYS_JES_JOB_URI'))));
222 put
',"SYS_JES_JOB_URI" : ' SYS_JES_JOB_URI ;
223 put
",""SYSJOBID"" : ""&sysjobid"" ";
224 put
",""SYSCC"" : ""&syscc"" ";
225 syserrortext=cats(symget(
'syserrortext'));
226 if findc(syserrortext,
'"\'!!'0A0D09000E0F010210111A
'x) then do;
227 syserrortext='"'!!trim(
228 prxchange('s/"/\\
"/',-1, /* double quote */
229 prxchange('s/\x0A/\n/',-1, /* new line */
230 prxchange('s/\x0D/\r/',-1, /* carriage return */
231 prxchange('s/\x09/\\t/',-1, /* tab */
232 prxchange('s/\x00/\\u0000/',-1, /* NUL */
233 prxchange('s/\x0E/\\u000E/',-1, /* SS */
234 prxchange('s/\x0F/\\u000F/',-1, /* SF */
235 prxchange('s/\x01/\\u0001/',-1, /* SOH */
236 prxchange('s/\x02/\\u0002/',-1, /* STX */
237 prxchange('s/\x10/\\u0010/',-1, /* DLE */
238 prxchange('s/\x11/\\u0011/',-1, /* DC1 */
239 prxchange('s/\x1A/\\u001A/',-1, /* SUB */
240 prxchange('s/\\/\\\\/',-1,syserrortext)
243 else syserrortext=cats('"',syserrortext,'"');
244 put ',
"SYSERRORTEXT" :
' syserrortext;
245 put ",""SYSHOSTNAME"" : ""&syshostname"" ";
246 put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";
247 put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";
248 SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));
249 put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;
250 put ",""SYSJOBID"" : ""&sysjobid"" ";
251 put ",""SYSSCPL"" : ""&sysscpl"" ";
252 put ",""SYSSITE"" : ""&syssite"" ";
253 put ",""SYSUSERID"" : ""&sysuserid"" ";
254 sysvlong=quote(trim(symget('sysvlong
')));
255 put ',
"SYSVLONG" :
' sysvlong;
256 syswarningtext=cats(symget('syswarningtext
'));
257 if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
258 syswarningtext='"'!!trim(
259 prxchange('s/
"/\\"/
',-1, /* double quote */
260 prxchange('s/\x0A/\n/
',-1, /* new line */
261 prxchange('s/\x0D/\r/
',-1, /* carriage return */
262 prxchange('s/\x09/\\t/
',-1, /* tab */
263 prxchange('s/\x00/\\u0000/
',-1, /* NUL */
264 prxchange('s/\x0E/\\u000E/
',-1, /* SS */
265 prxchange('s/\x0F/\\u000F/
',-1, /* SF */
266 prxchange('s/\x01/\\u0001/
',-1, /* SOH */
267 prxchange('s/\x02/\\u0002/
',-1, /* STX */
268 prxchange('s/\x10/\\u0010/
',-1, /* DLE */
269 prxchange('s/\x11/\\u0011/
',-1, /* DC1 */
270 prxchange('s/\x1A/\\u001A/
',-1, /* SUB */
271 prxchange('s/\\/\\\\/
',-1,syswarningtext)
274 else syswarningtext=cats('"',syswarningtext,'"');
275 put ',"SYSWARNINGTEXT
" : ' syswarningtext;
276 put ',"END_DTTM
" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
278 memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)
";
279 memsize=quote(cats(memsize));
280 put ',"MEMSIZE
" : ' memsize;
282 %if %str(&_debug) ge 128 and &_EXECUTIONTASKS=true %then %do;
285 %if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;
286 data _null_; rc=fcopy("&fref
","_webout
");run;