VMware Cloud Community
anat_cohen
Contributor
Contributor
Jump to solution

current business group

Hi,

Can you please help me to find query the business group that current (or specific user) is belong with VRO?

I was trying to do it on that way but getting null:

//vcacHost and userName are input parameter

var model = "ManagementModelEntities.svc";

var entitySetName = "Users";

var property = new Properties();

property.put("UserName",userName);

var entities = vCACEntityManager.readModelEntitiesByCustomFilter(vcacHost.id, model, entitySetName, property, null);

//System.log("User ent: " + entities);

var BG = entities[0].getLink(vcacHost, "ProvisioningGroup");

System.log("Bg New: " + BG);

Thanks,

Anat

Reply
0 Kudos
1 Solution

Accepted Solutions
eoinbyrne
Expert
Expert
Jump to solution

I've done this using the following approach

function stringArrayContains(arrStr, str)

{

     for each(var s in arrStr)

     {

          if(s == str)

          {

               return true;

          }   

     }

     return false;

}

var searchUser = "user@domain.com";

var allGrps = vCACCAFEEntitiesFinder.getBusinessGroups(vcacHost);

for each (grp in allGrps)

{

     // this will be an array of Strings

     var users = grp.getUsers();

     // Note to Vmware - a native array.contains method would be really handy here!

     if(stringArrayContains(grp.getUsers(), searchUser))

     {

          return grp;

     }

}

return null;

This will get you the first vCACCAFE:BusinessGroup the user is a member of (you might need to factor the group name if he's in multiple). This will also work if you want to check for an admin or support user. Have a look at the API documentation for the type vCACCAFE:BusinessGroup (open the API Explorer & keep it open Smiley Happy )

HTH

View solution in original post

Reply
0 Kudos
7 Replies
eoinbyrne
Expert
Expert
Jump to solution

I've done this using the following approach

function stringArrayContains(arrStr, str)

{

     for each(var s in arrStr)

     {

          if(s == str)

          {

               return true;

          }   

     }

     return false;

}

var searchUser = "user@domain.com";

var allGrps = vCACCAFEEntitiesFinder.getBusinessGroups(vcacHost);

for each (grp in allGrps)

{

     // this will be an array of Strings

     var users = grp.getUsers();

     // Note to Vmware - a native array.contains method would be really handy here!

     if(stringArrayContains(grp.getUsers(), searchUser))

     {

          return grp;

     }

}

return null;

This will get you the first vCACCAFE:BusinessGroup the user is a member of (you might need to factor the group name if he's in multiple). This will also work if you want to check for an admin or support user. Have a look at the API documentation for the type vCACCAFE:BusinessGroup (open the API Explorer & keep it open Smiley Happy )

HTH

Reply
0 Kudos
anat_cohen
Contributor
Contributor
Jump to solution

Hi,

Thank you eoinbyrneeoinbyrne, This work. Is any way to put the input (vcac host) on the script. I want to make an action without parameters.

thanks

Reply
0 Kudos
eoinbyrne
Expert
Expert
Jump to solution

Take a look at Server.findAllForType in the API explorer

And / or read this post from qc4vmware - Server.findAllForType query parameter mystery solved (sorta)

Reply
0 Kudos
anat_cohen
Contributor
Contributor
Jump to solution

Hi,

I created dropdown successfully but the "var allGrps = vCACCAFEEntitiesFinder.getBusinessGroups(vcacHost); " take alot of time and user is waiting.

Is there other option to get the Business group if the user?

Reply
0 Kudos
befreeman
Enthusiast
Enthusiast
Jump to solution

You could try something like this:  parameters are vCACCAFEHost, tenantName, and username.

var authenClient = vCACCAFEHost.createAuthenticationClient();

var authenPrincipalSvc = authenClient.getAuthenticationPrincipalService();

var authenSubtenantSvc = authenClient.getAuthenticationSubtenantService();

// find the principal for the user

var principal = authenPrincipalSvc.getPrincipal(tenantName, username);

var vcacPrincipalId = principal.getPrincipalId();

// get the business groups

var businessGroups = authenSubtenantSvc.findSubtenantsByPrincipal(tenantName, vcacPrincipalId);

Hopefully the performance is better because you don't have to loop through all the users.

Reply
0 Kudos
Paul_SI
Enthusiast
Enthusiast
Jump to solution

Hi befreeman​,

I'm using your snippet and I got it for 98% working, the only thing is that for 2 different users I get 0 BG's returned.

I did check all objects and variables, they contain valid data and objects.

When I put "businessGroups" in a System.log(); then a empty string / array is returned. No error is being displayed.

Its this line:

var businessGroups = authenSubtenantSvc.findSubtenantsByPrincipal(tenantName, vcacPrincipalId);

Any thoughts?

Reply
0 Kudos
befreeman
Enthusiast
Enthusiast
Jump to solution

Hi @Paul_SI,

Wow, this was a long time ago. Sorry, I don't even have a vRealize system running anymore. All I can think is maybe double check that the user is in a valid business group. If you're on a newer version of vRealize than this code might not be valid anymore. I want to say this was using vRA 7.0, not sure though.

Good luck!

Reply
0 Kudos