From 3bb632d60dc8b9c31871af82df3c698976bca3ef Mon Sep 17 00:00:00 2001 From: ^ Date: Thu, 11 Apr 2024 11:58:45 +0100 Subject: [PATCH] feat: new mx_getgroups.sas macro for cross-platform use --- tests/x-platform/mx_getgroups.test.sas | 31 ++++++++++ xplatform/mx_getgroups.sas | 83 ++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 tests/x-platform/mx_getgroups.test.sas create mode 100644 xplatform/mx_getgroups.sas diff --git a/tests/x-platform/mx_getgroups.test.sas b/tests/x-platform/mx_getgroups.test.sas new file mode 100644 index 00000000..6d79f87f --- /dev/null +++ b/tests/x-platform/mx_getgroups.test.sas @@ -0,0 +1,31 @@ +/** + @file + @brief Testing mx_getgroups.test.sas macro + + Be sure to run %let mcTestAppLoc=/Public/temp/macrocore; when + running in Studio + +

SAS Macros

+ @li mf_nobs.sas + @li mf_getuser.sas + @li mp_assert.sas + @li mx_getgroups.sas + +**/ + + +%mx_getgroups(outds=work.test1) + +%mp_assert( + iftrue=(%mf_nobs(work.test1)>0), + desc=groups were found, + outds=work.test_results +) + +%mx_getgroups(outds=work.test2,user=%mf_getuser()) + +%mp_assert( + iftrue=(%mf_nobs(work.test2)>0), + desc=groups for current user were found, + outds=work.test_results +) \ No newline at end of file diff --git a/xplatform/mx_getgroups.sas b/xplatform/mx_getgroups.sas new file mode 100644 index 00000000..fab1632f --- /dev/null +++ b/xplatform/mx_getgroups.sas @@ -0,0 +1,83 @@ +/** + @file + @brief Fetches all groups or the groups for a particular member + @details When building applications that run on multiple flavours of SAS, it + is convenient to use a single macro (like this one) to fetch the groups + regardless of the flavour of SAS being used + + The alternative would be to compile a generic macro in target-specific + folders (SASVIYA, SAS9 and SASJS). This avoids compiling unnecessary macros + at the expense of a more complex sasjsconfig.json setup. + + + @param [in] mdebug= (0) Set to 1 to enable DEBUG messages + @param [in] user= (0) Provide the username on which to filter + @param [in] uid= (0) Provide the userid on which to filter + @param [in] repo= (foundation) SAS9 only, choose the metadata repo to query + @param [in] access_token_var= (ACCESS_TOKEN) VIYA only. + The global macro variable to contain the access token + @param [in] grant_type= (sas_services) VIYA only. + Valid values are "password" or "authorization_code" (unquoted). + @param [out] outds= (work.mx_getgroups) This output dataset will contain the + list of groups. Format: +|NAME:$32.|DESCRIPTION:$256.|GROUPID:best.| +|---|---|---| +|`SomeGroup `|`A group `|`1`| +|`Another Group`|`this is a different group`|`2`| +|`admin`|`Administrators `|`3`| + +

SAS Macros

+ @li mf_getplatform.sas + @li mm_getgroups.sas + @li ms_getgroups.sas + @li mv_getgroups.sas + @li mv_getusergroups.sas + +**/ + +%macro mx_getgroups( + mdebug=0, + user=0, + uid=0, + repo=foundation, + access_token_var=ACCESS_TOKEN, + grant_type=sas_services, + outds=work.mx_getgroups +)/*/STORE SOURCE*/; +%local platform name shortloc; +%let platform=%mf_getplatform(); + +%if &platform=SASJS %then %do; + %ms_getgroups( + user=&user, + uid=&uid, + outds=&outds, + mdebug=&mdebug + ) +%end; +%else %if &platform=SAS9 or &platform=SASMETA %then %do; + %if &user=0 %then %let user=; + %mm_getGroups( + user=&user + ,outds=&outds + ,repo=&repo + ,mDebug=&mdebug + ) +%end; +%else %if &platform=SASVIYA %then %do; + %if &user=0 %then %do; + %mv_getgroups(access_token_var=&access_token_var + ,grant_type=&grant_type + ,outds=&outds + ) + %end; + %else %do; + %mv_getusergroups(&user + ,outds=&outds + ,access_token_var=&access_token_var + ,grant_type=&grant_type + ) + %end; +%end; + +%mend mx_getgroups; \ No newline at end of file