mirror of
https://github.com/sasjs/core.git
synced 2026-01-03 23:50:06 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b72f0ac94 | ||
|
|
3eae34d8b7 | ||
|
|
58358c916d | ||
|
|
578ef26cd5 | ||
|
|
33189743cd |
36
all.sas
36
all.sas
@@ -1299,7 +1299,7 @@ Usage:
|
|||||||
|
|
||||||
%put %mf_trimstr(/blah/,/); * /blah;
|
%put %mf_trimstr(/blah/,/); * /blah;
|
||||||
%put %mf_trimstr(/blah/,h); * /blah/;
|
%put %mf_trimstr(/blah/,h); * /blah/;
|
||||||
%put %mf_trimstr(/blah/,h/); */bla;
|
%put %mf_trimstr(/blah/,h/);* /bla;
|
||||||
|
|
||||||
<h4> Dependencies </h4>
|
<h4> Dependencies </h4>
|
||||||
|
|
||||||
@@ -1475,6 +1475,12 @@ Usage:
|
|||||||
the particulars of an environment. For instance, can stream custom
|
the particulars of an environment. For instance, can stream custom
|
||||||
results back to the client in an STP Web App context, or completely stop
|
results back to the client in an STP Web App context, or completely stop
|
||||||
in the case of a batch run.
|
in the case of a batch run.
|
||||||
|
|
||||||
|
Using SAS Abort Cancel mechanisms can cause hung sessions in some Stored Process
|
||||||
|
environments. This macro takes a unique approach - we set the SAS syscc to 0,
|
||||||
|
run `stpsrvset('program error', 0)` (if SAS 9) and then - we open a macro
|
||||||
|
but don't close it! This provides a graceful abort for SAS web services in all
|
||||||
|
web enabled environments.
|
||||||
|
|
||||||
@param mac= to contain the name of the calling macro
|
@param mac= to contain the name of the calling macro
|
||||||
@param msg= message to be returned
|
@param msg= message to be returned
|
||||||
@@ -7082,6 +7088,7 @@ data _null_;
|
|||||||
when ('
') rec='0A'x;
|
when ('
') rec='0A'x;
|
||||||
when ('
') rec='0D'x;
|
when ('
') rec='0D'x;
|
||||||
when ('$' ) rec='$' ;
|
when ('$' ) rec='$' ;
|
||||||
|
when ('	') rec='09'x;
|
||||||
otherwise putlog "WARNING: missing value for " entity=;
|
otherwise putlog "WARNING: missing value for " entity=;
|
||||||
end;
|
end;
|
||||||
rc =fput(fileid, substr(rec,1,1));
|
rc =fput(fileid, substr(rec,1,1));
|
||||||
@@ -7996,6 +8003,7 @@ data _null_;
|
|||||||
when ('
') rec='0A'x;
|
when ('
') rec='0A'x;
|
||||||
when ('
') rec='0D'x;
|
when ('
') rec='0D'x;
|
||||||
when ('$' ) rec='$' ;
|
when ('$' ) rec='$' ;
|
||||||
|
when ('	') rec='09'x;
|
||||||
otherwise putlog "%str(WARN)ING: missing value for " entity=;
|
otherwise putlog "%str(WARN)ING: missing value for " entity=;
|
||||||
end;
|
end;
|
||||||
rc =fput(fileid, substr(rec,1,1));
|
rc =fput(fileid, substr(rec,1,1));
|
||||||
@@ -8630,6 +8638,7 @@ run;
|
|||||||
when ('
') rec='0A'x;
|
when ('
') rec='0A'x;
|
||||||
when ('
') rec='0D'x;
|
when ('
') rec='0D'x;
|
||||||
when ('$' ) rec='$' ;
|
when ('$' ) rec='$' ;
|
||||||
|
when ('	') rec='09'x;
|
||||||
otherwise putlog "WARNING: missing value for " entity=;
|
otherwise putlog "WARNING: missing value for " entity=;
|
||||||
end;
|
end;
|
||||||
rc =fput(fileid, substr(rec,1,1));
|
rc =fput(fileid, substr(rec,1,1));
|
||||||
@@ -10594,7 +10603,7 @@ run;
|
|||||||
libname &libref1 JSON fileref=&fname1;
|
libname &libref1 JSON fileref=&fname1;
|
||||||
data _null_;
|
data _null_;
|
||||||
set &libref1..links;
|
set &libref1..links;
|
||||||
if rel='members' then call symputx('mref',quote(trim(href)),'l');
|
if rel='members' then call symputx('mref',quote("&base_uri"!!trim(href)),'l');
|
||||||
run;
|
run;
|
||||||
|
|
||||||
/* get the children */
|
/* get the children */
|
||||||
@@ -10624,7 +10633,7 @@ run;
|
|||||||
%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;
|
%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;
|
||||||
%return;
|
%return;
|
||||||
%end;
|
%end;
|
||||||
proc http method="DELETE" url="&uri" &oauth_bearer;
|
proc http method="DELETE" url="&base_uri&uri" &oauth_bearer;
|
||||||
headers
|
headers
|
||||||
%if &grant_type=authorization_code %then %do;
|
%if &grant_type=authorization_code %then %do;
|
||||||
"Authorization"="Bearer &&&access_token_var"
|
"Authorization"="Bearer &&&access_token_var"
|
||||||
@@ -10883,9 +10892,9 @@ libname &libref1 JSON fileref=&fname1;
|
|||||||
data _null_;
|
data _null_;
|
||||||
set &libref1..links;
|
set &libref1..links;
|
||||||
if rel='deleteRecursively' then
|
if rel='deleteRecursively' then
|
||||||
call symputx('href',quote(trim(href)),'l');
|
call symputx('href',quote("&base_uri"!!trim(href)),'l');
|
||||||
else if rel='members' then
|
else if rel='members' then
|
||||||
call symputx('mref',quote(cats(href,'?recursive=true')),'l');
|
call symputx('mref',quote(cats("&base_uri",href,'?recursive=true')),'l');
|
||||||
run;
|
run;
|
||||||
|
|
||||||
/* before we can delete the folder, we need to delete the children */
|
/* before we can delete the folder, we need to delete the children */
|
||||||
@@ -10906,7 +10915,7 @@ data _null_;
|
|||||||
set &libref1a..items_links;
|
set &libref1a..items_links;
|
||||||
if href=:'/folders/folders' then return;
|
if href=:'/folders/folders' then return;
|
||||||
if rel='deleteResource' then
|
if rel='deleteResource' then
|
||||||
call execute('proc http method="DELETE" url='!!quote(trim(href))
|
call execute('proc http method="DELETE" url='!!quote("&base_uri"!!trim(href))
|
||||||
!!'; headers "Authorization"="Bearer &&&access_token_var" '
|
!!'; headers "Authorization"="Bearer &&&access_token_var" '
|
||||||
!!' "Accept"="*/*";run; /**/');
|
!!' "Accept"="*/*";run; /**/');
|
||||||
run;
|
run;
|
||||||
@@ -10991,8 +11000,8 @@ libname &libref1 clear;
|
|||||||
)
|
)
|
||||||
|
|
||||||
%mend;/**
|
%mend;/**
|
||||||
@file mv_getgroups.sas
|
@file mv_getclients.sas
|
||||||
@brief Creates a dataset with a list of viya groups
|
@brief Get a list of Viya Clients
|
||||||
@details First, be sure you have an access token (which requires an app token).
|
@details First, be sure you have an access token (which requires an app token).
|
||||||
|
|
||||||
Using the macros here:
|
Using the macros here:
|
||||||
@@ -11012,7 +11021,7 @@ libname &libref1 clear;
|
|||||||
|
|
||||||
Now we can run the macro!
|
Now we can run the macro!
|
||||||
|
|
||||||
%mv_getgroups()
|
%mv_getclients()
|
||||||
|
|
||||||
@param access_token_var= The global macro variable to contain the access token
|
@param access_token_var= The global macro variable to contain the access token
|
||||||
@param grant_type= valid values are "password" or "authorization_code" (unquoted).
|
@param grant_type= valid values are "password" or "authorization_code" (unquoted).
|
||||||
@@ -11157,7 +11166,7 @@ options noquotelenmax;
|
|||||||
%if "&root"="/" %then %do;
|
%if "&root"="/" %then %do;
|
||||||
/* if root just list root folders */
|
/* if root just list root folders */
|
||||||
proc http method='GET' out=&fname1 &oauth_bearer
|
proc http method='GET' out=&fname1 &oauth_bearer
|
||||||
url='%sysfunc(getoption(servicesbaseurl))/folders/rootFolders';
|
url="&base_uri/folders/rootFolders";
|
||||||
%if &grant_type=authorization_code %then %do;
|
%if &grant_type=authorization_code %then %do;
|
||||||
headers "Authorization"="Bearer &&&access_token_var";
|
headers "Authorization"="Bearer &&&access_token_var";
|
||||||
%end;
|
%end;
|
||||||
@@ -11180,7 +11189,7 @@ options noquotelenmax;
|
|||||||
/* now get the followon link to list members */
|
/* now get the followon link to list members */
|
||||||
data _null_;
|
data _null_;
|
||||||
set &libref1..links;
|
set &libref1..links;
|
||||||
if rel='members' then call symputx('href',quote(trim(href)),'l');
|
if rel='members' then call symputx('href',quote("&base_uri"!!trim(href)),'l');
|
||||||
run;
|
run;
|
||||||
%local fname2 libref2;
|
%local fname2 libref2;
|
||||||
%let fname2=%mf_getuniquefileref();
|
%let fname2=%mf_getuniquefileref();
|
||||||
@@ -11932,6 +11941,7 @@ libname &libref clear;
|
|||||||
@param pass= If grant_type=password then provide the password here
|
@param pass= If grant_type=password then provide the password here
|
||||||
@param access_token_var= The global macro variable to contain the access token
|
@param access_token_var= The global macro variable to contain the access token
|
||||||
@param refresh_token_var= The global macro variable to contain the refresh token
|
@param refresh_token_var= The global macro variable to contain the refresh token
|
||||||
|
@param base_uri= The Viya API server location
|
||||||
|
|
||||||
@version VIYA V.03.04
|
@version VIYA V.03.04
|
||||||
@author Allan Bowe
|
@author Allan Bowe
|
||||||
@@ -11956,6 +11966,7 @@ libname &libref clear;
|
|||||||
,pass=
|
,pass=
|
||||||
,access_token_var=ACCESS_TOKEN
|
,access_token_var=ACCESS_TOKEN
|
||||||
,refresh_token_var=REFRESH_TOKEN
|
,refresh_token_var=REFRESH_TOKEN
|
||||||
|
,base_uri=#NOTSET#
|
||||||
);
|
);
|
||||||
%global &access_token_var &refresh_token_var;
|
%global &access_token_var &refresh_token_var;
|
||||||
|
|
||||||
@@ -12002,8 +12013,7 @@ run;
|
|||||||
/**
|
/**
|
||||||
* Request access token
|
* Request access token
|
||||||
*/
|
*/
|
||||||
%local base_uri; /* location of rest apis */
|
%if &base_uri=#NOTSET# %then %let base_uri=%mf_getplatform(VIYARESTAPI);
|
||||||
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
|
||||||
|
|
||||||
%let fref2=%mf_getuniquefileref();
|
%let fref2=%mf_getuniquefileref();
|
||||||
proc http method='POST' in=&grantstring out=&fref2
|
proc http method='POST' in=&grantstring out=&fref2
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
%put %mf_trimstr(/blah/,/); * /blah;
|
%put %mf_trimstr(/blah/,/); * /blah;
|
||||||
%put %mf_trimstr(/blah/,h); * /blah/;
|
%put %mf_trimstr(/blah/,h); * /blah/;
|
||||||
%put %mf_trimstr(/blah/,h/); */bla;
|
%put %mf_trimstr(/blah/,h/);* /bla;
|
||||||
|
|
||||||
<h4> Dependencies </h4>
|
<h4> Dependencies </h4>
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,12 @@
|
|||||||
the particulars of an environment. For instance, can stream custom
|
the particulars of an environment. For instance, can stream custom
|
||||||
results back to the client in an STP Web App context, or completely stop
|
results back to the client in an STP Web App context, or completely stop
|
||||||
in the case of a batch run.
|
in the case of a batch run.
|
||||||
|
|
||||||
|
Using SAS Abort Cancel mechanisms can cause hung sessions in some Stored Process
|
||||||
|
environments. This macro takes a unique approach - we set the SAS syscc to 0,
|
||||||
|
run `stpsrvset('program error', 0)` (if SAS 9) and then - we open a macro
|
||||||
|
but don't close it! This provides a graceful abort for SAS web services in all
|
||||||
|
web enabled environments.
|
||||||
|
|
||||||
@param mac= to contain the name of the calling macro
|
@param mac= to contain the name of the calling macro
|
||||||
@param msg= message to be returned
|
@param msg= message to be returned
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<tab type="classmembers" visible="no" title="" intro=""/>
|
<tab type="classmembers" visible="no" title="" intro=""/>
|
||||||
</tab>
|
</tab>
|
||||||
|
|
||||||
<tab type="filelist" visible="yes" title="" intro="List of Files Used in the Macro Core Library"/>
|
<tab type="filelist" visible="yes" title="" intro="List of Files Used in the Macro-Core Library"/>
|
||||||
|
|
||||||
<tab type="examples" visible="yes" title="" intro=""/>
|
<tab type="examples" visible="yes" title="" intro=""/>
|
||||||
</navindex>
|
</navindex>
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ data _null_;
|
|||||||
when ('
') rec='0A'x;
|
when ('
') rec='0A'x;
|
||||||
when ('
') rec='0D'x;
|
when ('
') rec='0D'x;
|
||||||
when ('$' ) rec='$' ;
|
when ('$' ) rec='$' ;
|
||||||
|
when ('	') rec='09'x;
|
||||||
otherwise putlog "WARNING: missing value for " entity=;
|
otherwise putlog "WARNING: missing value for " entity=;
|
||||||
end;
|
end;
|
||||||
rc =fput(fileid, substr(rec,1,1));
|
rc =fput(fileid, substr(rec,1,1));
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ data _null_;
|
|||||||
when ('
') rec='0A'x;
|
when ('
') rec='0A'x;
|
||||||
when ('
') rec='0D'x;
|
when ('
') rec='0D'x;
|
||||||
when ('$' ) rec='$' ;
|
when ('$' ) rec='$' ;
|
||||||
|
when ('	') rec='09'x;
|
||||||
otherwise putlog "%str(WARN)ING: missing value for " entity=;
|
otherwise putlog "%str(WARN)ING: missing value for " entity=;
|
||||||
end;
|
end;
|
||||||
rc =fput(fileid, substr(rec,1,1));
|
rc =fput(fileid, substr(rec,1,1));
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ run;
|
|||||||
when ('
') rec='0A'x;
|
when ('
') rec='0A'x;
|
||||||
when ('
') rec='0D'x;
|
when ('
') rec='0D'x;
|
||||||
when ('$' ) rec='$' ;
|
when ('$' ) rec='$' ;
|
||||||
|
when ('	') rec='09'x;
|
||||||
otherwise putlog "WARNING: missing value for " entity=;
|
otherwise putlog "WARNING: missing value for " entity=;
|
||||||
end;
|
end;
|
||||||
rc =fput(fileid, substr(rec,1,1));
|
rc =fput(fileid, substr(rec,1,1));
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ run;
|
|||||||
libname &libref1 JSON fileref=&fname1;
|
libname &libref1 JSON fileref=&fname1;
|
||||||
data _null_;
|
data _null_;
|
||||||
set &libref1..links;
|
set &libref1..links;
|
||||||
if rel='members' then call symputx('mref',quote(trim(href)),'l');
|
if rel='members' then call symputx('mref',quote("&base_uri"!!trim(href)),'l');
|
||||||
run;
|
run;
|
||||||
|
|
||||||
/* get the children */
|
/* get the children */
|
||||||
@@ -128,7 +128,7 @@ run;
|
|||||||
%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;
|
%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;
|
||||||
%return;
|
%return;
|
||||||
%end;
|
%end;
|
||||||
proc http method="DELETE" url="&uri" &oauth_bearer;
|
proc http method="DELETE" url="&base_uri&uri" &oauth_bearer;
|
||||||
headers
|
headers
|
||||||
%if &grant_type=authorization_code %then %do;
|
%if &grant_type=authorization_code %then %do;
|
||||||
"Authorization"="Bearer &&&access_token_var"
|
"Authorization"="Bearer &&&access_token_var"
|
||||||
|
|||||||
@@ -88,9 +88,9 @@ libname &libref1 JSON fileref=&fname1;
|
|||||||
data _null_;
|
data _null_;
|
||||||
set &libref1..links;
|
set &libref1..links;
|
||||||
if rel='deleteRecursively' then
|
if rel='deleteRecursively' then
|
||||||
call symputx('href',quote(trim(href)),'l');
|
call symputx('href',quote("&base_uri"!!trim(href)),'l');
|
||||||
else if rel='members' then
|
else if rel='members' then
|
||||||
call symputx('mref',quote(cats(href,'?recursive=true')),'l');
|
call symputx('mref',quote(cats("&base_uri",href,'?recursive=true')),'l');
|
||||||
run;
|
run;
|
||||||
|
|
||||||
/* before we can delete the folder, we need to delete the children */
|
/* before we can delete the folder, we need to delete the children */
|
||||||
@@ -111,7 +111,7 @@ data _null_;
|
|||||||
set &libref1a..items_links;
|
set &libref1a..items_links;
|
||||||
if href=:'/folders/folders' then return;
|
if href=:'/folders/folders' then return;
|
||||||
if rel='deleteResource' then
|
if rel='deleteResource' then
|
||||||
call execute('proc http method="DELETE" url='!!quote(trim(href))
|
call execute('proc http method="DELETE" url='!!quote("&base_uri"!!trim(href))
|
||||||
!!'; headers "Authorization"="Bearer &&&access_token_var" '
|
!!'; headers "Authorization"="Bearer &&&access_token_var" '
|
||||||
!!' "Accept"="*/*";run; /**/');
|
!!' "Accept"="*/*";run; /**/');
|
||||||
run;
|
run;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
@file mv_getgroups.sas
|
@file mv_getclients.sas
|
||||||
@brief Creates a dataset with a list of viya groups
|
@brief Get a list of Viya Clients
|
||||||
@details First, be sure you have an access token (which requires an app token).
|
@details First, be sure you have an access token (which requires an app token).
|
||||||
|
|
||||||
Using the macros here:
|
Using the macros here:
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
Now we can run the macro!
|
Now we can run the macro!
|
||||||
|
|
||||||
%mv_getgroups()
|
%mv_getclients()
|
||||||
|
|
||||||
@param access_token_var= The global macro variable to contain the access token
|
@param access_token_var= The global macro variable to contain the access token
|
||||||
@param grant_type= valid values are "password" or "authorization_code" (unquoted).
|
@param grant_type= valid values are "password" or "authorization_code" (unquoted).
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ options noquotelenmax;
|
|||||||
%if "&root"="/" %then %do;
|
%if "&root"="/" %then %do;
|
||||||
/* if root just list root folders */
|
/* if root just list root folders */
|
||||||
proc http method='GET' out=&fname1 &oauth_bearer
|
proc http method='GET' out=&fname1 &oauth_bearer
|
||||||
url='%sysfunc(getoption(servicesbaseurl))/folders/rootFolders';
|
url="&base_uri/folders/rootFolders";
|
||||||
%if &grant_type=authorization_code %then %do;
|
%if &grant_type=authorization_code %then %do;
|
||||||
headers "Authorization"="Bearer &&&access_token_var";
|
headers "Authorization"="Bearer &&&access_token_var";
|
||||||
%end;
|
%end;
|
||||||
@@ -87,7 +87,7 @@ options noquotelenmax;
|
|||||||
/* now get the followon link to list members */
|
/* now get the followon link to list members */
|
||||||
data _null_;
|
data _null_;
|
||||||
set &libref1..links;
|
set &libref1..links;
|
||||||
if rel='members' then call symputx('href',quote(trim(href)),'l');
|
if rel='members' then call symputx('href',quote("&base_uri"!!trim(href)),'l');
|
||||||
run;
|
run;
|
||||||
%local fname2 libref2;
|
%local fname2 libref2;
|
||||||
%let fname2=%mf_getuniquefileref();
|
%let fname2=%mf_getuniquefileref();
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
@param pass= If grant_type=password then provide the password here
|
@param pass= If grant_type=password then provide the password here
|
||||||
@param access_token_var= The global macro variable to contain the access token
|
@param access_token_var= The global macro variable to contain the access token
|
||||||
@param refresh_token_var= The global macro variable to contain the refresh token
|
@param refresh_token_var= The global macro variable to contain the refresh token
|
||||||
|
@param base_uri= The Viya API server location
|
||||||
|
|
||||||
@version VIYA V.03.04
|
@version VIYA V.03.04
|
||||||
@author Allan Bowe
|
@author Allan Bowe
|
||||||
@@ -62,6 +63,7 @@
|
|||||||
,pass=
|
,pass=
|
||||||
,access_token_var=ACCESS_TOKEN
|
,access_token_var=ACCESS_TOKEN
|
||||||
,refresh_token_var=REFRESH_TOKEN
|
,refresh_token_var=REFRESH_TOKEN
|
||||||
|
,base_uri=#NOTSET#
|
||||||
);
|
);
|
||||||
%global &access_token_var &refresh_token_var;
|
%global &access_token_var &refresh_token_var;
|
||||||
|
|
||||||
@@ -108,8 +110,7 @@ run;
|
|||||||
/**
|
/**
|
||||||
* Request access token
|
* Request access token
|
||||||
*/
|
*/
|
||||||
%local base_uri; /* location of rest apis */
|
%if &base_uri=#NOTSET# %then %let base_uri=%mf_getplatform(VIYARESTAPI);
|
||||||
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
|
||||||
|
|
||||||
%let fref2=%mf_getuniquefileref();
|
%let fref2=%mf_getuniquefileref();
|
||||||
proc http method='POST' in=&grantstring out=&fref2
|
proc http method='POST' in=&grantstring out=&fref2
|
||||||
|
|||||||
Reference in New Issue
Block a user