Production Ready Macros for SAS Application Developers
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 
7  @param user= the metadata user to return groups for. Leave blank for all
8  groups.
9  @param outds= the dataset to create that contains the list of groups
10  @param mDebug= set to 1 to show debug messages in the log
11 
12  @returns outds dataset containing all groups in a column named "metagroup"
13  - groupuri
14  - groupname
15  - groupdesc
16 
17  @version 9.2
18  @author Allan Bowe
19 
20 **/
21 
22 %macro mm_getGroups(
23  user=
24  ,outds=work.mm_getGroups
25  ,mDebug=0
26 )/*/STORE SOURCE*/;
27 
28 %local mD;
29 %if &mDebug=1 %then %let mD=;
30 %else %let mD=%str(*);
31 %&mD.put Executing mm_getGroups.sas;
32 %&mD.put _local_;
33 
34 %if %length(&user)=0 %then %do;
35  data &outds (keep=groupuri groupname groupdesc);
36  length groupuri groupname groupdesc group_or_role $256;
37  call missing(of _all_);
38  i+1;
39  do while
40  (metadata_getnobj("omsobj:IdentityGroup?@Id contains '.'",i,groupuri)>0);
41  rc=metadata_getattr(groupuri, "Name", groupname);
42  rc=metadata_getattr(groupuri, "Desc", groupdesc);
43  rc=metadata_getattr(groupuri,"PublicType",group_or_role);
44  if Group_or_Role = 'UserGroup' then output;
45  i+1;
46  end;
47  run;
48 %end;
49 %else %do;
50  data &outds (keep=groupuri groupname groupdesc);
51  length uri groupuri groupname groupdesc group_or_role $256;
52  call missing(of _all_);
53  rc=metadata_getnobj("omsobj:Person?@Name='&user'",1,uri);
54  if rc<=0 then do;
55  putlog "WARNING: rc=" rc "&user not found "
56  ", or there was an error reading the repository.";
57  stop;
58  end;
59  a=1;
60  grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);
61  if grpassn in (-3,-4) then do;
62  putlog "WARNING: No groups found for ";
63  output;
64  end;
65  else do while (grpassn > 0);
66  rc=metadata_getattr(groupuri, "Name", groupname);
67  rc=metadata_getattr(groupuri, "Desc", groupdesc);
68  a+1;
69  rc=metadata_getattr(groupuri,"PublicType",group_or_role);
70  if Group_or_Role = 'UserGroup' then output;
71  grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);
72  end;
73  run;
74 %end;
75 
76 %mend;