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.

Help on UI Page

Tanya10
Tera Contributor

Hi 
I have added one if condition on UI page which is failing. Pasting the code below and have highlighted in red , any help would be appreciated

 <g:evaluate var="jvar_attachment_extensions" jelly="true">
        var scope = new GlideRecord(jelly.jvar_target_table).getTableScope();
        var p = gs.getProperty(scope + '.attachment.extensions', null);
        p;
        var extendedTableFlag;
        var tableUtils = new TableUtils(jelly.jvar_target_table);
        var baseTable = tableUtils.getAbsoluteBase();

    </g:evaluate>
    <g:evaluate var="jvar_attachrole" jelly="true">
        gs.hasRole('sn_hr_core.kb_writer');
    </g:evaluate>
    <!--Scenario 1: Task or CMDB-based table, and not in HR scope -->
    <j2:if test="$[((baseTable.contains('task') || baseTable.contains('cmdb')) &amp;&amp; !scope.contains('sn_hr'))]">
        <h3 style="text-align: center; font-size: 15px; font-weight: bold;">
            Restrict the file upload of size more than 10 MB.
        </h3>
    </j2:if>

    <!--  Scenario 2: On kb_knowledge table, user does NOT have writer role -->
    <j2:if test="$[(baseTable == 'kb_knowledge' &amp;&amp; !jvar_attachrole)]">
        <h3 style="text-align: center; font-size: 15px; font-weight: bold;">
            Restrict the file upload of size more than 10 MB.
        </h3>
    </j2:if>
1 ACCEPTED SOLUTION

Sreeram Nair
Tera Guru

The issue seems to be how those server-side values are exposed to Jelly. In your first <g:evaluate> you compute baseTable, scope, etc., but you never assign any of them to a Jelly variable. In Jelly, <g:evaluate var="X">...</g:evaluate> only publishes the return value of that block (the last expression) into the single variable X. Local variables like baseTable created inside that block aren’t visible to your later <j2:if> tests, so an expression like baseTable == 'kb_knowledge' evaluates against an undefined symbol and the condition fails.

<!-- Make scope available to Jelly -->
<g:evaluate var="jvar_scope" jelly="true">
  new GlideRecord(jelly.jvar_target_table).getTableScope();
</g:evaluate>

<!-- Make base table available to Jelly -->
<g:evaluate var="jvar_base_table" jelly="true">
  new TableUtils(jelly.jvar_target_table).getAbsoluteBase();
</g:evaluate>

<!-- Role check as a boolean Jelly var -->
<g:evaluate var="jvar_has_kb_writer" jelly="true">
  gs.hasRole('sn_hr_core.kb_writer');
</g:evaluate>

<!-- Scenario 1: task or cmdb-derived base table, and not HR scope -->
<j2:if test="$[((jvar_base_table == 'task' || jvar_base_table.contains('cmdb')) && !jvar_scope.contains('sn_hr'))]">
  <h3 style="text-align:center;font-size:15px;font-weight:bold;">
    Restrict the file upload of size more than 10 MB.
  </h3>
</j2:if>

<!-- Scenario 2: kb_knowledge base table and user is NOT a KB writer -->
<j2:if test="$[(jvar_base_table == 'kb_knowledge' && !jvar_has_kb_writer)]">
  <h3 style="text-align:center;font-size:15px;font-weight:bold;">
    Restrict the file upload of size more than 10 MB.
  </h3>
</j2:if>

ɪꜰ ᴍʏ ᴀɴꜱᴡᴇʀ ʜᴀꜱ ʜᴇʟᴘᴇᴅ ᴡɪᴛʜ ʏᴏᴜʀ Qᴜᴇꜱᴛɪᴏɴ, ᴘʟᴇᴀꜱᴇ ᴍᴀʀᴋ ᴍʏ ᴀɴꜱᴡᴇʀ ᴀꜱ ᴛʜᴇ ᴀᴄᴄᴇᴘᴛᴇᴅ ꜱᴏʟᴜᴛɪᴏɴ ᴀɴᴅ ɢɪᴠᴇ ᴀ ᴛʜᴜᴍʙꜱ ᴜᴘ.




ʙᴇꜱᴛ ʀᴇɢᴀʀᴅꜱ


