Log user and date upon row addition
/** Log user and date upon row addition** The script checks who and when adds rows to the IJC table.* Whenever a new row is added, username and time are stored in IJC fields.* Attention: fields for username and date must be defined in the IJC table* before running this script.** Usage:* 1. Add User and Date fields into the table* 2. Edit the name of User and Date fields* 3. Run button script** @author Ondrej Svoboda <[email protected]>*/afterEdit= {event ->   //Names of fields where username and date is stored   def userFieldName="username"   def dateFieldName="textDate"   println "after edit operation"    def widget=event.widget  // find user and date fields  def userField=widget.boundFields.find{it.name==userFieldName}  def dateField=widget.boundFields.find{it.name==dateFieldName}  // get the username and date  def vs=widget.vertexState  // get entity from the widget vertex state  def ety=vs.getVertex().getEntity()  // get id of the row you are adding  selectedRowId=vs.getSelectedRowsIds()  // go to the schema  def rs=vs.resultSet  def dataTree=rs.dataTree  def schema=dataTree.schema   // get user   def user=DIFUtilities.findCapability(schema,IJCUserLoginService.class).getMe()   // get date   def today = new Date()   // get entity data provider   def edp = ety.schema.dataProvider.getEntityDataProvider(ety)   // get access to the environment through lock       def lock = edp.lockable.withLock('Updating'){ envRW ->      // control whether date and user fields are filled. If so, do not update them      def data=vs.getData(selectedRowId,DFEnvironmentRO.DEV_NULL)      println data[selectedRowId[0]][userField.id]      if((data[selectedRowId[0]][userField.id]==null) && (data[selectedRowId[0]][dateField.id]==null)) {       // Defines empty map               def vals = [:]               vals[userField.id] = user.getUsername()               // date field is defined as a string, the format can be arbitrary               vals[dateField.id] = today.format("yyyy-MM-dd \'at\' HH:mm:ss")               // Create the DFUpdateDescription and update the DFEntityDataProvider                def ud = DFUpdateDescription.create(ety, selectedRowId, vals)                def submitList = Collections.singletonList(ud)                edp.update(submitList, DFUndoConfig.OFF, envRW)               println "Updating field $userFieldName to value ${user.getUsername()} and field $dateFieldName to value $today"               }     }// by returning false, the action proceeds as expectedreturn false}