Re: Need to create group automatically via run script

sreejamukherjee
Kilo Expert

Hi All,

I have a requirement to design a catalog item which will automate the process of

1) Creating a new group

2) Add Members to that group

3) Add Role to that group depending on the Type selected from the Item

I am done with the first two requirements but unable to add role to the group dynamically which will be added depending on the Type selected(If the type is "Fulfillment" the role should be "itil" and if the type is "Approval" the role should be "approval_user"). I also want to add the variables that I have used in my item as well as in the "Run Script".

1) Group Name >>(groupname) >>(Single Line Text)

2) Description of the group >> (desc_group) >> (Single Line Text)

3) Select Members >>(select_members) >>(List Collector)

4) Group email >>(group_email) >>(Single Line Text)

5) Support area >>(support_area) >>(Select Box)

5) SA Manager >> (sa_manager) >> (Reference)

6) Vendor Manager >> (vendor_manager) >> (Reference)

7) Type >> (type) >> (Reference)

These all are the variables that I have used in "Run Script" to "Create a new group" and "Add Members to that group".

  • var gr = new GlideRecord("sys_user_group");  
  • gr.initialize();  
  • gr.name = current.variables.groupname;  
  • gr.description = current.variables.desc_group;  
  • gr.email = current.variables.group_email;  
  • gr.u_support_area = current.variables.support_area;  
  • gr.u_sa_manager = current.variables.sa_manager;  
  • gr.u_vendor_manager = current.variables.vendor_manager;  
  • gr.type = current.variables.type;  
  • var sys_id = gr.insert();  
  •  
  •  
  • var user = current.variables.select_members;  
  • var user_gr = user.toString().split(",");  
  • for(var i = 0;i<user_gr.length;i++){  
  • var gr1= new GlideRecord("sys_user_grmember");  
  • gr1.initialize();  
  • gr1.user = user_gr[i];  
  • gr1.group = sys_id;  
  • gr1.insert();  
  • }  
  •  
  •  
  • if(gr.type == 'Fulfillment'){  
  • var gr2 = new GlideRecord("sys_user_role");  
  • gr2.addQuery('name' , 'itil');      
  • gr2.query();      
  • if (gr2.next()){  
  •   var gr3 = new GlideRecord('sys_user_group');      
  •               gr3.addQuery('name' , gr.name);      
  •               gr3.query();      
  •               while (gr3.next()){        
  •   var gr4 = new GlideRecord('sys_group_has_role');      
  •                       gr4.addQuery('group', gr3.sys_id);      
  •                       gr4.addQuery('role', gr2.sys_id);      
  •                       gr4.query();      
  •                       if (gr4.getRowCount() == 0){      
  •                               var gr5 = new GlideRecord('sys_group_has_role');      
  •                               gr5.initialize();      
  •                               gr5.group = gr.sys_id;      
  •                               gr5.role = gr2.sys_id;      
  •                               gr5.inherits = true;  
  •                                 gr5.insert();    
  •   }  
  •   }  
  • }  
  • }

Please go through with the code and make me correct if I made any mistake. Any help will be highly obliged.

Thanks in advance.

Regards,

Sreeja

8 REPLIES 8

Greg42
Mega Guru

Hi Sreeja,



The reason is that gr.type will return a sys_id. Try: gr.type.getDisplayValue();



Also if you allow for more than one group type you will have to loop through results as you will get comma separated names.




Regards



Greg


Hi Greg,


Even if I change it to gr.type.getDisplayValue(); its showing no result.


Regards,


Sreeja


Hm... ok, I don't think we actually need to do it. You have this value in current.variables.type try to do a check against that.


No luck Greg..


I have used gr.type = current.variables.type.getDisplayValue();.. but not working.


Regards,


Sreeja