docs: public int processGridChange(BaseMessage message)
      {
          Object bookmark = message.get(DBConstants.STRING_OBJECT_ID_HANDLE);
          if (bookmark instanceof String)
              bookmark = Integer.parseInt((String)bookmark);  // Must be an Integer to compare correctly
          GridTable gridTable = (GridTable)m_record.getTable();
          int iIndex = gridTable.findElement(bookmark, DBConstants.BOOKMARK_HANDLE);
          if (iIndex != -1)
          {
              DataRecord dataRecord = (DataRecord)gridTable.elementAt(iIndex);
              try   {
                  Record record = (Record)m_record.clone();
                  for (int i = 0; i < m_record.getFieldCount(); i++)
                  {
                      record.getField(i).setSelected(m_record.getField(i).isSelected());
                  }
                  dataRecord.getBuffer().bufferToFields(record, DBConstants.DONT_DISPLAY, DBConstants.INIT_MOVE);
                  boolean rgbModified[] = null;
                  synchronized (m_record)
                  {
                      try {
                          Object objectID = m_record.getHandle(DBConstants.BOOKMARK_HANDLE);
                          if (bookmark != null)
                              if (bookmark.equals(objectID))
                          {
                              {   // Don't allow user to do anything while I check these changes
                                  rgbModified = m_record.getModified();
                              }
                          }
                      } catch (DBException ex) {
                          ex.printStackTrace();   // Never
                      }
                  }
                  for (int i = 0; i < m_record.getFieldCount(); i++)
                  {
                      boolean bModified = false;
                      if (rgbModified != null)
                          bModified = rgbModified[i];
                      record.getField(i).setModified(bModified);
                  }
                  this.updateFields(record, message, true);
                  dataRecord.getBuffer().fieldsToBuffer(record);
                  record.free();
                  RecordOwner recordOwner = m_record.getRecordOwner();
                  if (recordOwner != null)
                  {
                      Object source = recordOwner;
                      int iRecordMessageType = DBConstants.CACHE_UPDATE_TYPE;
                      RecordMessageHeader messageHeader = new RecordMessageHeader(m_record, bookmark, source, iRecordMessageType, null);
                      BaseMessage messageNew = new RecordMessage(messageHeader);
                      ((Application)recordOwner.getTask().getApplication()).getMessageManager().sendMessage(messageNew);
                  }
              } catch (CloneNotSupportedException ex)   {
                  ex.printStackTrace();
              }
          }
          return DBConstants.NORMAL_RETURN;
      }