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?