两个Dim Array,用户的多个角色!角色在自己的列中

时间:2015-03-30 11:37:26

标签: eclipse-scout

我正在使用eclipse侦察兵!现在我要列出所有用户!多数民众赞成,但我的数据库结构是这样的:

+----+--------+-----------+---------------+-----------+--------+----------+
| ID |  Name  |  Surname  | Administrator | Moderator | Editor | Operator |
+----+--------+-----------+---------------+-----------+--------+----------+
|  1 | myname | mysurname |             1 |         1 |      0 |        0 |
+----+--------+-----------+---------------+-----------+--------+----------+

所以,当我填充表格时,我需要显示单个用户的所有角色!例如:如果用户“test”具有管理员,主持人的角色,则表行必须如下所示:

╔════╦═════════════╦══════════╦══════════════════════════╗
║ ID ║ Usernameame ║ Password ║          Roles           ║
╠════╬═════════════╬══════════╬══════════════════════════╣
║  1 ║ test        ║ test     ║ administrator, moderator ║
╚════╩═════════════╩══════════╩══════════════════════════╝

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

你有不同的可能性。一种可能性是在客户端进行;这是我将在这里描述的解决方案:

创建一个包含这些行的表:

  • ID:长列
  • 名称:字符串列
  • 姓:字符串列
  • 管理员:布尔列(不可显示)
  • 主持人:布尔列(不可显示)
  • 编辑:布尔列(不可显示)
  • 操作员:布尔列(不可显示)
  • 角色:字符串列,从表数据中忽略(在formData或TablePageData中)

在此示例中,表位于TableField中,但对于TablePage,它的工作方式完全相同。

@Order(10.0)
@FormData(sdkCommand = FormData.SdkCommand.USE, value = AbstractTableFieldBeanData.class, defaultSubtypeSdkCommand = FormData.DefaultSubtypeSdkCommand.CREATE)
public class PersonsTableField extends AbstractTableField<PersonsTableField.Table> {

  @Override
  protected int getConfiguredGridH() {
    return 5;
  }

  @Override
  protected int getConfiguredGridW() {
    return 2;
  }

  @Override
  protected String getConfiguredLabel() {
    return TEXTS.get("Persons");
  }

  @Order(10.0)
  public class Table extends AbstractExtensibleTable {

    public NameColumn getNameColumn() {
      return getColumnSet().getColumnByClass(NameColumn.class);
    }

    public SurnameColumn getSurnameColumn() {
      return getColumnSet().getColumnByClass(SurnameColumn.class);
    }

    public ModeratorColumn getModeratorColumn() {
      return getColumnSet().getColumnByClass(ModeratorColumn.class);
    }

    public EditorColumn getEditorColumn() {
      return getColumnSet().getColumnByClass(EditorColumn.class);
    }

    public OperatorColumn getOperatorColumn() {
      return getColumnSet().getColumnByClass(OperatorColumn.class);
    }

    public RolesColumn getRolesColumn() {
      return getColumnSet().getColumnByClass(RolesColumn.class);
    }

    public AdministratorColumn getAdministratorColumn() {
      return getColumnSet().getColumnByClass(AdministratorColumn.class);
    }

    public IdColumn getIdColumn() {
      return getColumnSet().getColumnByClass(IdColumn.class);
    }

    @Order(10.0)
    public class IdColumn extends AbstractLongColumn {

      @Override
      protected String getConfiguredHeaderText() {
        return TEXTS.get("id");
      }
    }

    @Order(20.0)
    public class NameColumn extends AbstractStringColumn {

      @Override
      protected String getConfiguredHeaderText() {
        return TEXTS.get("Name");
      }
    }

    @Order(30.0)
    public class SurnameColumn extends AbstractStringColumn {

      @Override
      protected String getConfiguredHeaderText() {
        return TEXTS.get("Surname");
      }
    }

    @Order(40.0)
    public class AdministratorColumn extends AbstractBooleanColumn {

      @Override
      protected boolean getConfiguredDisplayable() {
        return false;
      }
    }

    @Order(50.0)
    public class ModeratorColumn extends AbstractBooleanColumn {
      @Override
      protected boolean getConfiguredDisplayable() {
        return false;
      }
    }

    @Order(60.0)
    public class EditorColumn extends AbstractBooleanColumn {
      @Override
      protected boolean getConfiguredDisplayable() {
        return false;
      }
    }

    @Order(70.0)
    public class OperatorColumn extends AbstractBooleanColumn {
      @Override
      protected boolean getConfiguredDisplayable() {
        return false;
      }
    }

    @Order(80.0)
    @ColumnData(SdkColumnCommand.IGNORE)
    public class RolesColumn extends AbstractStringColumn {

      @Override
      protected String getConfiguredHeaderText() {
        return TEXTS.get("Roles");
      }

      @Override
      protected void execDecorateCell(Cell cell, ITableRow row) throws ProcessingException {
        cell.setText(StringUtility.join(", ",
            BooleanUtility.nvl(getAdministratorColumn().getValue(row)) ? TEXTS.get("Administrator") : null,
            BooleanUtility.nvl(getModeratorColumn().getValue(row)) ? TEXTS.get("Moderator") : null,
            BooleanUtility.nvl(getEditorColumn().getValue(row)) ? TEXTS.get("Editor") : null,
            BooleanUtility.nvl(getOperatorColumn().getValue(row)) ? TEXTS.get("Operator") : null
            ));
      }
    }
  }
}

请注意execDecorateCellRolesColumn的实施情况。根据不可见列中包含的值计算文本。另请注意此列顶部的ColumnData注释。

4个不可见列的属性Displayable设置为false

在服务器上,如果要放置一些数据,可以这样做:

PersonsTable tableData = formData.getPersonsTable();
PersonsTableRowData rowData = tableData.addRow();
rowData.setId(42L);
rowData.setName("John");
rowData.setSurname("Johnny");
rowData.setAdministrator(Boolean.TRUE);
rowData.setModerator(Boolean.TRUE);
rowData.setEditor(Boolean.FALSE);
rowData.setOperator(Boolean.FALSE);

请注意,由于客户端中的rowData.setRoles(String),因此没有rowData.getRoles()@ColumnData(SdkColumnCommand.IGNORE)

当然我认为您想使用SQL语句来完成它。你会以这样的结局结束:

SQL.selectInto("SELECT " +
    " id, " +
    " name, " +
    " surname, " +
    " administrator, " +
    " moderator, " +
    " editor, " +
    " operator " +
    " FROM persons " +
    " INTO " +
    " :{personsTable.id}, " +
    " :{personsTable.name}, " +
    " :{personsTable.surname}, " +
    " :{personsTable.administrator}, " +
    " :{personsTable.moderator}, " +
    " :{personsTable.editor}, " +
    " :{personsTable.operator}",
    formData);

这是我的结果:

MyForm example - Eclipse Scout

相关问题