mirror of
https://github.com/sasjs/core.git
synced 2026-01-05 00:20:05 +00:00
fix: updating all.sas
This commit is contained in:
217
all.sas
217
all.sas
@@ -39,7 +39,7 @@ options noquotelenmax;
|
|||||||
|
|
||||||
@version 9.2
|
@version 9.2
|
||||||
@author Allan Bowe
|
@author Allan Bowe
|
||||||
**/
|
**/ /** @cond */
|
||||||
|
|
||||||
%macro mf_abort(mac=mf_abort.sas, type=, msg=, iftrue=%str(1=1)
|
%macro mf_abort(mac=mf_abort.sas, type=, msg=, iftrue=%str(1=1)
|
||||||
)/*/STORE SOURCE*/;
|
)/*/STORE SOURCE*/;
|
||||||
@@ -157,7 +157,8 @@ options noquotelenmax;
|
|||||||
%abort cancel;
|
%abort cancel;
|
||||||
%end;
|
%end;
|
||||||
%mend;
|
%mend;
|
||||||
/**
|
|
||||||
|
/** @endcond *//**
|
||||||
@file mf_existds.sas
|
@file mf_existds.sas
|
||||||
@brief Checks whether a dataset OR a view exists.
|
@brief Checks whether a dataset OR a view exists.
|
||||||
@details Can be used in open code, eg as follows:
|
@details Can be used in open code, eg as follows:
|
||||||
@@ -183,7 +184,7 @@ options noquotelenmax;
|
|||||||
%else 1;
|
%else 1;
|
||||||
|
|
||||||
%mend;/**
|
%mend;/**
|
||||||
@file mf_existfeature.sas
|
@file
|
||||||
@brief Checks whether a feature exists
|
@brief Checks whether a feature exists
|
||||||
@details Check to see if a feature is supported in your environment.
|
@details Check to see if a feature is supported in your environment.
|
||||||
Run without arguments to see a list of detectable features.
|
Run without arguments to see a list of detectable features.
|
||||||
@@ -191,10 +192,10 @@ options noquotelenmax;
|
|||||||
actual feature detection, as that is tricky / impossible to do
|
actual feature detection, as that is tricky / impossible to do
|
||||||
without generating errors in most cases.
|
without generating errors in most cases.
|
||||||
|
|
||||||
%put %mf_existfeature(PROCLUA);
|
%put %mf_existfeature(PROCLUA);
|
||||||
|
|
||||||
@param feature the feature to detect. Leave blank to list all in log.
|
@param feature the feature to detect. Leave blank to list all in log.
|
||||||
|
|
||||||
@return output returns 1 or 0 (or -1 if not found)
|
@return output returns 1 or 0 (or -1 if not found)
|
||||||
|
|
||||||
<h4> Dependencies </h4>
|
<h4> Dependencies </h4>
|
||||||
@@ -203,7 +204,7 @@ options noquotelenmax;
|
|||||||
|
|
||||||
@version 8
|
@version 8
|
||||||
@author Allan Bowe
|
@author Allan Bowe
|
||||||
**/
|
**/ /** @cond */
|
||||||
|
|
||||||
%macro mf_existfeature(feature
|
%macro mf_existfeature(feature
|
||||||
)/*/STORE SOURCE*/;
|
)/*/STORE SOURCE*/;
|
||||||
@@ -223,7 +224,9 @@ options noquotelenmax;
|
|||||||
-1
|
-1
|
||||||
%put &sysmacroname: &feature not found;
|
%put &sysmacroname: &feature not found;
|
||||||
%end;
|
%end;
|
||||||
%mend;/**
|
%mend;
|
||||||
|
|
||||||
|
/** @endcond *//**
|
||||||
@file
|
@file
|
||||||
@brief Checks if a variable exists in a data set.
|
@brief Checks if a variable exists in a data set.
|
||||||
@details Returns 0 if the variable does NOT exist, and return the position of
|
@details Returns 0 if the variable does NOT exist, and return the position of
|
||||||
@@ -236,7 +239,7 @@ options noquotelenmax;
|
|||||||
@param var (positional) - variable name
|
@param var (positional) - variable name
|
||||||
@version 9.2
|
@version 9.2
|
||||||
@author Allan Bowe
|
@author Allan Bowe
|
||||||
**/
|
**/ /** @cond */
|
||||||
|
|
||||||
%macro mf_existvar(libds /* 2 part dataset name */
|
%macro mf_existvar(libds /* 2 part dataset name */
|
||||||
, var /* variable name */
|
, var /* variable name */
|
||||||
@@ -254,7 +257,9 @@ options noquotelenmax;
|
|||||||
%let rc=%sysfunc(close(&dsid));
|
%let rc=%sysfunc(close(&dsid));
|
||||||
%end;
|
%end;
|
||||||
|
|
||||||
%mend;/**
|
%mend;
|
||||||
|
|
||||||
|
/** @endcond *//**
|
||||||
@file
|
@file
|
||||||
@brief Checks if a set of variables ALL exist in a data set.
|
@brief Checks if a set of variables ALL exist in a data set.
|
||||||
@details Returns 0 if ANY of the variables do not exist, or 1 if they ALL do.
|
@details Returns 0 if ANY of the variables do not exist, or 1 if they ALL do.
|
||||||
@@ -399,7 +404,7 @@ options noquotelenmax;
|
|||||||
@version 9.2
|
@version 9.2
|
||||||
@author Allan Bowe
|
@author Allan Bowe
|
||||||
|
|
||||||
**/
|
**/ /** @cond */
|
||||||
|
|
||||||
%macro mf_getengine(libref
|
%macro mf_getengine(libref
|
||||||
)/*/STORE SOURCE*/;
|
)/*/STORE SOURCE*/;
|
||||||
@@ -419,7 +424,9 @@ options noquotelenmax;
|
|||||||
|
|
||||||
&engine
|
&engine
|
||||||
|
|
||||||
%mend;/**
|
%mend;
|
||||||
|
|
||||||
|
/** @endcond *//**
|
||||||
@file
|
@file
|
||||||
@brief Returns the size of a file in bytes.
|
@brief Returns the size of a file in bytes.
|
||||||
@details Provide full path/filename.extension to the file, eg:
|
@details Provide full path/filename.extension to the file, eg:
|
||||||
@@ -646,17 +653,18 @@ options noquotelenmax;
|
|||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
@brief Assigns and returns an unused fileref
|
@brief Assigns and returns an unused fileref
|
||||||
@details Use as follows:
|
@details
|
||||||
|
Use as follows:
|
||||||
|
|
||||||
%let fileref1=%mf_getuniquefileref();
|
%let fileref1=%mf_getuniquefileref();
|
||||||
%let fileref2=%mf_getuniquefileref();
|
%let fileref2=%mf_getuniquefileref();
|
||||||
%put &fileref1 &fileref2;
|
%put &fileref1 &fileref2;
|
||||||
|
|
||||||
which returns:
|
which returns:
|
||||||
|
|
||||||
> mcref0 mcref1
|
> mcref0 mcref1
|
||||||
|
|
||||||
@prefix= first part of fileref. Remember that filerefs can only be 8
|
@param prefix= first part of fileref. Remember that filerefs can only be 8
|
||||||
characters, so a 7 letter prefix would mean that `maxtries` should be 10.
|
characters, so a 7 letter prefix would mean that `maxtries` should be 10.
|
||||||
@param maxtries= the last part of the libref. Provide an integer value.
|
@param maxtries= the last part of the libref. Provide an integer value.
|
||||||
|
|
||||||
@@ -694,7 +702,7 @@ options noquotelenmax;
|
|||||||
|
|
||||||
> mclib3
|
> mclib3
|
||||||
|
|
||||||
@prefix= first part of libref. Remember that librefs can only be 8 characters,
|
@param prefix= first part of libref. Remember that librefs can only be 8 characters,
|
||||||
so a 7 letter prefix would mean that maxtries should be 10.
|
so a 7 letter prefix would mean that maxtries should be 10.
|
||||||
@param maxtries= the last part of the libref. Provide an integer value.
|
@param maxtries= the last part of the libref. Provide an integer value.
|
||||||
|
|
||||||
@@ -6041,15 +6049,15 @@ run;
|
|||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
%mm_createlibrary(
|
%mm_createlibrary(
|
||||||
libname=My New Library
|
libname=My New Library
|
||||||
,libref=mynewlib
|
,libref=mynewlib
|
||||||
,libdesc=Super & <fine>
|
,libdesc=Super & <fine>
|
||||||
,engine=BASE
|
,engine=BASE
|
||||||
,tree=/User Folders/sasdemo
|
,tree=/User Folders/sasdemo
|
||||||
,servercontext=SASApp
|
,servercontext=SASApp
|
||||||
,directory=/tmp/tests
|
,directory=/tmp/tests
|
||||||
,mDebug=1)
|
,mDebug=1)
|
||||||
|
|
||||||
<h4> Dependencies </h4>
|
<h4> Dependencies </h4>
|
||||||
@li mf_verifymacvars.sas
|
@li mf_verifymacvars.sas
|
||||||
@@ -8670,8 +8678,8 @@ filename __outdoc clear;
|
|||||||
combine with the <code>tree=</code> parameter.
|
combine with the <code>tree=</code> parameter.
|
||||||
@param outds= the dataset to create that contains the list of stps.
|
@param outds= the dataset to create that contains the list of stps.
|
||||||
@param mDebug= set to 1 to show debug messages in the log
|
@param mDebug= set to 1 to show debug messages in the log
|
||||||
@showDesc= provide a non blank value to return stored process descriptions
|
@param showDesc= provide a non blank value to return stored process descriptions
|
||||||
@showUsageVersion= provide a non blank value to return the UsageVersion. This
|
@param showUsageVersion= provide a non blank value to return the UsageVersion. This
|
||||||
is either 1000000 (type 1, 9.2) or 2000000 (type2, 9.3 onwards).
|
is either 1000000 (type 1, 9.2) or 2000000 (type2, 9.3 onwards).
|
||||||
|
|
||||||
@returns outds dataset containing the following columns
|
@returns outds dataset containing the following columns
|
||||||
@@ -9151,7 +9159,7 @@ libname _XML_ clear;
|
|||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
@brief Retrieves properties of the SAS web app server
|
@brief Retrieves properties of the SAS web app server
|
||||||
@details
|
@details
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
%mm_getwebappsrvprops(outds= some_ds)
|
%mm_getwebappsrvprops(outds= some_ds)
|
||||||
@@ -9171,8 +9179,7 @@ libname _XML_ clear;
|
|||||||
libname __shake clear;
|
libname __shake clear;
|
||||||
|
|
||||||
@version 9.4
|
@version 9.4
|
||||||
@author Allan Bowe
|
@author Allan Bowe https://github.com/sasjs/core
|
||||||
@source https://github.com/sasjs/core
|
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
@@ -11755,7 +11762,7 @@ libname &libref1 clear;
|
|||||||
%let &access_token_var=;
|
%let &access_token_var=;
|
||||||
%end;
|
%end;
|
||||||
%put &sysmacroname: grant_type=&grant_type;
|
%put &sysmacroname: grant_type=&grant_type;
|
||||||
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
|
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
|
||||||
and &grant_type ne sas_services
|
and &grant_type ne sas_services
|
||||||
)
|
)
|
||||||
,mac=&sysmacroname
|
,mac=&sysmacroname
|
||||||
@@ -11798,10 +11805,16 @@ options noquotelenmax;
|
|||||||
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
|
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
|
||||||
libname &libref1 JSON fileref=&fname1;
|
libname &libref1 JSON fileref=&fname1;
|
||||||
/* now get the followon link to list members */
|
/* now get the followon link to list members */
|
||||||
|
%local href;
|
||||||
|
%let href=0;
|
||||||
data _null_;
|
data _null_;
|
||||||
set &libref1..links;
|
set &libref1..links;
|
||||||
if rel='members' then call symputx('href',quote("&base_uri"!!trim(href)),'l');
|
if rel='members' then call symputx('href',quote("&base_uri"!!trim(href)),'l');
|
||||||
run;
|
run;
|
||||||
|
%if &href=0 %then %do;
|
||||||
|
%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;
|
||||||
|
%return;
|
||||||
|
%end;
|
||||||
%local fname2 libref2;
|
%local fname2 libref2;
|
||||||
%let fname2=%mf_getuniquefileref();
|
%let fname2=%mf_getuniquefileref();
|
||||||
%let libref2=%mf_getuniquelibref();
|
%let libref2=%mf_getuniquelibref();
|
||||||
@@ -12268,6 +12281,146 @@ run;
|
|||||||
filename &fname1 clear;
|
filename &fname1 clear;
|
||||||
libname &libref1 clear;
|
libname &libref1 clear;
|
||||||
|
|
||||||
|
%mend;/**
|
||||||
|
@file
|
||||||
|
@brief Executes a SAS Viya Job
|
||||||
|
@details Triggers a SAS Viya Job, with optional URL parameters, using
|
||||||
|
the JES web app.
|
||||||
|
|
||||||
|
First, compile the macros:
|
||||||
|
|
||||||
|
filename mc url
|
||||||
|
"https://raw.githubusercontent.com/sasjs/core/main/all.sas";
|
||||||
|
%inc mc;
|
||||||
|
|
||||||
|
Then, execute the job!
|
||||||
|
|
||||||
|
%mv_jobexecute(path=/Public/folder
|
||||||
|
,name=somejob
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@param access_token_var= The global macro variable to contain the access token
|
||||||
|
@param grant_type= valid values:
|
||||||
|
* password
|
||||||
|
* authorization_code
|
||||||
|
* detect - will check if access_token exists, if not will use sas_services if
|
||||||
|
a SASStudioV session else authorization_code. Default option.
|
||||||
|
* sas_services - will use oauth_bearer=sas_services
|
||||||
|
|
||||||
|
@param path= The SAS Drive path to the job being executed
|
||||||
|
@param name= The name of the job to execute
|
||||||
|
@param params= A macro quoted string to append to the URL
|
||||||
|
@param contextName= Context name with which to run the job.
|
||||||
|
Default = `SAS Job Execution compute context`
|
||||||
|
|
||||||
|
|
||||||
|
@version VIYA V.03.04
|
||||||
|
@author Allan Bowe, source: https://github.com/sasjs/core
|
||||||
|
|
||||||
|
<h4> Dependencies </h4>
|
||||||
|
@li mp_abort.sas
|
||||||
|
@li mf_getplatform.sas
|
||||||
|
@li mf_getuniquefileref.sas
|
||||||
|
@li mv_getfoldermembers.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mv_jobexecute(path=0
|
||||||
|
,name=0
|
||||||
|
,contextName=SAS Job Execution compute context
|
||||||
|
,access_token_var=ACCESS_TOKEN
|
||||||
|
,grant_type=sas_services
|
||||||
|
);
|
||||||
|
%local oauth_bearer;
|
||||||
|
%if &grant_type=detect %then %do;
|
||||||
|
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
|
||||||
|
%else %let grant_type=sas_services;
|
||||||
|
%end;
|
||||||
|
%if &grant_type=sas_services %then %do;
|
||||||
|
%let oauth_bearer=oauth_bearer=sas_services;
|
||||||
|
%let &access_token_var=;
|
||||||
|
%end;
|
||||||
|
%put &sysmacroname: grant_type=&grant_type;
|
||||||
|
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
|
||||||
|
and &grant_type ne sas_services
|
||||||
|
)
|
||||||
|
,mac=&sysmacroname
|
||||||
|
,msg=%str(Invalid value for grant_type: &grant_type)
|
||||||
|
)
|
||||||
|
|
||||||
|
%mp_abort(iftrue=("&path"="0")
|
||||||
|
,mac=&sysmacroname
|
||||||
|
,msg=%str(Path not provided)
|
||||||
|
)
|
||||||
|
%mp_abort(iftrue=("&name"="0")
|
||||||
|
,mac=&sysmacroname
|
||||||
|
,msg=%str(Job Name not provided)
|
||||||
|
)
|
||||||
|
|
||||||
|
options noquotelenmax;
|
||||||
|
|
||||||
|
%local base_uri; /* location of rest apis */
|
||||||
|
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
||||||
|
|
||||||
|
data;run;
|
||||||
|
%local foldermembers;
|
||||||
|
%let foldermembers=&syslast;
|
||||||
|
%mv_getfoldermembers(root=&path
|
||||||
|
,access_token_var=&access_token_var
|
||||||
|
,grant_type=&grant_type
|
||||||
|
,outds=&foldermembers
|
||||||
|
)
|
||||||
|
|
||||||
|
%local joburi;
|
||||||
|
%let joburi=0;
|
||||||
|
data _null_;
|
||||||
|
set &foldermembers;
|
||||||
|
if name="&name" and uri=:'/jobDefinitions/definitions'
|
||||||
|
then call symputx('joburi',uri);
|
||||||
|
run;
|
||||||
|
|
||||||
|
%mp_abort(iftrue=("&joburi"="0")
|
||||||
|
,mac=&sysmacroname
|
||||||
|
,msg=%str(Job &path/&name not found)
|
||||||
|
)
|
||||||
|
|
||||||
|
/* prepare request*/
|
||||||
|
%local fname0 fname1;
|
||||||
|
%let fname0=%mf_getuniquefileref();
|
||||||
|
%let fname1=%mf_getuniquefileref();
|
||||||
|
|
||||||
|
data _null_;
|
||||||
|
file &fname0;
|
||||||
|
put '{"jobDefinitionUri": "'@@;
|
||||||
|
put "&joburi"@@;
|
||||||
|
put '","arguments":{"_contextName":"'@@;
|
||||||
|
put "&contextName"@@;
|
||||||
|
put '"}}';
|
||||||
|
run;
|
||||||
|
|
||||||
|
proc http method='POST' in=&fname0 out=&fname1 &oauth_bearer
|
||||||
|
url="&base_uri/jobExecution/jobs";
|
||||||
|
headers "Content-Type"="application/vnd.sas.job.execution.job.request+json"
|
||||||
|
"Accept"="application/vnd.sas.job.execution.job+json"
|
||||||
|
%if &grant_type=authorization_code %then %do;
|
||||||
|
"Authorization"="Bearer &&&access_token_var"
|
||||||
|
%end;
|
||||||
|
;
|
||||||
|
run;
|
||||||
|
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
|
||||||
|
|
||||||
|
%mp_abort(iftrue=(
|
||||||
|
&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201
|
||||||
|
)
|
||||||
|
,mac=&sysmacroname
|
||||||
|
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
|
||||||
|
)
|
||||||
|
|
||||||
|
/* clear refs */
|
||||||
|
filename &fname0 clear;
|
||||||
|
filename &fname1 clear;
|
||||||
|
|
||||||
%mend;/**
|
%mend;/**
|
||||||
@file mv_registerclient.sas
|
@file mv_registerclient.sas
|
||||||
@brief Register Client and Secret (admin task)
|
@brief Register Client and Secret (admin task)
|
||||||
|
|||||||
Reference in New Issue
Block a user