Page 1 of 1
Using a screen value as a host variable.
Posted: Thu Jan 14, 2016 12:42 pm
by brianhd71
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?
Re: Using a screen value as a host variable.
Posted: Thu Jan 14, 2016 1:46 pm
by Scott Klement
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.
Re: Using a screen value as a host variable.
Posted: Thu Jan 14, 2016 6:15 pm
by brianhd71
Thanks! That worked out well!
Re: Using a screen value as a host variable.
Posted: Sun Jul 21, 2019 1:32 am
by blakenielson1
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.
Re: Using a screen value as a host variable.
Posted: Sun Jul 21, 2019 4:32 pm
by Megan
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:
Code: Select all
var choiceBoxID = "choiceBox." + fieldRow;
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:
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.)
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,
Re: Using a screen value as a host variable.
Posted: Mon Jul 22, 2019 2:45 pm
by blakenielson1
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');