Problemas al agrar opciones al menú durante el inicio del contexto de ejecución

Buenas,

Siguiendo el consejo del TOBA REFERENCIA respecto al USO DEL MENÚ donde dice :

Si el cambio se quiere aplicar de forma global, es preciso hacerlo durante el inicio del contexto de ejecución del proyecto y no requiere cambiar las propiedades de cada operación.

Es que extendí el contexto de ejecución y agregué la lógica necesaria para insertar nuevas opciones de menú todas apuntando a una misma operación, aquí el código:

		$opciones = array(
			array('id_actividad'=>'PF', 'nombre'=>'Proveedor', 'tipo_persona'=>'F')
		,	array('id_actividad'=>'PJ', 'nombre'=>'Proveedor', 'tipo_persona'=>'J')
		,	array('id_actividad'=>'EM', 'nombre'=>'Empresa', 'tipo_persona'=>'J')
		);
		
		foreach ($opciones as $opcion) {
			// armamos la URL navegable hacia la operación "real"
			$url = toba::vinculador()->get_url(
				// toma el ID del proyecto (esto la hace mas portable)
				toba::proyecto()->get_id(),
				// indica la OPERACIÓN a la cual queremos navegar
				'2000329',
				// los parámetros que deseamos pasar, pueden ser varios, siempre clave => valor. Esto nos ayuda a configurar la operación según desde que opción del menú se accede
				array('id_actividad'=>$opcion['id_actividad']),
				// a esta altura no hay ZONAS definidas por lo que no se deben transmitir, da error si se deja TRUE que es el valor por defecto
				array('zona'=>false)
			);

			// armamos los datos de la nueva opción del menú
			$item_menu = array(
				// este es el ITEM padre, para el caso la RAMA de la cual se desprende la nueva entrada en el menú
				'padre' => '2000328'
				// este es el ITEM (operación) que se va a abrir desde esta nueva entrada en el menú
			,	'item' => '2000329'
				// este es el texto que se muestra en el menú
			,	'nombre' => $opcion['nombre'] . ($opcion['tipo_persona'] == 'F' ? ' (Persona Física)' : ' (Persona Jurídica)')
				// de esta forma navegamos hacia la nueva opción del menú
			,	'js' => 'window.open("'.$url.'", "_self")'
			);
			
			toba::menu()->agregar_opcion($item_menu);

El problema se presenta al acceder al proyecto. Luego de que el usuario se identifica y pulsa el botón INGRESAR arroja el siguiente error en pantalla:

El usuario no posee permisos para acceder al item solicitado

Mientras que en el log queda lo siguiente:

VINCULADOR: Fallo la creacion de un vinculo al item '2000329' porque el usuario no posee permisos para acceder al mismo. VINCULADOR: Fallo la creacion de un vinculo al item '2000329' porque el usuario no posee permisos para acceder al mismo. VINCULADOR: Fallo la creacion de un vinculo al item '2000329' porque el usuario no posee permisos para acceder al mismo.

Esto entiendo se refiere a $url = toba::vinculador()->get_url(…) y por lo que comprendo el problema radica que al momento de solicitar el vínculo con la opción de menú correspondiente las credenciales del usuario aún no están definidas y esto es por lo que no se puede generar el vínculo…

Pregunta:

¿Que debo modificar en el código para que funcione? ¿Acaso no puedo utilizar toba::vinculador?

Desde ya muchas gracias

Saludos

José

Hola Jose,

Me parece que el problema puede estar ahi, seria interesante poder ver como queda armado el codigo que se envia al cliente, no sea cosa que se este parseando incorrectamente y se este haciendo una ‘redireccion’ encubierta y por eso falle.

Mientras que en el log queda lo siguiente:
VINCULADOR: Fallo la creacion de un vinculo al item '2000329' porque el usuario no posee permisos para acceder al mismo. VINCULADOR: Fallo la creacion de un vinculo al item '2000329' porque el usuario no posee permisos para acceder al mismo. VINCULADOR: Fallo la creacion de un vinculo al item '2000329' porque el usuario no posee permisos para acceder al mismo.

Esto no deberia ser problema, es decir… si el usuario no tiene permisos… se devuelve null en lugar de la URL y listo. Cualquier cuadro que tenga vinculos trabaja igual, si el usuario no tiene permisos para el destino del vinculo, simplemente no se hace el link… pero no falla toda la operacion.

Pregunta:

¿Que debo modificar en el código para que funcione? ¿Acaso no puedo utilizar toba::vinculador?

En JS tenes la misma capacidad de navegacion que en PHP, por tanto podrias armar las llamadas de menu sin que haya necesidad de generar la URL previamente.
Por ejemplo, con algo asi podrias agregar las opciones de menu (siempre y cuando los items esten configurados para mostrarse ahi):


$js_nuevo = 'return toba.ir_a_operacion("toba_usuarios", "33000035", true)';
$this->menu->agregar_opcion('33000035', array('js' => $js_nuevo));	

Cualquier cosa, fijate en la doc de la API JS por si necesitas algun parametro extra que te sirva.

Saludos