2

我是 Cuba Platform 的新手,我正在尝试添加在表中复制记录的功能。与管理 -> 用户 -> 复制用户屏幕中的功能基本相同。

按钮操作是 usersTable.copy

添加类似的操作,例如 booksTable.copy 似乎不能在本地工作。我需要添加什么方法或其他任何方法才能使其正常工作?

我浏览了文档,只有一个使用 usersTable 的示例。

提前谢谢了

4

2 回答 2

4

用户复制操作不是通常可用的(如创建操作)。但是您可以从用户浏览器的复制操作中查看实现。

基本上它只是从旧用户(角色、安全组等)复制数据并预填充数据,然后像这样打开用户的普通编辑器:

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 //...
}
于 2016-09-01T10:27:38.967 回答
1

我使用 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();

}
于 2017-09-04T10:26:16.853 回答