Hola Leo,
te hago una consulta rapida, diferencia en la organizacion de la bd entre desarrollo y produccion?.. todo en una misma base?, bases distintas?.
Otra cosa a mirar, permisos del usuario con el que la aplicacion se conecta a la bd… tiene acceso a todos los schemas/bases?
```class ci_usuarios extends dj_ci {
protected $s__usuario; function ini() { $this->s__usuario = array(); } //---- Eventos ---------------------------------------------------------------------- function evt__procesar() { $this->set_usuarios(); } //---- formulario ------------------------------------------------------------------- function conf__formulario(dj_unlar_ei_formulario $form) { if (count($this->s__usuario) > 0) { $form->set_datos($this->s__usuario); } } function evt__formulario__modificacion($datos) { if (strnatcasecmp($datos['documento'], $datos['clave']) == 0) { throw new toba_error('La clave no debe ser igual al DNI.'); } if (strnatcasecmp($datos['email'], $datos['email2']) > 0) { throw new toba_error('Verifique que haya ingresado correctamente su email'); } $datos['apellido'] = strtoupper($datos['apellido']); $datos['nombre'] = strtoupper($datos['nombre']); $this->s__usuario = $datos; } function set_usuarios() { $bloq = toba::instancia()->es_usuario_bloqueado($this->s__usuario['documento']); if ($bloq) { toba::notificacion()->agregar('El usuario se encuentra bloqueado. Contactese con la Subsecretaria de Recursos Humanos'); } $this->dep('datos')->persistidor()->desactivar_transaccion(); toba::db()->abrir_transaccion(); try { $ins = co_inscripciones::existe_inscripcion($this->s__usuario['documento'], $this->s__usuario['id_convocatoria']); if (count($ins) > 0) { throw new toba_error('"<b>Ya existe un usuario en la convocatoria actual. </b>
Comuniquese con la Subsecretaria de Recursos Humanos"');
} else {
$usuario = $this->s__usuario;
$user = toba::usuario()->existe_usuario($usuario[‘documento’]);
if (!$user) {
//$db_toba = toba_instancia::instancia()->get_db();
try {
$username = addslashes($usuario[‘documento’]);$nombre = $usuario['apellido'] . ' ' . $usuario['nombre']; $param = array("email" => $usuario['email'], "parametro_a" => $usuario['documento']); toba::instancia()->agregar_usuario($username, $nombre, $usuario['clave'], $param); toba::instancia()->vincular_usuario('dj_unlar', $username, 'agente'); $user = $username; } catch (toba_error $e) { $user = null; // $db_toba->abortar_transaccion(); toba::notificacion()->agregar($e); } } $this->dep('datos')->sincronizar(); toba::db()->cerrar_transaccion(); $this->dep('datos')->resetear(); $this->set_pantalla('pant_msj'); $this->pantalla()->set_descripcion("<strong>Los datos se grabaron correctamente.
Presione "Volver" para regresar a la pantalla de ingreso.");
}
} catch (toba_error $error) {
toba::db()->abortar_transaccion();
throw new toba_error($error->getMessage());
}
}}
</blockquote> Lo que no entiendo de este codigo es lo siguiente, tenes dos catch anidados para el mismo tipo de error... el interno estaria de mas, no te aborta la transaccion y permite que se continue ejecutando desde alli, con lo que va a mandar a sincronizar el datos_relacion. Por otro lado, la llamada a toba::instancia() va a intentar crear una nueva conexion a la bd, que segun como sea la organizacion puede derivar en (reuso) otro schema (el cual hay que especificar manualmente) , u otra bd (que te tira por el piso la idea de transaccion a menos que simules un dos fases). Si ambas bd, tanto negocio como toba estan en schemas separados, vas a tener que cambiar el schema de la conexion de forma manual ya que al reusar la conexion va a seguir apuntando al schema de negocio. Luego podes reestablecerlo explicitamente tambien, no deberia afectarte la transaccionalidad eso. Saludos