'Copy cell from Interactive Grid Oracle Apex

I'm trying to copy a specific cell from an Interactive Grid (which is in Display Only mode, if that matters), and instead of copying the cell I'm in, I'm copying the whole row. I can't seem to find any way to copy just the cell.

APEX versión: Application Express 19.1.0.00.15

Thank you beforehand.



Solution 1:[1]

Oracle Apex does not enable copy functionality to interactive report by purpose. To enable it, you need to use even handler for copy event. This handler should be on the body or document. It can be achieved through Dynamic Action :

Event: Custom Custom Event: copy Selection Type: jQuery Selector jQuery Selector: body

Then add one JavaScript true action with below code:

var text, i, selection, gridSel;

var event = this.browserEvent.originalEvent; // need the clipboard event

// we only care about copy from a grid cell ignore the rest

if ( !$(document.activeElement).hasClass("a-GV-cell") ) {

    return;

}

var view = apex.region("emp").widget().interactiveGrid("getCurrentView"); //change "emp" to you IG static id

if ( view.internalIdentifier === "grid") {

    text = "";

    selection = window.getSelection();

    gridSel = view.view$.grid("getSelection");

    for (i = 0; i < gridSel.length; i++) {

        selection.selectAllChildren(gridSel[i][0]);

        text += selection.toString();

        if (gridSel[i].length > 1) {

            selection.selectAllChildren(gridSel[i][1]);

            text += " \t" + selection.toString();

        }

        text += "";

    }

    selection.removeAllRanges();

    event.clipboardData.setData('text/plain', text);

    event.preventDefault();

}

The above will copy the current grid selection to the clipboard when the user types Ctrl+C while in a grid cell.

Solution 2:[2]

I wonder if the below javascript can be modified in order to trigger 'toggle' actions of interactive grid such 'selection-mode'.

apex.region( "[region static ID] " ).call( "getActions" ).lookup( "[action name]" );

Reference: https://docs.oracle.com/en/database/oracle/application-express/20.1/aexjs/interactiveGrid.html

Solution 3:[3]

If someone is interested, I managed to find the solution. Go on Interactive Grid's attributes--> JavaScript Initialization Code and add the following code that creates a button that copies the selected cell.

    function(config) {

  let $             = apex.jQuery,

toolbarData   = $.apex.interactiveGrid.copyDefaultToolbar(), 
toolbarGroup3 = toolbarData.toolbarFind("actions3");


    toolbarGroup3.controls.push({type: "BUTTON",
                        label: "Copy cell",
                        icon: "fa fa-copy is-blue",
                        iconBeforeLabel: true,
                        iconOnly: false,                       
                        disabled: false,
                        action: "custom-event" // instead of specific action eg "selection-copy", create a custom event
            });

    config.initActions = function( actions ) {

        actions.add( {

            name: "custom-event",

            action: function(event, focusElement) {
                actions.lookup('selection-mode').set(false); // select cell instead of the whole row
                apex.region( "users_id" ).widget().interactiveGrid( "getActions" ).invoke( "selection-copy" ); // copy the selection
                actions.lookup('selection-mode').set(true); // select again the whole row (important in case of master-detail grids)
            
            }

        } );

    }       


config.toolbarData = toolbarData;
  return config;
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Shashi
Solution 2 Aigli Karapostoli
Solution 3 Aigli Karapostoli