Macros for SAS Application Developers
https://github.com/sasjs/core
mm_getgroups.sas
Go to the documentation of this file.
1/**
2 @file
3 @brief Creates dataset with all groups or just those for a particular user
4 @details Provide a metadata user to get groups for just that user, or leave
5 blank to return all groups.
6 Usage:
7
8 - all groups: `%mm_getGroups()`
9
10 - all groups for a particular user: `%mm_getgroups(user=&sysuserid)`
11
12 @param [in] user= the metadata user to return groups for. Leave blank for all
13 groups.
14 @param [in] repo= the metadata repository that contains the user/group
15 information
16 @param [in] mDebug= set to 1 to show debug messages in the log
17 @param [out] outds= the dataset to create that contains the list of groups
18
19 @returns outds dataset containing all groups in a column named "metagroup"
20 - groupuri
21 - groupname
22 - groupdesc
23
24 @version 9.2
25 @author Allan Bowe
26
27**/
28
29%macro mm_getGroups(
30 user=
31 ,outds=work.mm_getGroups
32 ,repo=foundation
33 ,mDebug=0
34)/*/STORE SOURCE*/;
35
36%local mD oldrepo;
37%let oldrepo=%sysfunc(getoption(metarepository));
38%if &mDebug=1 %then %let mD=;
39%else %let mD=%str(*);
40%&mD.put Executing mm_getGroups.sas;
41%&mD.put _local_;
42
43/* on some sites, user / group info is in a different metadata repo to the
44 default */
45%if &oldrepo ne &repo %then %do;
46 options metarepository=&repo;
47%end;
48
49%if %length(&user)=0 %then %do;
50 data &outds (keep=groupuri groupname groupdesc);
51 length groupuri groupname groupdesc group_or_role $256;
52 call missing(of _all_);
53 i+1;
54 do while
55 (metadata_getnobj("omsobj:IdentityGroup?@Id contains '.'",i,groupuri)>0);
56 rc=metadata_getattr(groupuri, "Name", groupname);
57 rc=metadata_getattr(groupuri, "Desc", groupdesc);
58 rc=metadata_getattr(groupuri,"PublicType",group_or_role);
59 if Group_or_Role = 'UserGroup' then output;
60 i+1;
61 end;
62 run;
63%end;
64%else %do;
65 data &outds (keep=groupuri groupname groupdesc);
66 length uri groupuri groupname groupdesc group_or_role $256;
67 call missing(of _all_);
68 rc=metadata_getnobj("omsobj:Person?@Name='&user'",1,uri);
69 if rc<=0 then do;
70 putlog "%str(WARN)ING: rc=" rc "&user not found "
71 ", or there was an issue reading the repository.";
72 stop;
73 end;
74 a=1;
75 grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);
76 if grpassn in (-3,-4) then do;
77 putlog "%str(WARN)ING: No metadata groups found for &user";
78 output;
79 end;
80 else do while (grpassn > 0);
81 rc=metadata_getattr(groupuri, "Name", groupname);
82 rc=metadata_getattr(groupuri, "Desc", groupdesc);
83 a+1;
84 rc=metadata_getattr(groupuri,"PublicType",group_or_role);
85 if Group_or_Role = 'UserGroup' then output;
86 grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);
87 end;
88 run;
89%end;
90
91%if &oldrepo ne &repo %then %do;
92 options metarepository=&oldrepo;
93%end;
94
95%mend mm_getGroups;