I was wondering if there was a way to use a host variable in the Choices Selection Criteria property instead of having to go back to the RPG to get my values.
Every time do a pui.click(); to get a dynamic query, the page refreshes, all my select boxes clear out and it just looks clunky. I want to be able to search for data based on a screen value using only front end programming. Is there a script I can use or syntax for a host variable?
Using a screen value as a host variable.
-
- Profound User
- Posts: 36
- Joined: Thu Jan 02, 2014 6:20 pm
- First Name: Brian
- Last Name: Lannoye
- Company Name: Dealertrack Technologies
- Phone: 801.617.1806
- State / Province: Utah
- Zip / Postal Code: 84095
- Country: United States
- Contact:
-
- Experienced User
- Posts: 2711
- Joined: Wed Aug 01, 2012 8:58 am
- First Name: Scott
- Last Name: Klement
- Company Name: Profound Logic
- City: Milwaukee
- State / Province: Wisconsin
Re: Using a screen value as a host variable.
Choices selection criteria can have parameter markers. The parameter markers will work with the choices parameter value property, letting you specify a value in your display file.
For example, perhaps you only want to display rows where STATE='X' in your select box... but which state is shown will depend on what the user types in a "state" field, elsewhere on the display.
What you'd do in your properties is set these:
choices selection criteria: STATE=?
choices parameter value: script: pui,get("state")
These properties are evaluated when the dsplay loads, so when the display loads it gets the value of the "state" field on the display and puts it in the SQL statement used to load the select box.
But, when the user changes the "state" field, you want it to update th select box. So in the 'onchange' event for the state field, you put this:
applyProperty("mySelectBox", "choices parameter value", get(this));
applyProperty("mySelectBox", "field type", "select box');
Now when someoen changes the state field, it will trigger a change to the choices parameter value in the select box. re-applying the "field type" will make it re-run the SQL and repopulate the dropdown list. This is all done without doing pui.click or sending control back to RPG.
For example, perhaps you only want to display rows where STATE='X' in your select box... but which state is shown will depend on what the user types in a "state" field, elsewhere on the display.
What you'd do in your properties is set these:
choices selection criteria: STATE=?
choices parameter value: script: pui,get("state")
These properties are evaluated when the dsplay loads, so when the display loads it gets the value of the "state" field on the display and puts it in the SQL statement used to load the select box.
But, when the user changes the "state" field, you want it to update th select box. So in the 'onchange' event for the state field, you put this:
applyProperty("mySelectBox", "choices parameter value", get(this));
applyProperty("mySelectBox", "field type", "select box');
Now when someoen changes the state field, it will trigger a change to the choices parameter value in the select box. re-applying the "field type" will make it re-run the SQL and repopulate the dropdown list. This is all done without doing pui.click or sending control back to RPG.
-
- Profound User
- Posts: 36
- Joined: Thu Jan 02, 2014 6:20 pm
- First Name: Brian
- Last Name: Lannoye
- Company Name: Dealertrack Technologies
- Phone: 801.617.1806
- State / Province: Utah
- Zip / Postal Code: 84095
- Country: United States
- Contact:
Re: Using a screen value as a host variable.
Thanks! That worked out well!
-
- New User
- Posts: 9
- Joined: Tue Aug 14, 2018 8:57 pm
- First Name: Blake
- Last Name: Nielson
- Company Name: Revolos
- City: Atlanta
- State / Province: Georgia
- Country: United States
- Contact:
Re: Using a screen value as a host variable.
Scott is there a way to use the applyProperty in a updatable grid with a select box? It works great in a form, but I have not been able to replicate this functionality in a grid.
- Megan
- Profound Logic Staff Member
- Posts: 90
- Joined: Mon Sep 11, 2017 12:15 pm
- First Name: Megan
- Last Name: Bond
- Company Name: Profound Logic
- Phone: 5623227473
- State / Province: California
- Zip / Postal Code: 92692
- Country: United States
- Contact:
Re: Using a screen value as a host variable.
Hello Blake,
When updating grid fields, are you adding the row number to the id of the widget? Because HTML IDs are expected to be unique to each element, they cannot be duplicated, unless you are intentionally overwriting an existing element. This can cause all kinds of display issues, though, so it is not suggested, there are better ways to handle such. Because of this, each row element has the row appended to the ID. For example, if I added a select box to a grid with ID "choiceBox", then the select box on the 7th row would have ID "choiceBox.7".
There are a variety of ways to get the correct element ID, depending on what event you are using to trigger the refresh of the select box choices. The basic format of "generating" the ID of a widget in a particular row in JavaScript:
Where fieldRow would have the record number of the field as written to the grid/subfile. We do provided row information to events of grid elements in one or more of the following variables, depending on the event:
For the element IDs, you'll want to use rrn if available to the event or row if it is not when generating field IDs of widgets in a grid that can be sorted or filtered in such a way that it would cause their grid position to be different from their record number, which would cause rowNumber to provide the wrong row in regards to what you are looking for.
I also have examples of parsing RRNs from the ID of an element, should you need to for some reason and row/rrn/rowNumber won't work, in my workspace here: https://noderun.com/ide/megan_bond/parse-rrn-from-id/.
The workspace can be forked and you would then be able to go through and uncomment the code in events of the widgets you would like to see the results of. They are currently uncommented so that they don't flood the browser console with messages. To view the browser console in modern browser, you can press Ctrl + Shift + I or Ctrl + Shift + J. Please note that IE is not a modern browser, F12 or the browser menu is instead needed to open the console.
More information on dynamic select boxes can be found here: https://blog.profoundlogic.com/profound ... tered-data.
I hope this helps!
Thanks,
When updating grid fields, are you adding the row number to the id of the widget? Because HTML IDs are expected to be unique to each element, they cannot be duplicated, unless you are intentionally overwriting an existing element. This can cause all kinds of display issues, though, so it is not suggested, there are better ways to handle such. Because of this, each row element has the row appended to the ID. For example, if I added a select box to a grid with ID "choiceBox", then the select box on the 7th row would have ID "choiceBox.7".
There are a variety of ways to get the correct element ID, depending on what event you are using to trigger the refresh of the select box choices. The basic format of "generating" the ID of a widget in a particular row in JavaScript:
Code: Select all
var choiceBoxID = "choiceBox." + fieldRow;
Code: Select all
row - contains the record number as written to the grid/subfile. (Intended to be fully deprecated at some point for most/all events.)
rrn - contains the record number as written to the grid/subfile. (Recent Profound UI releases only.)
rowNumber - contains the current ordered position of record after filters and sorts are applied. (Recent Profound UI releases only.)
I also have examples of parsing RRNs from the ID of an element, should you need to for some reason and row/rrn/rowNumber won't work, in my workspace here: https://noderun.com/ide/megan_bond/parse-rrn-from-id/.
The workspace can be forked and you would then be able to go through and uncomment the code in events of the widgets you would like to see the results of. They are currently uncommented so that they don't flood the browser console with messages. To view the browser console in modern browser, you can press Ctrl + Shift + I or Ctrl + Shift + J. Please note that IE is not a modern browser, F12 or the browser menu is instead needed to open the console.
More information on dynamic select boxes can be found here: https://blog.profoundlogic.com/profound ... tered-data.
I hope this helps!
Thanks,
-
- New User
- Posts: 9
- Joined: Tue Aug 14, 2018 8:57 pm
- First Name: Blake
- Last Name: Nielson
- Company Name: Revolos
- City: Atlanta
- State / Province: Georgia
- Country: United States
- Contact:
Re: Using a screen value as a host variable.
Megan,
Thanks so much this is exactly the info I needed to make this work I added the following code to my combo box and it works like a champ!
var fname = getObj("RTUPDATE_Grid").grid.getDataValue(row, "FILENAME");
rrnRowNum = getObj("RTUPDATE_Grid").grid.getRowNumber(rrn);
var fieldnameID = 'FIELDNAME' + '.' + rrnRowNum;
applyProperty(fieldnameID,'choices selection criteria',"FILENAME = ?");
applyProperty(fieldnameID,'choices parameter value',fname);
applyProperty(fieldnameID,'field type','select box');
Thanks so much this is exactly the info I needed to make this work I added the following code to my combo box and it works like a champ!
var fname = getObj("RTUPDATE_Grid").grid.getDataValue(row, "FILENAME");
rrnRowNum = getObj("RTUPDATE_Grid").grid.getRowNumber(rrn);
var fieldnameID = 'FIELDNAME' + '.' + rrnRowNum;
applyProperty(fieldnameID,'choices selection criteria',"FILENAME = ?");
applyProperty(fieldnameID,'choices parameter value',fname);
applyProperty(fieldnameID,'field type','select box');
Who is online
Users browsing this forum: No registered users and 3 guests