Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Get record details based on UI action in UI page

Shubham Gagneja
Tera Guru

Hello,
I am trying to get record details based on my custom table form in workspace. I have 4 fields on my form, last name, first name, gender and dob. If a user enters value, there is a ui action checks the user info from my custom table based on the field value and opens a ui page displaying the records. I created the ui page and i did call it and i can see the ui page as a modal but info is not there. 
Can someone help me with the logic?

6 REPLIES 6

Hi @Shubham Gagneja , I did my best since Show Frame was new to me, but I managed to populate the table with data. I've included a sample code and hope you can make the necessary adjustments.

  1. In UI Action Workspace Client Script - 
function onClick(g_form) {
    var firstName = 'Abel';
    // Build query parameters for passing to the UI Page
    var params = {
        first_name: firstName,
    };
    // Convert params object to URL query string
    var queryString = Object.keys(params)
        .map(key => key + '=' + encodeURIComponent(params[key]))
        .join('&sysparm_');
    g_form.addErrorMessage(queryString);
    var uipageID = "b80c0f41c3a0ae1034e250e1b401313f";
    g_modal.showFrame({
        url: '/ui_page.do?sys_id=' + uipageID +'&sysparm_'+queryString,
        title: 'Contender Search Results',
        size: 'xl',
        height: 500
    });
}​
  • UI Page HTML -
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    <g:evaluate var="jvar_name" jelly="true" object="true">
        var sysparm_name = gs.action.getGlideURI().getMap().get('sysparm_first_name');
        sysparm_name;
    </g:evaluate>
    <g:evaluate jelly="true">
        var contenders = [];
        var userGR = new GlideRecord('sys_user');
        userGR.addEncodedQuery("active=true");
        userGR.addEncodedQuery('nameSTARTSWITH'+jelly.jvar_name)
        userGR.query();
        while (userGR.next()) {
        contenders.push({
        name: userGR.getValue("last_name") + ", " + userGR.getValue("first_name"),
        email: userGR.getValue("email"),
        calendar_integration: userGR.getDisplayValue("calendar_integration"),
        user_type: userGR.getValue("u_usertype"),
        mobile_phone: userGR.getValue("mobile_phone"),
        preferred_language: userGR.getValue("preferred_language")
        });
        }
    </g:evaluate>
    <div class="container">
        <h2>${jvar_firstName}</h2>
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Email</th>
                    <th>Calendar Integration</th>
                    <th>User Type</th>
                    <th>Mobile Phone</th>
                    <th>preferred Language</th>
                </tr>
            </thead>
            <tbody>
                <j:forEach var="jvar_obj" items="${contenders}">
                    <tr>
                        <td>${jvar_obj.name}</td>
                        <td>${jvar_obj.email}</td>
                        <td>${jvar_obj.calendar_integration}</td>
                        <td>${jvar_obj.user_type}</td>
                        <td>${jvar_obj.mobile_phone}</td>
                        <td>${jvar_obj.preferred_language}</td>
                    </tr>
                </j:forEach>
            </tbody>
        </table>
    </div>
</j:jelly>​

I have not added any client scripts or processing scripts. Please see the results: (I am only returning users whose name starts with Abel which is passed through the URL from the UI action)

SC1.png

If I remove that condition - SC2.png 

Shubham Gagneja
Tera Guru

Thanks a lot! I did achieve it somehow haha but client wanted very OOTB approach and since this was high customization, i ended up finding a workaround. But thanks for this, this solution is great!