Error al crear Usuario desde Ci

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