ꜱʀᴇᴇʀᴀᴍ

View solution in original post

2 REPLIES 2

svirkar420
Tera Guru

Hi there @Tanya10 , Here try this jelly script and let me know how it goes.

 

<g:evaluate var="scope" jelly="true">
var gr = new GlideRecord(jelly.jvar_target_table);
gr.getTableScope();
</g:evaluate>

<g:evaluate var="baseTable" jelly="true">
var tableUtils = new TableUtils(jelly.jvar_target_table);
tableUtils.getAbsoluteBase();
</g:evaluate>

<g:evaluate var="jvar_attachrole" jelly="true">
gs.hasRole('sn_hr_core.kb_writer');
</g:evaluate>

Scenario 1: Task or CMDB-based table, and not in HR scope
<j2:if test="$[((baseTable.indexOf('task') != -1 || baseTable.indexOf('cmdb') != -1) && scope.indexOf('sn_hr') == -1)]">
<h3 style="text-align: center; font-size: 15px; font-weight: bold;">
Restrict the file upload of size more than 10 MB.
</h3>
</j2:if>

Scenario 2: On kb_knowledge table, user does NOT have writer role
<j2:if test="$[(baseTable == 'kb_knowledge' && jvar_attachrole == false)]">
<h3 style="text-align: center; font-size: 15px; font-weight: bold;">
Restrict the file upload of size more than 10 MB.
</h3>
</j2:if>

 

If this answer helps you in any way make sure to Mark this as accepted solution and give a thumbs up this will also benefit others as well.
Regards.
Saurabh V.

Sreeram Nair
Tera Guru

The issue seems to be how those server-side values are exposed to Jelly. In your first <g:evaluate> you compute baseTable, scope, etc., but you never assign any of them to a Jelly variable. In Jelly, <g:evaluate var="X">...</g:evaluate> only publishes the return value of that block (the last expression) into the single variable X. Local variables like baseTable created inside that block aren’t visible to your later <j2:if> tests, so an expression like baseTable == 'kb_knowledge' evaluates against an undefined symbol and the condition fails.

<!-- Make scope available to Jelly -->
<g:evaluate var="jvar_scope" jelly="true">
  new GlideRecord(jelly.jvar_target_table).getTableScope();
</g:evaluate>

<!-- Make base table available to Jelly -->
<g:evaluate var="jvar_base_table" jelly="true">
  new TableUtils(jelly.jvar_target_table).getAbsoluteBase();
</g:evaluate>

<!-- Role check as a boolean Jelly var -->
<g:evaluate var="jvar_has_kb_writer" jelly="true">
  gs.hasRole('sn_hr_core.kb_writer');
</g:evaluate>

<!-- Scenario 1: task or cmdb-derived base table, and not HR scope -->
<j2:if test="$[((jvar_base_table == 'task' || jvar_base_table.contains('cmdb')) && !jvar_scope.contains('sn_hr'))]">
  <h3 style="text-align:center;font-size:15px;font-weight:bold;">
    Restrict the file upload of size more than 10 MB.
  </h3>
</j2:if>

<!-- Scenario 2: kb_knowledge base table and user is NOT a KB writer -->
<j2:if test="$[(jvar_base_table == 'kb_knowledge' && !jvar_has_kb_writer)]">
  <h3 style="text-align:center;font-size:15px;font-weight:bold;">
    Restrict the file upload of size more than 10 MB.
  </h3>
</j2:if>

ɪꜰ ᴍʏ ᴀɴꜱᴡᴇʀ ʜᴀꜱ ʜᴇʟᴘᴇᴅ ᴡɪᴛʜ ʏᴏᴜʀ Qᴜᴇꜱᴛɪᴏɴ, ᴘʟᴇᴀꜱᴇ ᴍᴀʀᴋ ᴍʏ ᴀɴꜱᴡᴇʀ ᴀꜱ ᴛʜᴇ ᴀᴄᴄᴇᴘᴛᴇᴅ ꜱᴏʟᴜᴛɪᴏɴ ᴀɴᴅ ɢɪᴠᴇ ᴀ ᴛʜᴜᴍʙꜱ ᴜᴘ.




ʙᴇꜱᴛ ʀᴇɢᴀʀᴅꜱ


ꜱʀᴇᴇʀᴀᴍ