How to pass jelly variables between dynamic blocks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-24-2015 11:11 AM
I am in the process of updating some of our CMS pages, and I am using dynamic blocks as the core of this work.
I am using the following line to call other dynamic blocks into parent blocks:
<g:content_block type="content_block_programmatic" id="[dynamic block sys_id]"/>
I have 5 dynamic blocks that are nearly the same html format, with slightly different data. I would like combine these dynamic blocks into a single entity and then pass the necessary data to each block in a loop, similar to the following (this does not work):
<g:evaluate>
/* define data used to build navigation elements */
var categories = [
{
'name':'common-requests',
'nav_title': 'Common Requests'
} /* define more array entries */
];
</g:evaluate>
/* loop over categories array and read up title and category name */
<j:forEach items="${categories}" var="jvar_category">
<g:evaluate jelly="true">
var name = jelly.jvar_category.name;
var title = jelly.jvar_category.nav_title;
</g:evaluate>
/** want to be able to access variables "name" and "title" from inside this dynamic block */
<g:content_block type="content_block_programmatic" id="e93497172bee8e00663d1c9069da15c3"/>
</j:forEach>
This would work similar to a template in any other server-side web language...but I am unable to figure out how to pass the data I have between these two dynamic blocks.
Thanks for the help
- Labels:
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-24-2015 11:36 AM
http://wiki.servicenow.com/index.php?title=Jelly_Tags#macro_invoke_tag
Re: Re: Dynamic Content Block Values
Solution was to transition the child dynamic block to a UI macro:
UI Macro: test_ui_macro1
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<div style="color: red;">${jvar_param1} </div>
</j:jelly>
Dynamic block parent_block
<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<j:set var="jvar_variable1" value="This is a sample macro variable."/>
<g:macro_invoke macro="test_ui_macro1" param1="${jvar_variable1}" />
</j:jelly>
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-19-2017 09:09 AM
The session can also be used to pass data between dynamic blocks. I am calling a child dynamic block from a parent dynamic block, and I cant use a macro b/c I need the two -phase component available in a dynamic block.
http://wiki.servicenow.com/index.php?title=GlideSession#gsc.tab=0
in the parent dynmaic block:
<g:evaluate jelly="true">
var session = gs.getSession();
session.putClientData('my-session-data1', jelly.jvar_ritm_sysid);
</g:evaluate>
and in the child dynamic block
<g:evaluate var="jvar_ritm_sysid"> |
var session = gs.getSession();
var ritm_sysid = session.getClientData('my-session-data1');
ritm_sysid; |
</g:evaluate>
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-19-2017 01:27 PM
I define the variable in the layout as a global variable so its shared. You can also pass it via a function call, but each function would need to have a unique name, or store/update it in a hidden input element, and retrieve the value from the form element
Lazy way: Declare the jelly var in the layout.
Not-Lazy way: Pass it to unique functions, between the two, or do the form element update.