I found the solution following on this blog post.
https://communities.sas.com/t5/SAS-Programming/Macro-variable-not-getting-resolved-when-use-Call-execute/td-p/246980
And the final code is this one:
cas mySession sessopts=(caslib=casuser timeout=1800 locale="en_US");
caslib _all_ assign;
/* --- Begin Edit --- */
%let BASE_URI=%sysfunc(getoption(servicesbaseurl));
%put &base_uri.;
%let baseurl=xxxxxxxxxxx;
/* %let ppath=/Users/xxxxx@comp.com/My Folder/in_pdf/; */
%let ppath=/Public/ODAP_REPORTS/out_json_backup/;
filename myfldr filesrvc folderPath="&ppath.";
data filenames;
length fname $200;
did = dopen('myfldr');
do i = 1 to dnum(did);
fname = dread(did,i);
if index(lowcase(fname), 'json') then output;
end;
did = dclose(did);
keep fname;
run;
filename folders temp;
proc http
url = "https://xxxxxxxxx"
out= folders
oauth_bearer = sas_services;
headers
'Accept'= 'application/vnd.sas.collection+json';
run;
libname folders clear;
libname folders json;
%let hostname = xxxxxxxxxx;
%let endpoint = /folders/folders;
%let path = "/Public/ODAP_REPORTS" ;
%let output = "/out_json_backup";
%let currentDateTime = %sysfunc(datetime(), datetime20.);
%put ¤tDateTime;
/**********************************************************/
/* Retrieve the ID of the folder where the report resides */
/**********************************************************/
filename folders clear;
filename folders temp;
proc http
url = "&hostname.&endpoint/@item"
query = ("path"=&path)
out= folders
oauth_bearer = sas_services;
headers
'Accept'= 'application/vnd.sas.content.folder+json';
run;
/* libname folders clear; */
libname folders json;
/*************************************************/
/* Get a list of objects in that specific folder */
/*************************************************/
/* Identify the endpoint to be used */
proc sql ;
select href, type into :endpoint, :type
from folders.links
where method="GET" and rel = "members";
quit;
/* Retrieve the list of objects */
/* filename memList clear; */
filename memList temp;
proc http
url = "&hostname.%trim(&endpoint)"
out= memList
oauth_bearer = sas_services;
headers
"Accept"= "%trim(&type)+json";
run;
/* libname memList clear; */
libname memList json;
/******************************************************/
/* Extract report content (structure) for each report */
/******************************************************/
/* Macro to write the output to a json file */
/* %sysmacdelete writeJson; */
%macro writeJson(name, path);
filename outcsv FILESRVC FOLDERPATH="&ppath." FILENAME="_&name._¤tDateTime..json";
proc json out=outcsv nosastags pretty noscan ;
export casuser.info;
run;
%mend;
/* Macro to read the report content and generate the output file */
/* %sysmacdelete readReportContent; */
%macro readReportContent (url, name, path, endpoint, output);
filename f FILESRVC FOLDERPATH="&path." FILENAME="text.txt" lrecl=2000000;
/* filename f temp lrecl=2000000; */
proc http
url="&url.%trim(&endpoint)/content"
out=f
oauth_bearer=sas_services;
headers
"Accept"="application/vnd.sas.report.content+json";
quit;
%let n=60;
data casuser.info;
length report $128 path $1024 c1-c&n. varchar(32767) content varchar(2000000);
infile f lrecl=2000000 recfm=v truncover;
input (c1-c&n.) ($32767.);
content=cats(of c1-c&n.);
array c[*] c1-c&n. content;
report="&name";
path="&path";
drop c2-c&n.;
run;
data _null_;
pid=prxparse('/(?<=datemodified":")(.{19})/io');
format want $26. fecha datetime19.;
set casuser.info;
string=compress(substr(content, 1, 1000));
/* string=symget('inf'); */
put string=;
s=1;e=length(string);
call prxnext(pid,s,e,string,p,l);
do while(p>0);
want=catx(' ',want,substr(string,p+1,l));
want=tranwrd(want,'T', ' ');
fecha=input(want, anydtdtm.);
call prxnext(pid,s,e,string,p,l);
put string= want= p= l= fecha=;
if fecha then call symputx('_mod', fecha, 'G');
end;
run;
data filenames;
length fname $200;
did = dopen('myfldr');
do i = 1 to dnum(did);
fname = dread(did,i);
if index(lowcase(fname), 'json') then output;
end;
did = dclose(did);
keep fname;
run;
data _null_;
set WORK.FILENAMES;
where prxmatch("m/_&name/oi",fname);
retain valor;
valor=max(valor, floor(max(input(substr(fname, prxmatch("m/(?<=_)(\d{2}.*)(?=\.json)/oi",fname), 18), anydtdtm.))));
call symputx('_last', valor, 'G');
run;
%put &_mod. &_last. ;
%if %sysevalf(&_mod. > &_last.,boolean) %then %do;
%put "executed";
data _null_;
set casuser.info;
where path ne '';
location=tranwrd(path, "/", "_");
mcall=cat('%writeJson(', trim(report), ',', trim(location), ')');
call execute(mcall);
run;
%end;
%mend;
/* Generate a view containing information to call readReportContent */
proc sql;
create table merged as
select "&hostname" as url,
a.ordinal_items,
a. name,
a.uri,
b.href,
b.type ,
b.method
from memlist.items as a
left join memlist.items_links as b
on a.ordinal_items=b.ordinal_items
having a.contentType="report" and b.rel="getResource";
quit;
options mlogic;
data _null_ ;
set merged;
/* (obs=3 firstobs=3); */
out=&output;
path=&path;
call execute(cats(
'%nrstr(%%readReportContent)'
,'(url =',trim(url)
,',name =',trim(name)
,',path=',trim(path)
,',endpoint =',trim(href)
,',output=',trim(out)
,')'
));
run;
... View more