1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import groovy.swing.SwingBuilder import java.awt.FlowLayout import com.im.df.api.support.SelectionDescription def updateRow = { rs, field, value -> //variable initiation def rootVS = rs.rootVertexState def rowSelected = null def ety = field.getEntity() def edp = ety.schema.dataProvider.getEntityDataProvider(ety) // Find id of the row to update -- ie. selected row SelectionDescription sel = rootVS.getSelection() if (sel.isSingleRow()) { rowSelected = sel.getMaxSelectionIndex() } else { println "More than one row is selected. The rows have NOT been updated." return } def id = rootVS.ids[rowSelected] //create lock edp.lockable.withLock( 'Updating' ) { envRW -> // Assign value to field def vals = [:] vals[field.id] = value // Create the DFUpdateDescription and update the DFEntityDataProvider def ud = DFUpdateDescription.create(ety, id, vals) def submitList = Collections.singletonList(ud) edp.update(submitList, DFUndoConfig.OFF, envRW) } } onDoubleClick = { event -> def swing = new SwingBuilder() def gui = swing.frame(title: 'DropDown' , size :[ 200 , 120 ], locationRelativeTo: null ) { //Create dialog and center position panel(layout: new FlowLayout()) { panel(layout: new FlowLayout()) { comboBox(id: 'clinicalTrial' , items:[ "Phase 1" , "Phase 2" , "Phase 3" , "Phase 4" ], selectedIndex: 2 ) } panel(layout: new FlowLayout()) { button( 'OK' ,preferredSize:[ 80 , 24 ], actionPerformed:{ //An action performed - fetching variables def field = event.widget.boundFields[ 0 ] def rs = event.widget.form.resultSet def value = swing.variables.clinicalTrial.selectedItem //and use it as parameters for updateRow method updateRow(rs, field, value) println swing.variables.clinicalTrial.selectedItem // Close dialog dispose() }) button( 'Cancel' ,preferredSize:[ 80 , 24 ], actionPerformed:{ dispose() }) } } } gui.show() } |
Versions: This script has been tested on IJC version 6.0.