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
Was this helpful?