1
0
mirror of https://github.com/sasjs/core.git synced 2026-06-08 20:10:20 +00:00

fix: issue with running jobs in viya2026 (all params must be strings)

This commit is contained in:
4gl
2026-05-14 17:29:26 +01:00
parent 5453b76fe6
commit 6c6c45b85c
4 changed files with 46 additions and 29 deletions
+2
View File
@@ -12,6 +12,8 @@
/* location in metadata or SAS Drive for temporary files */ /* location in metadata or SAS Drive for temporary files */
%let mcTestAppLoc=/Users/&sysuserid/testresults/sasjs_core/%mf_uid(); %let mcTestAppLoc=/Users/&sysuserid/testresults/sasjs_core/%mf_uid();
%let mcTestContext=SAS Job Execution compute context;
/* set defaults */ /* set defaults */
%mp_init() %mp_init()
+5 -5
View File
@@ -33,19 +33,19 @@ data _null_;
; ;
run; run;
%mv_createjob(path=/Public/temp,name=demo1,code=testprog) %mv_createjob(path=&mcTestAppLoc,name=demo1,code=testprog)
%mv_createjob(path=/Public/temp,name=demo2,code=testprog) %mv_createjob(path=&mcTestAppLoc,name=demo2,code=testprog)
data work.inputjobs; data work.inputjobs;
_contextName='SAS Job Execution compute context'; _contextName="&mcTestContext";
do flow_id=1 to 2; do flow_id=1 to 2;
do i=1 to 4; do i=1 to 4;
_program='/Public/temp/demo1'; _program="&mcTestAppLoc/demo1";
macrovar1=10*i; macrovar1=10*i;
macrovar2=4*i; macrovar2=4*i;
output; output;
i+1; i+1;
_program='/Public/temp/demo2'; _program="&mcTestAppLoc/demo2";
macrovar1=40*i; macrovar1=40*i;
macrovar2=44*i; macrovar2=44*i;
output; output;
+5 -5
View File
@@ -29,19 +29,19 @@ data _null_;
; ;
run; run;
%mv_createjob(path=/Public/temp,name=demo1,code=testprog) %mv_createjob(path=&mcTestAppLoc,name=demo1,code=testprog)
%mv_createjob(path=/Public/temp,name=demo2,code=testprog) %mv_createjob(path=&mcTestAppLoc,name=demo2,code=testprog)
data work.inputjobs; data work.inputjobs;
_contextName='SAS Job Execution compute context'; _contextName="&mcTestContext";
do flow_id=1 to 2; do flow_id=1 to 2;
do i=1 to 4; do i=1 to 4;
_program='/Public/temp/demo1'; _program="&mcTestAppLoc/demo1";
macrovar1=10*i; macrovar1=10*i;
macrovar2=4*i; macrovar2=4*i;
output; output;
i+1; i+1;
_program='/Public/temp/demo2'; _program="&mcTestAppLoc/demo2";
macrovar1=40*i; macrovar1=40*i;
macrovar2=44*i; macrovar2=44*i;
output; output;
+34 -19
View File
@@ -121,7 +121,7 @@
@li mf_nobs.sas @li mf_nobs.sas
@li mp_abort.sas @li mp_abort.sas
@li mf_getplatform.sas @li mf_getplatform.sas
@li mf_getuniquefileref.sas @li mf_getvarlist.sas
@li mf_existvarlist.sas @li mf_existvarlist.sas
@li mv_jobwaitfor.sas @li mv_jobwaitfor.sas
@li mv_jobexecute.sas @li mv_jobexecute.sas
@@ -234,14 +234,12 @@ data _null_;
if last then call symputx('flowcnt',cnt,'l'); if last then call symputx('flowcnt',cnt,'l');
run; run;
/* prepare temporary datasets and frefs */ /* prepare temporary datasets */
%local fid jid jds jjson jdsapp jdsrunning jdswaitfor jfref; %local fid jid jds jdsapp jdsrunning jdswaitfor;
data;run;%let jds=&syslast; data;run;%let jds=&syslast;
data;run;%let jjson=&syslast;
data;run;%let jdsapp=&syslast; data;run;%let jdsapp=&syslast;
data;run;%let jdsrunning=&syslast; data;run;%let jdsrunning=&syslast;
data;run;%let jdswaitfor=&syslast; data;run;%let jdswaitfor=&syslast;
%let jfref=%mf_getuniquefileref();
/* start loop */ /* start loop */
%do fid=1 %to &flowcnt; %do fid=1 %to &flowcnt;
@@ -259,23 +257,39 @@ data;run;%let jdswaitfor=&syslast;
&dbg. if _n_= 1 then putlog "Loop &fid"; &dbg. if _n_= 1 then putlog "Loop &fid";
&dbg. putlog (_all_)(=); &dbg. putlog (_all_)(=);
run; run;
/* build list of char and num vars in json format */
/* Viya 2026 expects all values to be strings */
%local nvars cvars ii _vnm;
%let cvars=%mf_getvarlist(&jds,typefilter=C);
%let nvars=%mf_getvarlist(&jds,typefilter=N);
%put exporting job variables in json format; %put exporting job variables in json format;
%do jid=1 %to &jcnt; %do jid=1 %to &jcnt;
data &jjson;
set &jds;
if _n_=&jid then do;
output;
stop;
end;
run;
proc json out=&jfref;
export &jjson / nosastags fmtnumeric;
run;
data _null_; data _null_;
infile &jfref lrecl=32767; set &jds;
input; if _n_=&jid;
jparams=cats('jparams',symget('jid')); length _param $32767;
call symputx(jparams,substr(_infile_,3,length(_infile_)-4)); _param='';
%if %length(&cvars)>0 %then %do ii=1 %to %sysfunc(countw(&cvars,%str( )));
%let _vnm=%scan(&cvars,&ii,%str( ));
if _param ne '' then _param=cats(_param,',');
_param=cats(_param,'"'
,"%lowcase(&_vnm)"
,'":'
,quote(trim(&_vnm))
);
%end;
%if %length(&nvars)>0 %then %do ii=1 %to %sysfunc(countw(&nvars,%str( )));
%let _vnm=%scan(&nvars,&ii,%str( ));
if _param ne '' then _param=cats(_param,',');
_param=cats(_param,'"'
,"%lowcase(&_vnm)"
,'":"'
,strip(put(&_vnm,best32.))
,'"'
);
%end;
call symputx(cats('jparams',&jid),_param,'l');
stop;
run; run;
%local jobuid&jid; %local jobuid&jid;
%let jobuid&jid=0; /* used in next loop */ %let jobuid&jid=0; /* used in next loop */
@@ -320,6 +334,7 @@ data;run;%let jdswaitfor=&syslast;
,paramstring=%superq(jparams&jid) ,paramstring=%superq(jparams&jid)
,outds=&jdsapp ,outds=&jdsapp
,contextname=&&context&jid ,contextname=&&context&jid
,mdebug=&mdebug
) )
data &jdsapp; data &jdsapp;
format jobparams $32767.; format jobparams $32767.;