How to make a ui_reference field filter dependent on a different field

alexbones
Tera Expert

Needing help developing a UI page dialog box to re-assign a ticket based upon a ui action button. Where I'm stuck is getting the UI Reference field for the assigned to field to be dependent on the assignment group.

<g:ui_form>

  <!-- Get the values from dialog preferences -->

  <g:evaluate var="jvar_short_text"

      expression="RP.getWindowProperties().get('short_text')" />

  <g:evaluate var="jvar_comments_text"

      expression="RP.getWindowProperties().get('assigned_to_text')" />

      <g:evaluate var="jvar_assignment_group"

      expression="RP.getWindowProperties().get('assignment_group')" />

     

    <!-- Set up form fields and labels -->

    <table width="100%">

        <tr id="description_row" valign="top">

              <td colspan="2">

                    <!-- Short description value used as a label -->

                    ${jvar_short_text}

              </td>

        </tr>

        <tr>

            <td>

                <!-- Assigned to input reference field -->

                <g:ui_reference name="assigned_to" id="assigned_to" table="sys_user" query="group=${jvar_assignment_group}" label="Assign to Problem Manager:"

                      mandatory="true" />

            </td>

        </tr>

        <tr>

            <td colspan="2">

            </td>

        </tr>

        <tr id="dialog_buttons">

              <td colspan="2" align="right">

                    <!-- Add OK/Cancel buttons. Clicking OK calls the validateComments script -->

                    <g:dialog_buttons_ok_cancel ok="return validateInput()" ok_type="button" cancel_type="button" />

              </td>

        </tr>

  </table>

</g:ui_form>

1 ACCEPTED SOLUTION

Here's the conceptual code (totally untested)



<g:evaluate var="jvar_users">


var ug = new GlideRecord('sys_user_grmember');


ug.addQuery('group', "${jvar_assignment_group}"); // use your jelly variable here for the group to filter


ug.query();



var list = []; // create an array of user IDs


while (ug.next()) {


        list.push(ug.getValue('user')); // add record's user to list as a member of that group


}


var users = list.join(','); // create comma separated values


users;   // save it to jvar_users


</g:evaluate>



Now you can use jvar_users as your reference qualifier in the g:ui_reference tag.


query="sys_idIN${jvar_users}"


View solution in original post

10 REPLIES 10

hey Alex -



I have a UI Action - that displays GlideDialogWindow and takes values from assignment group and assigned_to from the incident form.


GDW displays Assigned_to and Assignment_group that can be modified as below and should be submitted to the form -



o I want the assignment group to be displayed in the GlideDialogWindow with a value from form and modified with any other value.


o I want the assigned_to to be displayed in the GlideDialogWindow and modified with any other value.


find_real_file.png



I want the value of the group to depend on the user and vice versa.


I was able to achieve dependency of the user to group present on the form but not user to group present on the GDW's modified value.



I want the reference qualifier to be set on both these fields to achieve mutual dependency.



_______________UI ACTION___________________



function invokeReturnToSubmitter(){


  var objassignedto_grp = g_form.getReference('assignment_group',assignGrpInfo);


  var assigned_to_user   = '';


  var reason_return = '';



  //Async Call Back function for getReference.


  function assignGrpInfo(objassignedto_grp){



  var assignedto_grp = objassignedto_grp.name;


  var assignedto_grp_sysID = objassignedto_grp.sys_id;



  var gdw = new GlideDialogWindow('Return_to_Submitter');


  gdw.setTitle('Return To Submitter');


  gdw.setPreference("assignedto_grp", assignedto_grp);


  gdw.setPreference("assignedto_grp_sysID",assignedto_grp_sysID);


  gdw.setPreference("assigned_to_user", assigned_to_user);


  gdw.setPreference("reason_return",reason_return);


  gdw.render();



  //gsftSubmit(null, g_form.getFormElement(), 'return.submitter'); //MUST call the 'Action name' set in this UI Action


  }



}



_____________________UI PAGE__________________________


<?xml version="1.0" encoding="utf-8" ?>


<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">




<!-- Get values from dialog passed in -->




<g:evaluate var="jvar_assignedto_grp"


      expression="RP.getWindowProperties().get('assignedto_grp')" />




<g:evaluate var="jvar_assignedto_grp_sysID"


      expression="RP.getWindowProperties().get('assignedto_grp_sysID')" />




<g:evaluate var="jvar_reason_return"


      expression="RP.getWindowProperties().get('reason_return')" />




<!--   <g:evaluate var="jvar_assigned_to_user"


  expression="RP.getWindowProperties().get('assigned_to_user')" /> -->




<g:evaluate var="jvar_assigned_to_user">


var grpUsers = new GlideRecord('sys_user_grmember');


grpUsers.addQuery('group','${jvar_assignedto_grp_sysID}');


grpUsers.query();




var list = []; //Array to carry users from above query


while(grpUsers.next())


{


list.push(grpUsers.getValue('user')); // Add record's user to list as a member of that group


}


var assigned_to_user = list.join(','); // Create comma separated values


assigned_to_user;   // Save it to jvar_assigned_to_user


</g:evaluate>






<table width ="100%">


<!-- First row in window for Assignment Group -->


<tr id="assignment_grp_row" valign="top">


<td>


Assignment Group :


</td>


<td>


<g:ui_reference name="assignment_group" id="assignment_group" table="sys_user_group" query="active=true^u_assignment=true" mandatory="true" value="${jvar_assignedto_grp_sysID}" displayvalue="${jvar_assignedto_grp}"/>


</td>


</tr>




<!-- Second row in window for Assigned To -->




<tr>


<td>


Assigned To :


</td>


<td>


<!-- <g:ui_reference name="assigned_to" id="assigned_to" table="sys_user" query="active=true" mandatory="true" value="$[grp.user]" /> -->


<!-- <g:ui_reference name="assigned_to" id="assigned_to" table="sys_user" query="active=true" mandatory="true" value="${jvar_assigned_to_user}" /> -->


<!-- <g:ui_reference name="assigned_to" id="assigned_to" table="sys_user_grmember" /> -->


<g:ui_reference name="assigned_to" id="assigned_to" table="sys_user"   query="sys_idIN${jvar_assigned_to_user}" />


</td>


</tr>


</table>




<!-- Third row in window for Reason to Resubmit -->




<table width ="100%">


<tr>


<td>


<g:ui_multiline_input_field name="reason_return" id="reason_return" label="Reason for Returning" value="${jvar_reason_return}" mandatory="true" />


</td>


</tr>




<tr id="dialog_buttons">


<td colspan="2" align="right">


<!-- Pull in 'dialog_buttons_ok_cancel' UI Macro for submit/cancel buttons.'ok' option will call the 'validateComments' Client script function from the UI Page -->


<g:dialog_buttons_ok_cancel ok="return validateReason()" ok_type="button" cancel_type="button" />


</td>


</tr>


</table>




</j:jelly>