Historial de Operaciones sobre documentos

Muchas veces necesitamos guardar información sobre que usuario realiza actividades sobre un documento., por ejemplo en que fecha fue creado, o quienes han actualizado el documento.

Para estos casos JMoordb, ofrece una solución mediante la implementación del entity UserInfo y del services UserInfoServices.

En la introducción de este capitulo se describió el entity UserInfo y el services.

Entity

Para implementarlo en el proyecto debemos agregar una lista embebida a los entity.

@Embedded
    List<UserInfo> userInfo;

Ejemplo de un Entity

@Getter
@Setter
public class Agente {

    @Id
    private String cedula;

    private String nombre;

    private String siglas;

    private String idreloj;

    private String telefono;

    private String celular;

    private String email;

    private Date fechanacimiento;

    private String activo;

    @Embedded
    List<UserInfo> userInfo;

    public Agente() {
    }

    @Override
    public String toString() {
        return nombre;
    }

}

Controller

Para implementarlo en el Controller usamos @Inject para el Services

Agregar el UserInfoServices

  @Inject
    UserInfoServices userInfoServices;

Cuando creamos un documento nuevo debemos invocar el método generateListUserinfo(...) del Services que devuelve un List con el registro que vamos a ingresar. Veamos el segmento del ejemplo pasamos los atributos correspondientes al username y la descripción

agente.setUserInfo(userInfoServices.generateListUserinfo(loginController.getUsername(), "create"));

Método save()

@Override
    public String save() {
        try {
            Optional<Agente> optional = agenteFacade.findById(agente);
            if (optional.isPresent()) {
                JsfUtil.warningDialog(rf.getAppMessage("info.message"), rf.getAppMessage("warning.idexist"));
                return null;
            }

            agente.setUserInfo(userInfoServices.generateListUserinfo(loginController.getUsername(), "create"));

            if (agenteFacade.save(agente)) {
                JsfUtil.successMessage(rf.getAppMessage("info.save"));
                reset();
            } else {
                JsfUtil.successMessage("save() " + agenteFacade.getException().toString());
            }

        } catch (Exception e) {
            JsfUtil.errorMessage("save()" + e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>

Método edit()

Invocamos al método generateUserinfo() del Services que devuelve un Objeto de tipo UserInfo.

 agente.getUserInfo().add(userInfoServices.generateUserinfo(loginController.getUsername(), "update"));

Ejemplo del método edit

@Override
    public String edit() {
        try {

            agente.getUserInfo().add(userInfoServices.generateUserinfo(loginController.getUsername(), "update"));
            agenteFacade.update(agente);
            JsfUtil.successMessage(rf.getAppMessage("info.update"));
        } catch (Exception e) {
            JsfUtil.errorMessage("edit()" + e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>

Si consultamos el documento

observamos la lista userInfo con 3 documentos, al expandirlo, observamos que usuario creo el documento y los que han realizado ediciones.

Last updated