1
0
mirror of https://github.com/sasjs/core.git synced 2026-01-03 23:50:06 +00:00

Compare commits

...

5 Commits

12 changed files with 47 additions and 27 deletions

36
all.sas
View File

@@ -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 ('&#x0a;') rec='0A'x; when ('&#x0a;') rec='0A'x;
when ('&#x0d;') rec='0D'x; when ('&#x0d;') rec='0D'x;
when ('&#36;' ) rec='$' ; when ('&#36;' ) rec='$' ;
when ('&#x09;') 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 ('&#x0a;') rec='0A'x; when ('&#x0a;') rec='0A'x;
when ('&#x0d;') rec='0D'x; when ('&#x0d;') rec='0D'x;
when ('&#36;' ) rec='$' ; when ('&#36;' ) rec='$' ;
when ('&#x09;') 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 ('&#x0a;') rec='0A'x; when ('&#x0a;') rec='0A'x;
when ('&#x0d;') rec='0D'x; when ('&#x0d;') rec='0D'x;
when ('&#36;' ) rec='$' ; when ('&#36;' ) rec='$' ;
when ('&#x09;') 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

View File

@@ -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>

View File

@@ -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

View File

@@ -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>

View File

@@ -124,6 +124,7 @@ data _null_;
when ('&#x0a;') rec='0A'x; when ('&#x0a;') rec='0A'x;
when ('&#x0d;') rec='0D'x; when ('&#x0d;') rec='0D'x;
when ('&#36;' ) rec='$' ; when ('&#36;' ) rec='$' ;
when ('&#x09;') 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));

View File

@@ -123,6 +123,7 @@ data _null_;
when ('&#x0a;') rec='0A'x; when ('&#x0a;') rec='0A'x;
when ('&#x0d;') rec='0D'x; when ('&#x0d;') rec='0D'x;
when ('&#36;' ) rec='$' ; when ('&#36;' ) rec='$' ;
when ('&#x09;') 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));

View File

@@ -99,6 +99,7 @@ run;
when ('&#x0a;') rec='0A'x; when ('&#x0a;') rec='0A'x;
when ('&#x0d;') rec='0D'x; when ('&#x0d;') rec='0D'x;
when ('&#36;' ) rec='$' ; when ('&#36;' ) rec='$' ;
when ('&#x09;') 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));

View File

@@ -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"

View File

@@ -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;

View File

@@ -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).

View File

@@ -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();

View File

@@ -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