Page 1 of 2

Unable to update rich DSPF subfile from RPG

Posted: Mon Jul 26, 2021 8:55 am
by Theju112
Dear Scott and Team,

I have a green screen subfile for which I am attempting to create an equivalent rich DSPF using the "grid" widget.

The first field of each subfile record is an option input field where the user can take an option '1' to select a record and flag it for deletion.

There is a "select all" option which will update the option field of all records to '1'. The intention of this option is to reduce the users efforts to key in the option value for all records.

In the rich DSPF, the option field is a select box widget. I am trying to chain the subfile records based on rrn and update option field value. This works fine in green screen, but in the web screen it just wont update.

RPG CODE
begsr selectAll;                   
                                   
  dow *inkl = *off;                
    exfmt selectW;                 
    if *inke;                      
      rrn# = 1;                    
      dou not %found;              
        Chain rrn# s01;            
        if %found;                 
          option = '1=Select';     
          update s01;              
        endif;                     
        rrn# += 1;                 
      enddo;                       
      *in88 = *on;                 
      leave;                       
    endif;                         
  enddo;                           
  *inkl = *off;                    
endsr;                             
I have defined the choices property value to have one value "1=Select". This is the same value I am using in the RPG. So I am not sure why this isnt updating.

Any help please?

Re: Unable to update rich DSPF subfile from RPG

Posted: Mon Jul 26, 2021 12:18 pm
by Scott Klement
I don't see anything obvious wrong, here. It should work fine. I suggest debugging your code to see what is failing.

Re: Unable to update rich DSPF subfile from RPG

Posted: Tue Jul 27, 2021 6:51 am
by Theju112
Hi Scott,

I am not sure what the issue is. When the select box is replaced with a combo box/ text box, the value is populated as expected. But the select box is failing which confirms that there is some issue on the front-end side. I am not sure if it is an issue with the select widget or if some HTML/JavaScript intricacy that is causing the behavior. Any further suggestions?

Re: Unable to update rich DSPF subfile from RPG

Posted: Tue Jul 27, 2021 10:11 am
by Scott Klement
I don't feel like I know enough about your screen to tell you what's wrong with it. All I really know is that you're using a select box.

Run the program, and press Ctrl-F9 when the failing screen is on the display. This will create a dump of the JSON that was sent to the Profound UI framework -- if you post that JSON here, I can try to re-run your screen.

Re: Unable to update rich DSPF subfile from RPG

Posted: Wed Jul 28, 2021 1:36 am
by Theju112
Dear Scott,

Attached is the json.

Re: Unable to update rich DSPF subfile from RPG

Posted: Wed Jul 28, 2021 7:59 pm
by Scott Klement
Theju112,

1) I looked at the data in your JSON dump, and the option field in the grid is not '1=Select'. Since we agreed that you would reproduce the problem and press Ctrl-F9 to make the dump, I assumed that you had actually run the RPG code that sets 1=Select. However, this was not sent from the RPG program.

2) Then I wrote my own RPG program that would send 1=Select to make sure there wasn't a problem with the Open Access handler. I quickly discovered that the RPG code that you posted to these forums can never run because it checks for *INKE = *ON, and there isn't anything on your screen that turns on that indicator. The "Select All / Clear All" icon on your screen actually works using JavaScript code, it never sets on an indicator and returns control back to RPG.

The JavaScript code in the "Select All / Clear All" option works correctly.

It is very hard to tell you what is wrong with code if I can't see the failing code! I can't read minds.

3) I added a new button that turns on *INKE -- this is only a guess at the problem, because you didn't have this on your screen. After doing this, I was able to make a new Ctrl-F9 dump that shows that the RPG program is, indeed, sending the 1=Select as expected. However, the screen didn't display it.

Looking at the screen, I found the following in the onload event:

Code: Select all

let recordCount = getObj("S01").grid.getRecordCount();
sessionStorage.clear();
getObj("S01").grid.setNumberOfRows(recordCount + 1);
for(let recordIndex=0;recordIndex<=recordCount;)
{
      getObj("S01").grid.setDataValue(recordIndex, "OPTION"," ");
      recordIndex++;
}
getObj("S01").grid.setNumberOfRows(13);
I recommend that you change the sessionStorage.clear() to sessionStorage.removeItem("selected"); Clearing everything in session storage is not a good idea, because other code (including Profound UI itself) may use session storage, and you will wipe out its data.

Also I don't understand why you are changing the number of rows to 13.

