und3rwat3r
und3rwat3r

Reputation: 21

Cuba Platform - Copy Action

I'm new to Cuba Platform and I'm trying to add functionality to copy a record in a table. Essentially the same functionality as found in the Administration -> Users -> Copy User screen.

The button action for this is usersTable.copy

Adding a similar action for example booksTable.copy doesn't seem to work natively. What method do I need to add or anything else to get this to work?

I've gone through the documentation and there's only an example using usersTable.

Many thanks in advance

Upvotes: 2

Views: 1010

Answers (2)

s_division
s_division

Reputation: 11

My solution with 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();

}

Upvotes: 1

Mario David
Mario David

Reputation: 1615

The users copy action is not something that is generally available (like the create action). But you can look at the implementation from the copy action of the users browser.

Basically it just copies the data from the old user (roles, security group etc.) and prefills the data and then just opens the normal editor of the user like this:

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 //...
}

Upvotes: 4

Related Questions