Usando las Apis del GAM
|
|
|
- Ramona Maldonado Méndez
- hace 8 años
- Vistas:
Transcripción
1 Usando las Apis del GAM Recordemos que las APIs son funciones, que en este caso en el que se ha habilitado el GAM en una base de conocimiento, hacen posible la comunicación con la base de datos del GAM, que es la que contiene la información de los usuarios, roles, etc. (dado que se trata de una BD diferente a la asociada a la aplicación descripta en la base de conocimento). Una vez hecha esta introducción, pasemos a ver en el práctica el uso de estas APIs, en nuestra base de conocimiento para una Agencia de Viajes. Recordemos que hemos implementado un menú de opciones haciendo uso del user control: SlideMenu. Este menú se encuentra siempre visible en la aplicación en ejecución, ya que lo hemos incluido en la master page. Supongamos que nos solicitan ahora un nuevo requerimiento, presentes en el menú, varíen según el rol del usuario logueado. y es que las opciones Ya hemos aplicado el GAM a nuestra aplicación. Ejecutemos entonces el backend que nos brinda el GAM. Presionemos F5, y seleccionamos GAMHome. Nos logueamos con el usuario admin y password admin123. Elegimos la opción Roles, y vemos que contamos con el rol Administrator, que se ha definido automáticamente cuando hemos habilitado el GAM: Vamos a crear ahora un nuevo rol de nombre SaleAgent, así que presionamos el botón Add, y definimos el nombre, y la descripción también Sale Agent. Confirm. Y hemos creado entonces un nueo rol Pasmos ahora a observar los usuarios. Vamos a la opción Users. El usuario admin, ha sido creado automáticamente al aplicar el GAM, basado en el rol: administrator Page1
2 Vamos ahora a crear el usuario pjones, con el rol: SaleAgent Seleccionamos entonces Add y definimos los datos de nuestro nuevo usuario. Y la password será pjones123, y la confirmamos pjones123. Vamos ahora a asociarle el nuevo rol. Vamos a la opción Role y elegimos SaleAgent. Volvamos ahora a GeneXus En el web panel WPMenu recordemos que en el evento Start estamos invocando al Data Provider que genera la carga con las opciones del menú. Nuestra propuesta es modificar este código para que ahora se identifique el rol del usuario logueado. Para eso utilizaremos la función GAMuser provista por las Api del GAM Recordemos que estas Api las encontramos dentro de la carpeta GAMLibrary A través entonces de este objeto externo GAMUser podremos utilizar los métodos disponibles y obtener, entre otras cosas, los roles que tiene el usuario asociado. Vamos a definir entonces una variable de nombre &Gamuser en nuestro web panel WPMenu, de tipo de dato GAMuser. Este tipo de dato, como otros que veremos más adelante, fueron creados automáticamente cuando habilitamos el GAM. Page2
3 Ahora en el evento Start, nos ubicamos aquí y escribimos &Gamuser, signo de igual y llamamos a la función GAMuser seguido de punto, y elegimos Get. De esta forma obtenemos al usuario logueado. Si bien en nuestro caso cada usuario tiene solamente un rol asociado, podría tener varios, así que vamos a tener que recorrer una colección de roles y del único rol que tenga el usuario, obtendremos el nombre. De modo que vamos a definir dos nuevas variables: La variable &Role: de tipo de dato GAMRole (que es un tipo de dato que representa una instancia de la colección de roles) Y definimos también a la variable &RolName como character de 20 Volvamos al evento Start y completamos el código. Escribimos: For la variable &Role in la variable &Gamuser.GetAllRoles. y entre paréntesis debemos indicar una variable para guardar los posibles errores que se puedan suceder. Así que volvemos a las variables y vamos a definir a la variable &Errors del tipo de dato GAMError, y la marcamos como una colección. Volvemos al código, entre paréntesis entonces indicamos la variable Errors. A continuación escribimos la sentencia: &RoleName = la variable &Role.Name De esta forma obtenemos el nombre del rol del usuario. Y cerramos con Endfor. Finalmente llamamos al data provider que carga el menú, pasándole por parámetro el rol del usuario logueado. Salvamos. Bien. Vayamos ahora al Data Provider DPMenu, que tendrá que recibir al rol del usuario logueado. Page3
4 Así que definimos a la variable RolName de tipo Character de 20, y declaramos la correspondiente regla Parm. Vayamos al Source: Hasta el momento tenemos definida la carga de varias opciones genéricas para ser presentadas en el menú. Ahora vamos a condicionar cuáles opciones cargaremos, dependiendo del rol recibido. Si el usuario que se loguea tiene el rol Administrador, entonces se mantendrán todas las mismas opciones que hasta ahora incluíamos en el menú. Si en cambio se loguea un usuario con el rol SaleAgent, entonces solamente se ofrecerán determinadas consultas. Así que modifiquemos el código Filtremos que si el rol es Administrator, se muestren todas estas opciones. Indicamos entonces Where &RolelName.Trim() para eliminar los espacios en blanco, evaluamos si es igual a Administrator Ahora vamos a definir que si se recibe el rol SaleAgent entonces se carguen las opciones Work With Countries y Work With Attractions. Así que repetimos todo el grupo SlideMenuData con las opciones que correspondan., y condicionamos que el RoleName recibido sea SaleAgent. Grabamos. Ahora vamos a definir que si se recibe el rol SaleAgent entonces se carguen las opciones Work With Countries y Work With Attractions. Así que repetimos todo el grupo SlideMenuData con las opciones que correspondan., y condicionamos que el RoleName recibido sea SaleAgent. Page4
5 Veámoslo en ejecución. Presionemos F5 Seleccionamos por ejemplo Work With Country, nos logueamos con el usuario admin, password admin123, y vemos el siguiente menú con ls opciones completas. Salimos de la aplicación e ingresamos ahora con el usuario pjones, y password pjones123.. Y las opciones del menú han cambiado: Page5
6 Page6
Uso de la API del GAM
Uso de la API del GAM Recordemos que las APIs son propiedades y métodos que el GAM disponibiliza para que las aplicaciones que quieran utilizarlo puedan interactuar con él, haciendo posible la comunicación
Introducción GAM. La gran mayoría de las aplicaciones modernas necesitan algún esquema de login, autenticación y autorización.
Introducción GAM La gran mayoría de las aplicaciones modernas necesitan algún esquema de login, autenticación y autorización. Para cubrir estas necesidades, GeneXus ofrece un módulo de seguridad, llamado
Data Provider que carga colección con valores fijos (no extraídos de la base de datos)
Data Provider que carga colección con valores fijos (no extraídos de la base de datos) Hasta el momento hemos visto ejemplos de uso de Data Providers, que han accedido siempre a la base de datos para recuperar
Aplicación del GAM. Una vez autenticado el usuario podrá comenzar a utilizar la aplicación.
Aplicación del GAM Veamos que debemos hacer desde nuestra aplicación para utilizar el GAM. Vamos a abrir GeneXus y veremos que simplemente modificando el valor de una propiedad a nivel de la versión va
Cargando Tipos de Datos Compuestos (SDT) mediante Data Providers
Cargando Tipos de Datos Compuestos (SDT) mediante Data Providers En más de una oportunidad necesitamos almacenar en memoria una lista de elementos. Por ejemplo, la agencia de viajes puede necesitar realizar
Agregando funcionalidad con patrones
Agregando funcionalidad con patrones Los patrones nos permiten potenciar nuestra aplicación, agregando nuevas funcionalidades en forma muy sencilla! Al aplicar un patrón, GeneXus crea por nosotros todos
Cargando los tipos de datos compuestos
Cargando los tipos de datos compuestos En más de una oportunidad, necesitamos almacenar en memoria una lista de elementos que tienen el mismo tipo de información pero distintos valores guardados. Por ejemplo,
Hasta el momento hemos visto ejemplos de aplicación de Data Provider que requieren acceder a la base de datos para recuperar información.
Hasta el momento hemos visto ejemplos de aplicación de Data Provider que requieren acceder a la base de datos para recuperar información. Pero también es posible utilizar un Data Provider que devuelva
Cargando los tipos de datos estructurados
Cargando los tipos de datos estructurados En más de una oportunidad, necesitamos almacenar en memoria una lista de elementos que tienen el mismo tipo de información pero distintos valores guardados. Por
Usuarios y roles. Para administrar el acceso a las tareas de un diagrama de procesos, debemos definir ciertos roles que serán parte del modelo.
Usuarios y roles Hasta ahora hemos modelado diagramas de proceso, asociado objetos GeneXus a los elementos de los diagramas y ejecutado esos procesos, pero todas las pruebas las hicimos siempre con el
Comando For Each simple y For Each anidado para listar info relacionada
Comando For Each simple y For Each anidado para listar info relacionada En otro video hemos visto cómo definir un procedimiento, el cual contenía en su source un único comando For each, que accedía a los
Tipos de datos estructurados
Tipos de datos estructurados Hasta ahora hemos empleado siempre tipos de datos simples. Hemos definido atributos y dominios de tipo Numeric, de tipo Character y también contamos con otros tipos de datos
Data Providers - Más conocimientos
Data Providers - Más conocimientos Introduciremos nuevos conocimientos sobre el uso de los Data Providers. Para ello propondremos una implementación práctica en nuestra aplicación. Supongamos que la agencia
Uso de la API del GAM
Uso de la API del GAM En videos anteriores, vimos como construir una aplicación para una inmobiliaria, con una parte Web y una parte para Smart Devices Y luego vimos como resolver la Seguridad de ambas
Actualización de la Base de Datos - Business Components
Actualización de la Base de Datos - Business Components Hasta el momento hemos visto que las transacciones permiten a los usuarios, ingresar, modificar y eliminar datos, en las tablas de la base de datos
Componentes de pantalla (Extended controls)
Componentes de pantalla (Extended controls) Además de los controles comunes que tenemos disponibles en la toolbox GeneXus nos permite crear nuestros propios controles o usar controles creados por otros,
Componentes de pantalla (Extended controls)
Componentes de pantalla (Extended controls) Además de los controles comunes que tenemos disponibles en la toolbox, GeneXus nos permite crear nuestros propios controles o usar controles creados por otras
Introducción a Smart Devices
Introducción a Smart Devices Hasta el momento hemos construido todos los requerimientos solicitados por la agencia de viajes en lo relativo a la aplicación web a ser utilizada por los usuarios de la propia
Cláusula Unique. La cláusula Unique permite mencionar atributos cuyos valores no deben salir duplicados en el resultado de la consulta.
Cláusula Unique En ocasiones necesitamos definir ciertas consultas, que requieren navegar determinada tabla, pero necesitamos que si un mismo atributo tiene almacenado el mismo valor para varios registros,
Transacción de 2 niveles usada como Business Component y manejo de errores.
Transacción de 2 niveles usada como Business Component y manejo de errores. Ya hemos visto anteriormente el concepto general de Business Component y su aplicación en una transacción de un solo nivel. Veamos
Fórmulas Locales. Page1. Video filmado con GeneXus X Evolution 2. Veremos ahora qué es una fórmula local.
Fórmulas Locales Veremos ahora qué es una fórmula local. Una fórmula local es una fórmula que declaramos como instrucción puntual, dentro de determinado código, como ser en el source de un procedimiento,
Reglas en transacciones - Más conocimientos
Reglas en transacciones - Más conocimientos En un video anterior hemos visto que en las transacciones, los controles que nos solicitan los usuarios o que debemos validar, se definen en la sección de RULES.
Transacción base. A partir de GeneXus X Ev3, se incorpora el concepto de transacción base.
Transacción base A partir de GeneXus X Ev3, se incorpora el concepto de transacción base. Esto brinda la posibilidad de indicar explícitamente el nombre de la transacción cuya tabla física asociada se
Definición de reglas
Definición de reglas Además de todos los controles automáticos que GeneXus incluye en las aplicaciones que genera, hay ciertos controles específicos que los usuarios desean efectuar. En las transacciones,
Definiendo reglas. En las transacciones, las reglas que deben cumplirse, o los controles que nos solicitan validar, se definen en la sección de Rules.
Definiendo reglas Además de todos los controles automáticos que GeneXus incluye en las aplicaciones que genera, hay ciertos controles específicos que los usuarios nos piden validar. En las transacciones,
Consulta con salida Chart (Parte I)
Consulta con salida Chart (Parte I) Ya hemos visto en videos anteriores la creación de consultas con salida Table y Pivot table. Veamos ahora la creación de una consulta con salida Chart, o sea, vista
Administrando las bases de conocimiento (GXserver)
Administrando las bases de conocimiento (GXserver) Cuando desarrollamos una aplicación con GeneXus, ya sea en equipo o en forma individual, necesitamos mantener la KB siempre accesible y actualizada. GXserver
Diseñando más transacciones
Diseñando más transacciones Pasemos a crear una transacción de países: la llamamos Country Page1 Definimos aquí un atributo identificador de país CountryId Y vemos que Genexus le asignó el dominio Id y
Actualización de la Base de Datos - Business Components
Actualización de la Base de Datos - Business Components Hasta el momento hemos visto que las transacciones permiten a los usuarios, ingresar, modificar y eliminar datos, en las tablas de la base de datos
Applying And Using GAM
Applying And Using GAM Una funcionalidad que vemos cada vez más en las aplicaciones web, es la posibilidad de autenticarse una sola vez para todas las aplicaciones que estamos usando. El Single Sign On
Comunicación entre objetos
Comunicación entre objetos En situaciones anteriores nos hemos encontrado con la necesidad de llamar a un objeto, desde otro. Por ejemplo en el evento Enter del web panel EnterPercentage2, estamos llamando
Actualización de la Base de Datos - For each, delete, new
Actualización de la Base de Datos - For each, delete, new Hasta el momento, para actualizar los datos de la base de datos, hemos empleado las transacciones en sus 2 formas de uso: Ejecutando su pantalla
Introducción a procedimientos, listados y comando For each
Introducción a procedimientos, listados y comando For each Pasemos a conocer los objetos de tipo Procedimiento, que podemos definir en una base de conocimiento GeneXus Este tipo de objeto nos permite definir
Actualización de la Base de Datos - For each, delete, new
Actualización de la Base de Datos - For each, delete, new Hasta el momento, para actualizar los datos de la base de datos, hemos empleado las transacciones en sus 2 formas de uso: Ejecutando su pantalla
Agregando funcionalidad con patrones
Agregando funcionalidad con patrones Los patrones nos permiten potenciar nuestra aplicación, agregando nuevas funcionalidades en forma muy sencilla. Al aplicar un patrón, GeneXus crea por nosotros todos
Inicio de un proceso desde un objeto GeneXus, usando la API de Workflow
Inicio de un proceso desde un objeto GeneXus, usando la API de Workflow La agencia de viajes decidió modificar su proceso de reserva de pasajes e incorporar algunas funcionalidades nuevas. En primer lugar,
Formularios dinámicos
Formularios dinámicos En general, si necesitamos ejecutar una tarea interactiva de un diagrama de proceso de negocios, debemos contar en nuestra KB con un objeto transacción o un webpanel, para asociarlo
Diseñando más transacciones
Diseñando más transacciones Pasemos a crear una transacción de países. La llamamos Country: Definimos aquí un atributo identificador de país CountryId Y vemos que Genexus le asignó el dominio Id y definimos
Qué son los subtipos?
Qué son los subtipos? Hasta ahora hemos visto que GeneXus establece relaciones entre transacciones -y entre tablas- basándose en los nombres de atributos que encuentra iguales. Por ejemplo, en la transacción
Comando for each anidado para listar info agrupada
Comando for each anidado para listar info agrupada Volvamos ahora a la sección Source del procedimiento Una cosa que nos había quedado pendiente es que queríamos que las atracciones salgan ordenadas en
Curso GeneXus - Otro ejemplo de uso de Business components
Curso GeneXus - Otro ejemplo de uso de Business components Vamos a ver a continuación un ejemplo práctico de uso de Business Components. Page1 Comencemos planteando el siguiente escenario: Todo cliente
Otro ejemplo de uso de Business Components
Otro ejemplo de uso de Business Components Vamos a ver a continuación un ejemplo práctico de uso de Business Components. Comencemos planteando el siguiente escenario: Page1 Todo cliente de la agencia de
Cómo enviar un mail automático y ejecución del acceso a la API programado previamente
Cómo enviar un mail automático y ejecución del acceso a la API programado previamente Hasta ahora cumplimos con el primer requerimiento de la agencia, relacionado al ingreso de una reserva por parte del
Diseñando la primera transacción
Diseñando la primera transacción Luego de creada la base de conocimiento, el siguiente paso consiste en describir a los objetos de la realidad mediante objetos GeneXus.. Para identificar a los objetos
Momentos de disparo de reglas en transacciones
Momentos de disparo de reglas en transacciones Cuando vimos las reglas que podemos escribir en las transacciones, dijimos que no era necesario especificar cuando debe ejecutarse cada una de ellas, ya que
Supongamos que queremos definir un botón en la pantalla WWCountry, que invoque un listado pdf (objeto procedimiento) previamente definido.
Supongamos que queremos definir un botón en la pantalla WWCountry, que invoque un listado pdf (objeto procedimiento) previamente definido. Para eso nuevamente volvemos a editar la instancia del pattern,
Reporting (objeto Query)
Reporting (objeto Query) En muchas ocasiones necesitamos realizar consultas a la base de datos para analizar la información y poder tomar decisiones. Podemos necesitar agrupar la información por uno o
Fórmulas Globales. Page1. Video filmado con GeneXus X Evolution 2
Fórmulas Globales Muchas veces necesitamos que la aplicación efectúe un cálculo, que involucra valores de determinados atributos, constantes, y/o funciones. Para estos casos, GeneXus nos provee las Fórmulas
Introducción a procedimientos, listados y comando For each
Introducción a procedimientos, listados y comando For each Pasemos a conocer a los objetos de tipo Procedimiento, que podemos definir en una base de conocimiento GeneXus. Este tipo de objeto nos permite
Momentos de disparo de reglas en transacciones
Momentos de disparo de reglas en transacciones Cuando vimos las reglas que podemos escribir en las transacciones, dijimos que no era necesario especificar cuándo debe ejecutarse cada una de ellas, ya que
Convirtiendo el modelo en una aplicación funcional
Convirtiendo el modelo en una aplicación funcional En videos anteriores hemos modelado el proceso de reserva de pasajes de la Agencia de Viajes mediante un diagrama de procesos de negocios, hemos visto
BPM (Business Process Management)
BPM (Business Process Management) En la agencia de viajes, hay trámites que requieren de que varias tareas se realicen unas a continuación de otras, en un cierto orden, por ejemplo, cuando se desea hacer
Dos formas de devolver una colección con un Data Provider
Dos formas de devolver una colección con un Data Provider Los Data Provider son objetos versátiles que con un lenguaje declarativo nos facilitan la carga de estructuras, tanto ítems simples como colecciones
Modificación de dato relevante, evento timer y calendarios
Modificación de dato relevante, evento timer y calendarios Continuando con el diagrama, la tarea Evaluate Customer deberá evaluar la situación financiera del cliente y almacenar la decisión en un dato
Trabajando con documentos
Trabajando con documentos Continuando con la asociación de objetos GeneXus a las tareas del diagrama de validación de la reserva, seguiremos con las tareas interactivas Add customer information required
Tablas de Tarifas WhitePaper Abril de 2016
Tablas de Tarifas WhitePaper Abril de 2016 Ronda Guglielmo Marconi, 9 Parque Tecnológico 46980 Paterna, Valencia (Spain) T (+34) 96 338 99 66 [email protected] www.preference.es Preference, S.L. NIF
Relaciones entre entidades de la realidad
Page1 Relaciones entre entidades de la realidad En varios ejemplos de nuestra agencia de viajes, encontramos que los actores de la realidad se relacionan entre sí de distintas maneras, por ejemplo cuando
Momentos de disparo de reglas en transacciones
Momentos de disparo de reglas en transacciones Cuando vimos las reglas que podemos escribir en las transacciones, dijimos que no era necesario especificar cuándo debe ejecutarse cada una de ellas, ya que
Programación Delphi con Bases de datos
Creación de la conexión a una base de datos Access. En Delphi podemos establecer la conexión con nuestra base de datos de diferentes formas. A continuación se explican algunas de esas formas. 1) Crear
Cómo visualizar la información detallada de un material (desde el trabajar con materiales del SAP ERP)
Page1 Cómo visualizar la información detallada de un material (desde el trabajar con materiales del SAP ERP) Para que cuando el usuario haga tap sobre un material: Page2 se invoque a un panel que muestre
Introducción a procedimientos y listados. Comando para consultar la base de datos.
Introducción a procedimientos y listados. Comando para consultar la base de datos. Pasemos a conocer los objetos de tipo Procedimiento que podemos definir en una base de conocimiento GeneXus Este tipo
Edición y personalización de la instancia del pattern Work With aplicado a una transacción
Edición y personalización de la instancia del pattern Work With aplicado a una transacción Ya hemos trabajado previamente con el pattern Work With. Hemos visto cómo aplicarlo y cuáles son las funcionalidades
Qué son los subtipos?
Page1 Qué son los subtipos? Hasta ahora hemos visto que GeneXus establece relaciones entre transacciones -y entre tablas- basándose en los nombres de atributos que encuentra iguales. Por ejemplo, en la
Tareas multi-instanciadas y mapeo de datos relevantes
Tareas multi-instanciadas y mapeo de datos relevantes En videos previos, hemos asociado las tareas del diagrama de reserva de pasajes de la Agencia de Viajes a objetos GeneXus, convirtiendo el modelo del
Creando una aplicación móvil con GeneXus para trabajar con los Materiales del SAP ERP parte 2
Page1 Creando una aplicación móvil con GeneXus para trabajar con los Materiales del SAP ERP parte 2 En Tools/Application Integration tenemos la opción para explorar el folder de BAPIs del SAP ERP al que
Testeando las aplicaciones (GXtest)
Testeando las aplicaciones (GXtest) A medida que vamos haciendo crecer nuestra aplicación para la agencia de viajes, hemos ido agregando funcionalidades y haciendo modificaciones a cosas que habíamos implementado
Ejecutando la aplicación por primera vez
Ejecutando la aplicación por primera vez Queremos probar la transacción que creamos en los pasos anteriores. Para ello, le vamos a pedir a GeneXus que construya la aplicación, que cree la base de datos,
Manual de Usuario I Módulo de Programación Multianual
Manual de Usuario I Ambiente: Pliego pág. 1 INDICE 1. Usuario Pliego... 3 1.1. Acceso al Sistema y Entorno de Trabajo... 3 1.2. Mantenimiento de Maestros... 6 1.2.1. Generar código para Proyectos... 6
Objeto Query - Más conocimientos
Objeto Query - Más conocimientos Hemos visto anteriormente las generalidades del objeto Query, los componentes de su estructura y la forma de verlo en ejecución a través del uso del control Query Viewer.
I N S T R U C T I V O E Q U I P O G P S J U N O
I N S T R U C T I V O E Q U I P O G P S J U N O El equipo TRIMBLE JUNO es un GPS diferencial con Sistema Operativo Windows Mobile, lo que lo convierte en un Dispositivo Móvil de Captura con posibilidad
Manual de Usuario Digibanda MANUALES. Source IT Consulting SAC Calle General Silva 489 Miraflores Lima Perú
MANUALES Calle General Silva 489 Miraflores Lima Perú www.sitconsulting.com.pe 1 INDICE 1. Manual de Configuración de Servidor Pag. 3 2. Manual de Procesamiento Individual o Semi automático Pag. 7 3. Manual
Qué son los subtipos?
Qué son los subtipos? Hasta ahora hemos visto que GeneXus establece relaciones entre transacciones -y entre tablas- básandose en los nombres de atributos que encuentra iguales. Por ejemplo, en la transacción
Acceso a bases de datos externas
Acceso a bases de datos externas Muchas veces necesitamos acceder a bases de datos externas desde nuestras aplicaciones GeneXus. Por ejemplo, podemos necesitar cargar datos en tablas de nuestra base de
Manual Power Point Patrones
Manual Power Point 2010 Patrones CONTENIDO Concepto Definir patrón de diapositiva Agregar un patrón de diapositivas Modificar el patrón de diapositiva según su diseño Aplicar varios patrones de diapositivas
Instructivo Diseñador de Reportes Quitar/Agregar Etiquetas
Instructivo Diseñador de Reportes Quitar/Agregar Etiquetas * Revisión mayo de 2016 Capataz posee más de 300 informes con formato editable por el usuario. Un ESQUEMA es un set de todos archivos de reportes
Para eso abrimos el ambiente de desarrollo de Genexus.
Overview GeneXus - Demo: 1. IDE de GeneXus, creación de base de conocimiento para desarrollar un sistema de facturación y objeto Transacción para ingreso de facturas. Vamos a ver ahora en una demo las
INDICE 1. ACCESO AL SISTEMA DE ADMINISTRACIÓN PÁGINA DE INICIO DEL ADMINISTRADOR CONTENIDO GENERAL DE LA BARRA DE MENÚ...
SISTEMA DE ADMINISTRACION WEB MANUAL AUTOINSTRUCTIVO INDICE 1. ACCESO AL SISTEMA DE ADMINISTRACIÓN...2 2. PÁGINA DE INICIO DEL ADMINISTRADOR...2 3. CONTENIDO GENERAL DE LA BARRA DE MENÚ...3 4. USUARIOS