Also, you are deliberately wiping out all values in the OPTION field. So, of course, any updates that were made within the RPG program aren't going to work... you're erasing them!

4) To find out if the setDataValue, above, was the only cause of the problem, I commented out all of the code in the onload event. I discovered that the RPG program is sending '1=SELECT' and the choices property is set to '1=Select'. Since these don't match (due to the different upper/lower case) the option was still not selected.

The reason why the RPG code is '1=SELECT' is because you have "Text Transform: Uppercase" in the binding dialog for the OPTION field.
transformUpper.png
transformUpper.png (22.09 KiB) Viewed 5201 times
I change this to "None", and the UPDATEs from the RPG code worked as expected.

Re: Unable to update rich DSPF subfile from RPG

Posted: Thu Jul 29, 2021 2:26 am
by Theju112
Hi Scott,

Since the update was happening successfully when I used a text box instead of a select box, I assumed the issue must be with how I had set up the
select box widget and you would be interested to see only the "front end" code associated to the select widget. Apologies.

Since the back end RPG was not updating the values as required, I came up with a front end "work around" to populate the select boxes with "1=SELECT".

The onload and onclick events are part of this work around.

The work around uses the script below to set the values. This script would fire on an onClick event of the "Select All" button.

Code: Select all

let recordCount = getObj("S01").grid.getRecordCount();
let isSelected = sessionStorage.getItem('selected');

console.log(isSelected);

getObj("S01").grid.setNumberOfRows(recordCount + 1);

if ((isSelected === 'off') || (isSelected === null))
{
  for(let recordIndex=0;recordIndex<=recordCount;)
  {
      getObj("S01").grid.setDataValue(recordIndex, "OPTION","1=Select");
      recordIndex++;
  }
  sessionStorage.setItem('selected','on');
}
else{
  for(let recordIndex=0;recordIndex<=recordCount;)
  {
      getObj("S01").grid.setDataValue(recordIndex, "OPTION"," ");
      recordIndex++;
  }
  sessionStorage.setItem('selected','off');
}
  getObj("S01").grid.setNumberOfRows(13);
The OnLoad script which you saw is to clear the values the above script populates. This solution works as required by me.

To replicate the exact issue I was facing earlier, I have re-created the attached dump after removing the onload and onclick scripts I had added.

Now when the user clicks the select all button, its response is tied to indicator *in11. When *in11 is on, the selectAll subroutine is executed from where exfmt selectW is done which displays a confirmation screen. If the user confirms by pressing F5 (*inke), the records should be updated.

But it still doesn't work even after setting text transform to "None" as you suggested.

The RPG is now assigning a value of '1=Select'. This matches the value I have set in the choices property of the select box. I believe this should
rule out the possibility that the RPG is passing an invalid value.

As was observed earlier, if I use a text box instead of a select box, the value gets updated successfully.

I have confirmed in debug mode that the code that assigns the value to the select box and updates the subfile is indeed executed.

Now to answer your question "Also I don't understand why you are changing the number of rows to 13" - as I found out while trying to implement my
work around in the onclick event, the grid.setDataValue sets the values of only those records which are visible on the screen. When it is srolled down,
the select boxes are blank. In order to solve this, I display all the records in the grid using "getObj("S01").grid.setNumberOfRows(recordCount + 1);"
Then I reset it back to display 13 rows using getObj("S01").grid.setNumberOfRows(13) as the grid should initially display only 13 records to fit on the screen.

Hope I am clear and have not confused you further. Please do let me know if you need further details.

Re: Unable to update rich DSPF subfile from RPG

Posted: Thu Jul 29, 2021 6:26 pm
by Scott Klement
Theju112 wrote: Thu Jul 29, 2021 2:26 am Hope I am clear and have not confused you further. Please do let me know if you need further details.
To the best of my knowledge, I've already given you the solutions? Is there more that you're having trouble with?

Re: Unable to update rich DSPF subfile from RPG

Posted: Fri Jul 30, 2021 1:07 am
by Theju112
Hi Scott,

Yes, I am still facing the same issue. The RPG is not updating the select box values as expected. The dump attached in my previous reply was created after the update operation was completed by the RPG.

As you have suggested, I have tried setting Text transform = "none" but it still doesn't work.

Re: Unable to update rich DSPF subfile from RPG

Posted: Thu Aug 19, 2021 12:20 am
by Theju112
Hi Scott,

Please let me know if you got a chance to look at the JSON I had attached in my previous post.