BookmarkSubscribeRSS Feed
Albert0
Quartz | Level 8

Hi All,

 

I would like to ask on how can I extract all the User, Groups and Roles that are registered in SMC? I have this code below but when I trybto use it, it doesn't get me an output.

 

 

/*Connect to the metadata server*/
options metaserver="localhost"
metaport=8561
metauser="myuser"
metapass="mypassword"
metarepository="Foundation"
metaprotocol=BRIDGE;

data users_grps_roles;
length uri name DisplayName grp groupuri $256 grptype $5 id MDUpdate $20;

/*Initialize variables to missing*/
n=1;
uri='';
name='';
Displayname='';
grp='';
groupuri='';
grptype='';
id='';
MDUpdate='';

/*Determine how many person objects are defined*/
nobj=metadata_getnobj("omsobj:Person?@Id contains '.'",n,uri);

if nobj=0 then
put 'No Persons available.';
else
do while (nobj > 0);
/*Retrieve the current person's name*/
rc=metadata_getattr(uri, "Name", Name);

/*Retrieve the current person's displayname*/
rc=metadata_getattr(uri, "DisplayName", DisplayName);
rc=metadata_getattr(uri, "MetadataUpdated", MDUpdate);

/*Get the group association information for the current person*/
a=1;
grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);

/*If this person does not belong to any groups, set their group
variable to 'NONE'*/
if grpassn in (-3,-4) then
do;
grp="NONE";
output;
end;

/*If the person belongs to any groups, loop through the list
and retrieve the name of each group, outputting each on a
separate record. If the GroupType is a <blank>, then set the
grptype to GROUP. If the GroupType is a ROLE, then the
grptype is already set to ROLE. This will be used in the
PROC REPORT step.*/
else
do while (grpassn > 0);
rc2=metadata_getattr(groupuri, "Name", grp);
rc3=metadata_getattr(groupuri, "GroupType", grptype);

if grptype = '' then
do;
grptype="GROUP";
end;

output;
a+1;
grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);
end;

/*Retrieve the next person's information*/
n+1;
nobj=metadata_getnobj("omsobj:Person?@Id contains '.'",n,uri);
end;

keep name DisplayName MDUpdate grp grptype;
run;

options ls=200 ps=200;

/*Display the list of users and their groups*/
proc report data=users_grps_roles nowd headline headskip spanrows;
columns grptype grp name DisplayName groups roles MDUpdate;
define name / order 'User Name' format=$30.;
define DisplayName / order 'User DisplayName' format=$40.;
define grp / noprint;
define grptype / noprint;
define groups / computed 'Groups' format=$40.;
define roles / computed 'Roles' format=$40.;

compute groups / char length = 40;

if grptype = 'GROUP' then
groups = grp;
else if grp = 'NONE' then
groups = 'NONE';
else groups = ' ';
endcomp;

compute roles / char length = 40;

if grptype = 'ROLE' then
roles = grp;
else if grp = 'NONE' then
roles = 'NONE';
else roles = ' ';
endcomp;

define MDUpdate / display 'Last Updated' format=$20.;
break after name / skip;
title 'Listing of Users and associated Groups and Roles';
run;

 

Thank you.

 

-Albert

2 REPLIES 2
Albert0
Quartz | Level 8
Hi guys...I've managed to make the program worked

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

Register now

Develop Code with SAS Studio

Get started using SAS Studio to write, run and debug your SAS programs.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 2944 views
  • 0 likes
  • 2 in conversation