From 83eea022404d736769e263692974090b787b5eb5 Mon Sep 17 00:00:00 2001
From: Allan Bowe <4420615+allanbowe@users.noreply.github.com>
Date: Tue, 17 May 2022 15:03:36 +0000
Subject: [PATCH] chore: updating all.sas
---
all.sas | 259 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 259 insertions(+)
diff --git a/all.sas b/all.sas
index 46ad7f6..a7ebd85 100644
--- a/all.sas
+++ b/all.sas
@@ -5647,6 +5647,11 @@ run;
%local vars;
%let vars=%upcase(%mf_getvarlist(&libds));
+%if %trim(X&vars)=X %then %do;
+ %put &sysmacroname: Table &libds has no columns!!;
+ %return;
+%end;
+
/* create the header row */
data _null_;
file &outref;
@@ -19485,6 +19490,155 @@ run;
options &optval;
%mend ms_createfile;
+/**
+ @file
+ @brief Creates a group on SASjs Server
+ @details Creates a group on SASjs Server with the following attributes:
+
+ @li name
+ @li description
+ @li isActive
+
+ Examples:
+
+ %ms_creategroup(mynewgroup)
+
+ %ms_creategroup(mynewergroup, desc=The group description)
+
+ @param [in] groupname The group name to create. No spaces or special chars.
+ @param [in] desc= (0) If no description provided, group name will be used.
+ @param [in] isactive= (true) Set to false to create an inactive group.
+ @param [in] mdebug= (0) Set to 1 to enable DEBUG messages
+ @param [out] outds= (work.ms_creategroup) This output dataset will contain the
+ values from the JSON response (such as the id of the new group)
+|DESCRIPTION:$1.|GROUPID:best.|ISACTIVE:best.|NAME:$11.|
+|---|---|---|---|
+|`The group description`|`2 `|`1 `|`mynewergroup `|
+
+
+
+
SAS Macros
+ @li mf_getuniquefileref.sas
+ @li mf_getuniquelibref.sas
+ @li mp_abort.sas
+
+ Related Files
+ @li ms_creategroup.test.sas
+ @li ms_getgroups.sas
+
+**/
+
+%macro ms_creategroup(groupname
+ ,desc=0
+ ,isactive=true
+ ,outds=work.ms_creategroup
+ ,mdebug=0
+ );
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_creategroup.sas
+ ,msg=%str(syscc=&syscc on macro entry)
+)
+
+%local fref0 fref1 fref2 libref optval rc msg;
+%let fref0=%mf_getuniquefileref();
+%let fref1=%mf_getuniquefileref();
+%let fref2=%mf_getuniquefileref();
+%let libref=%mf_getuniquelibref();
+
+/* avoid sending bom marker to API */
+%let optval=%sysfunc(getoption(bomfile));
+options nobomfile;
+
+data _null_;
+ file &fref0 termstr=crlf;
+ name=quote(cats(symget('groupname')));
+ description=quote(cats(symget('desc')));
+ if cats(description)='"0"' then description=name;
+ isactive=symget('isactive');
+%if &mdebug=1 %then %do;
+ putlog _all_;
+%end;
+
+ put '{'@;
+ put '"name":' name @;
+ put ',"description":' description @;
+ put ',"isActive":' isactive @;
+ put '}';
+run;
+
+data _null_;
+ file &fref1 lrecl=1000;
+ infile "&_sasjs_tokenfile" lrecl=1000;
+ input;
+ if _n_=1 then do;
+ put "Content-Type: application/json";
+ put "accept: application/json";
+ end;
+ put _infile_;
+run;
+
+%if &mdebug=1 %then %do;
+ data _null_;
+ infile &fref0;
+ input;
+ put _infile_;
+ data _null_;
+ infile &fref1;
+ input;
+ put _infile_;
+ run;
+%end;
+
+proc http method='POST' in=&fref0 headerin=&fref1 out=&fref2
+ url="&_sasjs_apiserverurl/SASjsApi/group";
+%if &mdebug=1 %then %do;
+ debug level=1;
+%end;
+run;
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_creategroup.sas
+ ,msg=%str(Issue submitting query to SASjsApi/group)
+)
+
+libname &libref JSON fileref=&fref2;
+
+data &outds;
+ set &libref..root;
+ drop ordinal_root;
+%if &mdebug=1 %then %do;
+ putlog _all_;
+%end;
+run;
+
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_creategroup.sas
+ ,msg=%str(Issue reading response JSON)
+)
+
+/* reset options */
+options &optval;
+
+%if &mdebug=0 %then %do;
+ filename &fref0 clear;
+ filename &fref1 clear;
+ filename &fref2 clear;
+ libname &libref clear;
+%end;
+%else %do;
+ data _null_;
+ infile &fref2;
+ input;
+ putlog _infile_;
+ run;
+%end;
+
+%mend ms_creategroup;
/**
@file
@brief Creates a user on SASjs Server
@@ -20266,6 +20420,111 @@ filename &binaryfref clear;
filename &headref clear;
%mend ms_getfile;/**
+ @file
+ @brief Fetches the list of groups from SASjs Server
+ @details Fetches the list of groups from SASjs Server and writes them to an
+ output dataset.
+
+ Example:
+
+ %ms_getgroups(outds=userlist)
+
+ @param [in] mdebug= (0) Set to 1 to enable DEBUG messages
+ @param [out] outds= (work.ms_getgroups) This output dataset will contain the
+ list of groups. Format:
+|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|
+|---|---|---|
+|`SomeGroup `|`A group `|`1`|
+|`Another Group`|`this is a different group`|`2`|
+|`admin`|`Administrators `|`3`|
+
+
+ SAS Macros
+ @li mf_getuniquefileref.sas
+ @li mf_getuniquelibref.sas
+ @li mp_abort.sas
+
+ Related Files
+ @li ms_creategroup.sas
+ @li ms_getusers.test.sas
+
+**/
+
+%macro ms_getgroups(
+ outds=work.ms_getgroups
+ ,mdebug=0
+ );
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_getusers.sas
+ ,msg=%str(syscc=&syscc on macro entry)
+)
+
+%local fref0 fref1 libref optval rc msg;
+%let fref0=%mf_getuniquefileref();
+%let fref1=%mf_getuniquefileref();
+%let libref=%mf_getuniquelibref();
+
+/* avoid sending bom marker to API */
+%let optval=%sysfunc(getoption(bomfile));
+options nobomfile;
+
+data _null_;
+ file &fref0 lrecl=1000;
+ infile "&_sasjs_tokenfile" lrecl=1000;
+ input;
+ if _n_=1 then put "accept: application/json";
+ put _infile_;
+run;
+
+%if &mdebug=1 %then %do;
+ data _null_;
+ infile &fref0;
+ input;
+ put _infile_;
+ run;
+%end;
+
+proc http method='GET' headerin=&fref0 out=&fref1
+ url="&_sasjs_apiserverurl/SASjsApi/group";
+%if &mdebug=1 %then %do;
+ debug level=1;
+%end;
+run;
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_getgroups.sas
+ ,msg=%str(Issue submitting GET query to SASjsApi/group)
+)
+
+libname &libref JSON fileref=&fref1;
+
+data &outds;
+ length NAME $32 DESCRIPTION $64. GROUPID 8;
+ if _n_=1 then call missing(of _all_);
+ set &libref..root;
+ drop ordinal_root;
+run;
+
+%mp_abort(
+ iftrue=(&syscc ne 0)
+ ,mac=ms_getusers.sas
+ ,msg=%str(Issue reading response JSON)
+)
+
+/* reset options */
+options &optval;
+
+%if &mdebug=1 %then %do;
+ filename &fref0 clear;
+ filename &fref1 clear;
+ libname &libref clear;
+%end;
+
+%mend ms_getgroups;
+/**
@file
@brief Fetches the list of users from SASjs Server
@details Fetches the list of users from SASjs Server and writes them to an