24     ,outds=work.mm_getGroups
    29 %
if &mDebug=1 %then %let mD=;
    30 %
else %let mD=%str(*);
    31 %&mD.put Executing mm_getGroups.sas;
    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_);
    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;
    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);
    55       putlog 
"WARNING: rc=" rc 
"&user not found "    56           ", or there was an error reading the repository.";
    60     grpassn=metadata_getnasn(uri,
"IdentityGroups",a,groupuri);
    61     if grpassn in (-3,-4) then do;
    62       putlog "WARNING: No groups found for ";
    65     else do while (grpassn > 0);
    66       rc=metadata_getattr(groupuri, "Name", groupname);
    67       rc=metadata_getattr(groupuri, "Desc", groupdesc);
    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);