我是 Cuba Platform 的新手,我正在尝试添加在表中复制记录的功能。与管理 -> 用户 -> 复制用户屏幕中的功能基本相同。
按钮操作是 usersTable.copy
添加类似的操作,例如 booksTable.copy 似乎不能在本地工作。我需要添加什么方法或其他任何方法才能使其正常工作?
我浏览了文档,只有一个使用 usersTable 的示例。
提前谢谢了
我是 Cuba Platform 的新手,我正在尝试添加在表中复制记录的功能。与管理 -> 用户 -> 复制用户屏幕中的功能基本相同。
按钮操作是 usersTable.copy
添加类似的操作,例如 booksTable.copy 似乎不能在本地工作。我需要添加什么方法或其他任何方法才能使其正常工作?
我浏览了文档,只有一个使用 usersTable 的示例。
提前谢谢了
用户复制操作不是通常可用的(如创建操作)。但是您可以从用户浏览器的复制操作中查看实现。
基本上它只是从旧用户(角色、安全组等)复制数据并预填充数据,然后像这样打开用户的普通编辑器:
public void copy() {
// fetches the selected user
Set<User> selected = usersTable.getSelected();
User selectedUser = selected.iterator().next();
selectedUser = dataSupplier.reload(selectedUser, "user.edit");
// creates a new user
User newUser = metadata.create(User.class);
// copies the roles and other stuff
if (selectedUser.getUserRoles() != null) {
List<UserRole> userRoles = new ArrayList<>();
for (UserRole oldUserRole : selectedUser.getUserRoles()) {
//...
userRoles.add(role);
}
newUser.setUserRoles(userRoles);
}
newUser.setGroup(selectedUser.getGroup());
// opens the editor with the pre filled data from the other user
AbstractEditor editor = openEditor("sec$User.edit", newUser //...
}
我使用 Cuba-Platform Tools 的解决方案:
public void copy() {
Books selected = booksDs.getItem();
CommitContext context = new CommitContext();
Books copy = metadata.getTools().deepCopy(selected);
copy.setId(uuidSource.createUuid());
copy.setBookName("(COPY) " + booksDs.getItem().getBookName());
context.addInstanceToCommit(copy);
dataManager.commit(copy);
booksDs.refresh();
}