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

Compare commits

...

8 Commits

Author SHA1 Message Date
Allan Bowe
54a24ced83 fix: using sasjs username in mf_getuser() 2022-06-17 15:54:30 +00:00
Allan Bowe
57ae2981f1 Merge pull request #256 from sasjs/allanbowe/mp-abort-fails-on-windows-254
fix: superq() for sysprocessname
2022-06-17 15:29:22 +02:00
Allan Bowe
a3043ac685 fix: superq() for sysprocessname 2022-06-17 13:28:51 +00:00
Allan Bowe
2bdb90b0be Merge pull request #255 from sasjs/allanbowe/mp-abort-fails-on-windows-254
fix: handling embedded speechmarks in SYSPROCESSNAME.  Closes #254
2022-06-17 14:32:02 +02:00
Allan Bowe
2cd846d504 fix: handling embedded speechmarks in SYSPROCESSNAME. Closes #254 2022-06-17 12:30:40 +00:00
Allan Bowe
f593c7bec9 fix: returning user list (single user) in desktop mode in ms_getusers() 2022-06-17 07:52:39 +00:00
Allan Bowe
c8805db0b5 feat: filter for groups by user id in ms_getgroups 2022-06-17 07:46:51 +00:00
Allan Bowe
1eb6d8cec9 feat: enabling user list by group id as well as name 2022-06-17 07:16:57 +00:00
8 changed files with 148 additions and 88 deletions

118
all.sas
View File

@@ -1141,18 +1141,19 @@ or %index(&pgm,/tests/testteardown)
@author Allan Bowe @author Allan Bowe
**/ **/
%macro mf_getuser(type=META %macro mf_getuser(
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
%local user metavar; %local user;
%if &type=OS %then %let metavar=_secureusername;
%else %let metavar=_metaperson;
%if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username;
%else %if %symexist(&metavar) %then %do; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;
%if %length(&&&metavar)=0 %then %let user=&sysuserid; %let user=&SYS_COMPUTE_SESSION_OWNER;
%end;
%else %if %symexist(_metaperson) %then %do;
%if %length(&_metaperson)=0 %then %let user=&sysuserid;
/* sometimes SAS will add @domain extension - remove for consistency */ /* sometimes SAS will add @domain extension - remove for consistency */
/* but be sure to quote in case of usernames with commas */ /* but be sure to quote in case of usernames with commas */
%else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); %else %let user=%unquote(%scan(%quote(&_metaperson),1,@));
%end; %end;
%else %let user=&sysuserid; %else %let user=&sysuserid;
@@ -2256,7 +2257,7 @@ Usage:
%if %symexist(_SYSINCLUDEFILEDEVICE) %if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */ /* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and "&SYSPROCESSNAME " ne "Compute Server " and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do; %then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do; %if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds; data &errds;
@@ -2274,7 +2275,7 @@ Usage:
/* Web App Context */ /* Web App Context */
%if %symexist(_PROGRAM) %if %symexist(_PROGRAM)
or "&SYSPROCESSNAME "="Compute Server " or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE or &mode=INCLUDE
%then %do; %then %do;
options obs=max replace mprint; options obs=max replace mprint;
@@ -15243,18 +15244,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';
@@ -19952,18 +19954,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';
@@ -20278,12 +20281,17 @@ filename &headref clear;
%ms_getgroups(outds=userlist) %ms_getgroups(outds=userlist)
With filter: With filter on username:
%ms_getgroups(outds=userlist, user=James) %ms_getgroups(outds=userlist, user=James)
With filter on userid:
%ms_getgroups(outds=userlist, uid=1)
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages @param [in] mdebug= (0) Set to 1 to enable DEBUG messages
@param [in] user= (0) Provide the username on which to filter @param [in] user= (0) Provide the username on which to filter
@param [in] uid= (0) Provide the userid on which to filter
@param [out] outds= (work.ms_getgroups) This output dataset will contain the @param [out] outds= (work.ms_getgroups) This output dataset will contain the
list of groups. Format: list of groups. Format:
|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.| |NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|
@@ -20306,6 +20314,7 @@ filename &headref clear;
%macro ms_getgroups( %macro ms_getgroups(
user=0, user=0,
uid=0,
outds=work.ms_getgroups, outds=work.ms_getgroups,
mdebug=0 mdebug=0
); );
@@ -20355,8 +20364,10 @@ run;
run; run;
%end; %end;
%if "&user"="0" %then %let url=/SASjsApi/group; %if "&user" ne "0" %then %let url=/SASjsApi/user/by/username/&user;
%else %let url=/SASjsApi/user/by/username/&user; %else %if "&uid" ne "0" %then %let url=/SASjsApi/user/&uid;
%else %let url=/SASjsApi/group;
proc http method='GET' headerin=&fref0 out=&fref1 proc http method='GET' headerin=&fref0 out=&fref1
url="&_sasjs_apiserverurl.&url"; url="&_sasjs_apiserverurl.&url";
@@ -20373,7 +20384,7 @@ run;
libname &libref JSON fileref=&fref1; libname &libref JSON fileref=&fref1;
%if "&user"="0" %then %do; %if "&user"="0" and "&uid"="0" %then %do;
data &outds; data &outds;
length NAME $32 DESCRIPTION $64. GROUPID 8; length NAME $32 DESCRIPTION $64. GROUPID 8;
if _n_=1 then call missing(of _all_); if _n_=1 then call missing(of _all_);
@@ -20416,12 +20427,17 @@ options &optval;
%ms_getusers(outds=userlist) %ms_getusers(outds=userlist)
Filtering for a group: Filtering for a group by group name:
%ms_getusers(outds=work.groupmembers, group=GROUPNAME) %ms_getusers(outds=work.groupmembers, group=GROUPNAME)
Filtering for a group by group id:
%ms_getusers(outds=work.groupmembers, gid=1)
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages @param [in] mdebug= (0) Set to 1 to enable DEBUG messages
@param [in] group= (0) Set to a group name to filter members for that group @param [in] group= (0) Set to a group name to filter members for that group
@param [in] gid= (0) Set to a group id to filter members for that group
@param [out] outds= (work.ms_getusers) This output dataset will contain the @param [out] outds= (work.ms_getusers) This output dataset will contain the
list of user accounts. Format: list of user accounts. Format:
|DISPLAYNAME:$60.|USERNAME:$30.|ID:best.| |DISPLAYNAME:$60.|USERNAME:$30.|ID:best.|
@@ -20433,7 +20449,6 @@ options &optval;
|`New User `|`newuser `|`5`| |`New User `|`newuser `|`5`|
<h4> SAS Macros </h4> <h4> SAS Macros </h4>
@li mf_getuniquefileref.sas @li mf_getuniquefileref.sas
@li mf_getuniquelibref.sas @li mf_getuniquelibref.sas
@@ -20449,6 +20464,7 @@ options &optval;
%macro ms_getusers( %macro ms_getusers(
outds=work.ms_getusers, outds=work.ms_getusers,
group=0, group=0,
gid=0,
mdebug=0 mdebug=0
); );
@@ -20463,6 +20479,19 @@ options &optval;
%let fref1=%mf_getuniquefileref(); %let fref1=%mf_getuniquefileref();
%let libref=%mf_getuniquelibref(); %let libref=%mf_getuniquelibref();
%if %sysget(MODE)=desktop %then %do;
/* users api does not exist in desktop mode */
data &outds;
length DISPLAYNAME $60 USERNAME:$30 ID 8;
USERNAME="&sysuserid";
DISPLAYNAME="&sysuserid (desktop mode)";
ID=1;
output;
stop;
run;
%return;
%end;
/* avoid sending bom marker to API */ /* avoid sending bom marker to API */
%let optval=%sysfunc(getoption(bomfile)); %let optval=%sysfunc(getoption(bomfile));
options nobomfile; options nobomfile;
@@ -20483,9 +20512,9 @@ run;
run; run;
%end; %end;
%if "&group"="0" %then %let url=/SASjsApi/user; %if "&group" ne "0" %then %let url=/SASjsApi/group/by/groupname/&group;
%else %let url=/SASjsApi/group/by/groupname/&group; %else %if "&gid" ne "0" %then %let url=/SASjsApi/group/&gid;
%else %let url=/SASjsApi/user;
proc http method='GET' headerin=&fref0 out=&fref1 proc http method='GET' headerin=&fref0 out=&fref1
url="&_sasjs_apiserverurl.&url"; url="&_sasjs_apiserverurl.&url";
@@ -20503,7 +20532,7 @@ run;
libname &libref JSON fileref=&fref1; libname &libref JSON fileref=&fref1;
%if "&group"="0" %then %do; %if "&group"="0" and "&gid"="0" %then %do;
data &outds; data &outds;
length DISPLAYNAME $60 USERNAME:$30 ID 8; length DISPLAYNAME $60 USERNAME:$30 ID 8;
set &libref..root; set &libref..root;
@@ -22268,18 +22297,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';

View File

@@ -23,18 +23,19 @@
@author Allan Bowe @author Allan Bowe
**/ **/
%macro mf_getuser(type=META %macro mf_getuser(
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
%local user metavar; %local user;
%if &type=OS %then %let metavar=_secureusername;
%else %let metavar=_metaperson;
%if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username;
%else %if %symexist(&metavar) %then %do; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;
%if %length(&&&metavar)=0 %then %let user=&sysuserid; %let user=&SYS_COMPUTE_SESSION_OWNER;
%end;
%else %if %symexist(_metaperson) %then %do;
%if %length(&_metaperson)=0 %then %let user=&sysuserid;
/* sometimes SAS will add @domain extension - remove for consistency */ /* sometimes SAS will add @domain extension - remove for consistency */
/* but be sure to quote in case of usernames with commas */ /* but be sure to quote in case of usernames with commas */
%else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); %else %let user=%unquote(%scan(%quote(&_metaperson),1,@));
%end; %end;
%else %let user=&sysuserid; %else %let user=&sysuserid;

View File

@@ -74,7 +74,7 @@
%if %symexist(_SYSINCLUDEFILEDEVICE) %if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */ /* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and "&SYSPROCESSNAME " ne "Compute Server " and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do; %then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do; %if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds; data &errds;
@@ -92,7 +92,7 @@
/* Web App Context */ /* Web App Context */
%if %symexist(_PROGRAM) %if %symexist(_PROGRAM)
or "&SYSPROCESSNAME "="Compute Server " or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE or &mode=INCLUDE
%then %do; %then %do;
options obs=max replace mprint; options obs=max replace mprint;

View File

@@ -315,18 +315,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';

View File

@@ -317,18 +317,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';

View File

@@ -9,12 +9,17 @@
%ms_getgroups(outds=userlist) %ms_getgroups(outds=userlist)
With filter: With filter on username:
%ms_getgroups(outds=userlist, user=James) %ms_getgroups(outds=userlist, user=James)
With filter on userid:
%ms_getgroups(outds=userlist, uid=1)
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages @param [in] mdebug= (0) Set to 1 to enable DEBUG messages
@param [in] user= (0) Provide the username on which to filter @param [in] user= (0) Provide the username on which to filter
@param [in] uid= (0) Provide the userid on which to filter
@param [out] outds= (work.ms_getgroups) This output dataset will contain the @param [out] outds= (work.ms_getgroups) This output dataset will contain the
list of groups. Format: list of groups. Format:
|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.| |NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|
@@ -37,6 +42,7 @@
%macro ms_getgroups( %macro ms_getgroups(
user=0, user=0,
uid=0,
outds=work.ms_getgroups, outds=work.ms_getgroups,
mdebug=0 mdebug=0
); );
@@ -86,8 +92,10 @@ run;
run; run;
%end; %end;
%if "&user"="0" %then %let url=/SASjsApi/group; %if "&user" ne "0" %then %let url=/SASjsApi/user/by/username/&user;
%else %let url=/SASjsApi/user/by/username/&user; %else %if "&uid" ne "0" %then %let url=/SASjsApi/user/&uid;
%else %let url=/SASjsApi/group;
proc http method='GET' headerin=&fref0 out=&fref1 proc http method='GET' headerin=&fref0 out=&fref1
url="&_sasjs_apiserverurl.&url"; url="&_sasjs_apiserverurl.&url";
@@ -104,7 +112,7 @@ run;
libname &libref JSON fileref=&fref1; libname &libref JSON fileref=&fref1;
%if "&user"="0" %then %do; %if "&user"="0" and "&uid"="0" %then %do;
data &outds; data &outds;
length NAME $32 DESCRIPTION $64. GROUPID 8; length NAME $32 DESCRIPTION $64. GROUPID 8;
if _n_=1 then call missing(of _all_); if _n_=1 then call missing(of _all_);

View File

@@ -8,12 +8,17 @@
%ms_getusers(outds=userlist) %ms_getusers(outds=userlist)
Filtering for a group: Filtering for a group by group name:
%ms_getusers(outds=work.groupmembers, group=GROUPNAME) %ms_getusers(outds=work.groupmembers, group=GROUPNAME)
Filtering for a group by group id:
%ms_getusers(outds=work.groupmembers, gid=1)
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages @param [in] mdebug= (0) Set to 1 to enable DEBUG messages
@param [in] group= (0) Set to a group name to filter members for that group @param [in] group= (0) Set to a group name to filter members for that group
@param [in] gid= (0) Set to a group id to filter members for that group
@param [out] outds= (work.ms_getusers) This output dataset will contain the @param [out] outds= (work.ms_getusers) This output dataset will contain the
list of user accounts. Format: list of user accounts. Format:
|DISPLAYNAME:$60.|USERNAME:$30.|ID:best.| |DISPLAYNAME:$60.|USERNAME:$30.|ID:best.|
@@ -25,7 +30,6 @@
|`New User `|`newuser `|`5`| |`New User `|`newuser `|`5`|
<h4> SAS Macros </h4> <h4> SAS Macros </h4>
@li mf_getuniquefileref.sas @li mf_getuniquefileref.sas
@li mf_getuniquelibref.sas @li mf_getuniquelibref.sas
@@ -41,6 +45,7 @@
%macro ms_getusers( %macro ms_getusers(
outds=work.ms_getusers, outds=work.ms_getusers,
group=0, group=0,
gid=0,
mdebug=0 mdebug=0
); );
@@ -55,6 +60,19 @@
%let fref1=%mf_getuniquefileref(); %let fref1=%mf_getuniquefileref();
%let libref=%mf_getuniquelibref(); %let libref=%mf_getuniquelibref();
%if %sysget(MODE)=desktop %then %do;
/* users api does not exist in desktop mode */
data &outds;
length DISPLAYNAME $60 USERNAME:$30 ID 8;
USERNAME="&sysuserid";
DISPLAYNAME="&sysuserid (desktop mode)";
ID=1;
output;
stop;
run;
%return;
%end;
/* avoid sending bom marker to API */ /* avoid sending bom marker to API */
%let optval=%sysfunc(getoption(bomfile)); %let optval=%sysfunc(getoption(bomfile));
options nobomfile; options nobomfile;
@@ -75,9 +93,9 @@ run;
run; run;
%end; %end;
%if "&group"="0" %then %let url=/SASjsApi/user; %if "&group" ne "0" %then %let url=/SASjsApi/group/by/groupname/&group;
%else %let url=/SASjsApi/group/by/groupname/&group; %else %if "&gid" ne "0" %then %let url=/SASjsApi/group/&gid;
%else %let url=/SASjsApi/user;
proc http method='GET' headerin=&fref0 out=&fref1 proc http method='GET' headerin=&fref0 out=&fref1
url="&_sasjs_apiserverurl.&url"; url="&_sasjs_apiserverurl.&url";
@@ -95,7 +113,7 @@ run;
libname &libref JSON fileref=&fref1; libname &libref JSON fileref=&fref1;
%if "&group"="0" %then %do; %if "&group"="0" and "&gid"="0" %then %do;
data &outds; data &outds;
length DISPLAYNAME $60 USERNAME:$30 ID 8; length DISPLAYNAME $60 USERNAME:$30 ID 8;
set &libref..root; set &libref..root;

View File

@@ -459,18 +459,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';