docs: public FieldList setHandle(Object bookmark, int iHandleType) throws DBException
      {
          if ((iHandleType == DBConstants.BOOKMARK_HANDLE) && (bookmark instanceof String))     // It is okay to pass in a string, but convert it first!
              if ((this.getRecord().getCounterField() != null) || (this.getRecord().getKeyArea(DBConstants.MAIN_KEY_AREA).getKeyFields() > 1))
          {   // As a convenience convert a string bookmark to the proper bookmark
              try   {
              	bookmark = Converter.stripNonNumber(bookmark.toString());
                  bookmark = new Integer((String)bookmark);
              } catch (NumberFormatException ex)  {
                  bookmark = new StrBuffer((String)bookmark);
              }
          }
          if ((this.getRecord().getEditMode() == Constants.EDIT_IN_PROGRESS)
              || (this.getRecord().getEditMode() == Constants.EDIT_CURRENT))
          {
              Object oldBookmark = this.getHandle(iHandleType);
              if (bookmark != null) if (bookmark.equals(oldBookmark)) if (!this.getRecord().isModified(false))
                  return this.getRecord();        // This is already your current record!
          }
  
          m_objectID = null;      // No current record
          m_dataSource = null;
          if (iHandleType == DBConstants.FULL_OBJECT_HANDLE)
          {
              if (!(bookmark instanceof String))
                  return null;
              int iIndex = ((String)bookmark).lastIndexOf(HANDLE_SEPARATOR);
              if ((iIndex == -1) || (iIndex == ((String)bookmark).length() - 1))
                  return null;
              String strRecord = ((String)bookmark).substring(0, iIndex);
              int iRecordIndex = strRecord.lastIndexOf(HANDLE_SEPARATOR, iIndex - 1);
              int iDBIndex = strRecord.lastIndexOf(HANDLE_SEPARATOR, iRecordIndex - 1);
              if (!strRecord.substring(iRecordIndex + 1, iIndex).equalsIgnoreCase(this.getRecord().getTableNames(false)))
                  if (!strRecord.substring(iDBIndex + 1, iRecordIndex).equalsIgnoreCase(this.getDatabase().getDatabaseName(false)))
                      return null;    // Not the correct record or database
              bookmark = ((String)bookmark).substring(iIndex + 1);
              iHandleType = DBConstants.OBJECT_ID_HANDLE;
          }
          m_bIsOpen = false;
          boolean bSuccess = this.doSetHandle(bookmark, iHandleType);
          m_bIsOpen = true;
          if (bSuccess)
          {
              m_iRecordStatus = DBConstants.RECORD_NORMAL;
              this.getRecord().setEditMode(Constants.EDIT_CURRENT);
              Object[] rgobjEnabledFields = null;
              try {
                  rgobjEnabledFields = this.getRecord().setEnableFieldListeners(false);
                  this.dataToFields(this.getRecord());
              } catch (DBException ex)    {
                  throw ex;
              } finally {
                  this.getRecord().setEnableFieldListeners(rgobjEnabledFields);
              }
              this.getRecord().handleValidRecord(); // Display Fields
              return this.getRecord();
          }
          else
          {
              m_iRecordStatus = DBConstants.RECORD_INVALID | DBConstants.RECORD_AT_BOF | DBConstants.RECORD_AT_EOF;
              this.getRecord().handleNewRecord();     //? Display Fields (Should leave record in an indeterminate state!)
              this.getRecord().setEditMode(Constants.EDIT_NONE);  // Unknown status
              return null;
          }
      }