TineO
TineO

Reputation: 1033

Button to change selected records

I have an interactive grid with a bunch of records, and I want to set up a button on the page that changes one column in all records currently selected.

Running APEX 18.2, the IG has a whole bunch of columns and I want to change just one of them, but on a whole bunch of rows, so I do need a button. The IG has ROWID as PK because the actual PK is assembled from 4 different columns.

I have spent some time googling this issue and have found a couple people with solutions:

http://thejavaessentials.blogspot.com/2017/03/getting-selected-rows-in-oracle-apex.html

This is the first, and simplest solution. But it doesn't return any rowid or anything like that, it returns the value in the first column.

Then I also found

http://apex-de.blogspot.com/2018/09/update-several-rows-in-tabular-form-grid.html

and

https://ruepprich.wordpress.com/2017/03/23/bulk-updating-interactive-grid-records/

Which are pretty similair and seem to be the best for me, but I get a Javascript error in the console: http://prntscr.com/n5wvqj

And I dont really know much Javascript, so I dont know what went wrong or how to best fix it.

I set up a Dynamic action on button click that executes Javascript and I have the selected element being the region named CUR_STAT. var record;
//Identify the particular interactive grid
var ig$ = apex.region("CUR_STAT").widget();

//Fetch the model for the interactive grid  
var grid    = ig$.interactiveGrid("getViews","grid");  

//Fetch the model for the interactive grid  
var model   = ig$.interactiveGrid("getViews","grid").model;  

//Fetch selected records  
var selectedRecords = apex.region("CUR_STAT").widget().interactiveGrid("getViews","grid").view$.grid("getSelectedRecords");  

//Loop through selected records and update value of the AVT_OBR column  
for (idx=0; idx < selectedRecords.length; idx++)   
{  
//Get the record  
record = model.getRecord(selectedRecords[idx][0]);  

// set Value for column AVT_OBR on "D"     
model.setValue(record,"AVT_OBR", 'D');  

       }  

The column named AVT_OBR is a select list with display values(DA, NE) and return values(D, N). But I tried having it be a text field and it didnt help.

I want to be able to select multiple columns and change the data in those entries.

If possible I would also like to be able to change data in such a way in a hidden column. Or if I could get all the ROWIDs for selected records and execute a PLSQL block with them.

Upvotes: 0

Views: 2833

Answers (1)

TineO
TineO

Reputation: 1033

Ended up with noone responding so I spent a lot of time and finally came up with a solution.

var g = apex.region('myIG').widget().interactiveGrid('getViews','grid');  
var r = g.getSelectedRecords();  
for(i = 0; i < r.length; i++) {   
g.model.setValue(r[i], 'myColumn', 'Value');
}

For some reason none of the solutions I found had worked. But I learned from those solutions and made this simple piece of code that does what I need.

Also, I was wanting to set up so I could do this set value on a hidden column, I achieved this by just having the column visible and editable, but then when running the page I clicked on the column and hid it, and set the current view as the default report.

If anyone stumbles upon this question, I hope it helps.

Upvotes: 3

Related Questions