これを行う可能性はさまざまです。1 つの可能性は、クライアント側で行うことです。これが私がここで説明する解決策です:
これらの行を含むテーブルを作成します。
- 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
));
}
}
}
}
での の実装に注目execDecorateCell
してくださいRolesColumn
。テキストは、非表示の列に含まれる値に応じて計算されます。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);
ここに私の結果があります:
