Recientemente tuve la necesidad de mostrar varias regiones tipo "Alter", con el fin de indicar al usuario errores, información o información correcta. Pero no me gusto lo forma de crear 3 o N regiones para ello.
Recientemente tuve este error de TNS:error del adaptador de protocolo al intentar conectarme por SqlPlus.
Para solucionar este problema existen dos opciones.
Opción 1
La primera será reiniciando el listener para ello abrimos una ventana CMD como administrador y ejecutaremos:
lsnrctl stop
luego:
lsnrctl start
podremos comprobar el estado de con el comando:
lsnrctl status
Opción 2
Si esto no funciona, Posiblemente en erro de la instalación la variable de entorno no se ha creado y procederemos a crearla; ORACLE_SID con el valor XE.
Install Oracle APEX 20.1 / Ords 20 + Apache Tomcat + Windows + Oracle 18c Express Instalar Oracle APEX 20.1 en español / Ords + Apache Tomcat + Windows En esta oportunidad hare una guía completa de:
Instalación Oracle APEX 20.1 en español o multilenguaje
Instalación y configuración de Apache Tomcat.
Instalación y configuración de ORDS.
Video Instalación paso a paso.
Para ello usaremos la base de datos Oracle 18c express.
Primero descargamos la versión multilenguaje de APEX
Abrimos una ventana de CMD y nos dirigimos al directorio donde hemos descomprimido ORDS en mi caso "E:\Instaladores\ords-20.2.0.178.1804"
Luego creamos una carpeta donde se guardara la configuración de ORDS, en mi ejemplo le puse "E:\Instaladores\ords_config"
Luego ejecutamos
java -jar ords.war install advanced
Una vez finalizada la configuración de ORDS necesitamos copiar el archivo ords.war del directorio donde ejecutamos java -jar xxxx Y lo pegamos en la carpeta web apps de Tomcat usualmente en esta dirección "C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps"
Ahora necesitamos las imagenes, para ello copiamos del directorio de APEX , la carpeta imágenes y la pegamos en webapps de tomcat, asi mismo renombramos la carpeta a solo "i"
Ahora reiniciamos el servicio de tomcat-
Con todo esto ya tendremos APEX instalado y corriendo en ORDS, en la url localhost:20100/ords/apex
Cambiando el lenguaje
Para tener el lenguaje de APEX en español o cualquier necesitamos ejecutar @load_TULANG.sql
Este archivo lo pueden encontrar en la carpeta de APEX => Builder => y seleccionan la carpeta con el lenguaje que desean instalar.
En mi caso será español, carpeta ES.
De preferencia abrimos una nueva ventana de CMD, cambiamos nuestro directorio a donde esta la carpeta builder con el lenguaje que deseamos instalar en mi ejemplo, es "E:\Instaladores\apex_201\apex\builder\es" y nos conectamos como sys dba y ejecutamos:
Nota @load_es.sql en vez de ES deberíamos cambiar con el prefijo de nuestro lenguaje a instalar.
ALTER SESSION SET CONTAINER = XEPDB1;
ALTER SESSION SET CURRENT_SCHEMA = APEX_200100;
@load_es.sql
Y listo finalmente solo necesitamos reiniciar el servicio de Tomcat.
Como pueden ver ahora ya tengo para seleccionar el lenguaje español en la parte inferior y a partir de ello todo el builder cambia.
Tip: me ha pasado que la después de ello da un error en ORDS, para ello he vuelto a configurar ORDS, si ello no funciona, pueden probar instalar APEX y seguidamente cambiar el lenguaje antes de instalar ORDS, lo cual seria su ultimo paso.
En determinada ocasión tenemos la necesidad de mostrar los registros al usuario dando prioridad al orden de los elementos listados en un reporte. Para ello podría indicar que hay dos formas no comunes de ordenar, una es usando drag y drop para lo cual les recomiendo el blog de Jorge y la otra seria agregando unos botones de subir o bajar, que es le método que les enseñare a continuación.
Primero creamos un reporte clásico. en mi caso he usado la tabla DEPT para la
demo.
Asi mismo he agregado una nueva columna para guardar el orden de los
registros.
Lo ordenaremos por nuestra nueva columna, order by order_dept
Agregaremos dos botones con HTML para mover arriba y abajo.
A este código he agregado el data-id para obtener el ID del registro, clase
"arrow_container " para identificar donde esta mi ID, y en los botones un
data-move_dir para saber la dirección , y una clase "move_row" para saber
cuando se hace click al botón.
<divdata-id="#DEPTNO#"class="arrow_container"><buttontype="button"data-move_dir="UP"title="Up"aria-label="Up"class="move_row t-Button t-Button--noLabel t-Button--icon t-Button--hot t-Button--small t-Button--noUI"><spanaria-hidden="true"class="t-Icon fa fa-chevron-up"></span></button><buttontype="button"data-move_dir="DOWN"title="Down"aria-label="Down"class="move_row t-Button t-Button--noLabel t-Button--icon t-Button--hot t-Button--small t-Button--noUI"><spanaria-hidden="true"class="t-Icon fa fa-chevron-down"></span></button></div>
Luego crearemos una acción dinámica para escuchar el click de los botones y pasaremos el elemento.
move_row(this.triggeringElement);
Mi función la he agregado a nivel de página para tener un mejor orden.
function move_row(element){
// direcction = up or downvar direction = element.dataset.move_dir;
var row = $(element).parents("tr:first");
if (direction =="UP" ) {
row.insertBefore(row.prev());
} else {
// down
row.insertAfter(row.next());
}
save_order();
}
La función save_order es la que me permitirá actualizar los registros en la base de datos a través de un llamada AJAX. la agregare también a nivel de la página.
function save_order(){
var rowsOrder = $("#department_report").find(".t-Report-report tbody tr .arrow_container")
var questionnaireOrder =Array.from(rowsOrder, x => $(x).data('id') );
console.log(questionnaireOrder);
apex.server.process("UPDATE_ORDER",
{
f01: questionnaireOrder
},
{ success:function(pData){
apex.event.trigger( "#department_report", "apexrefresh" );
},
error:function(e) {
console.log(e);
}
}
);
}
He creado un proceso AJAX callback y allí tengo lo siguiente.
declare
l_order number;
beginfor i in1..apex_application.g_f01.count loop
l_order := i *10;
update dept
set order_dept = l_order
where deptno = to_number(apex_application.g_f01(i))
and nvl(order_dept,0) != l_order;
end loop;
apex_json.open_object;
apex_json.write('success',true);
apex_json.close_object;
exception
when others then
apex_json.open_object;
apex_json.write('success',false);
apex_json.write('error_msg',sqlerrm);
apex_json.close_object;
end;
Y finalmente el resultado
Nota, para los botones he usado el button builder de apex.oracle/ut
Una vez conectados desbloquemos el usuario ANONYMOUS
ALTER USER ANONYMOUS ACCOUNT UNLOCK;
AquÍ algo muy importante durante toda la instalación es que en esta versión tenemos la opción de pluggable database asi que es mejor hacer la instalación en el pluggable database y no en el root.
Podemos ejecutar show pdbs y ver las pdbs activas.
para esto durante toda la instalación de APEX debemos estar en la pdb1. Y para ello ejecutamos lo siguiente.
ALTER SESSION SET CONTAINER = XEPDB1;
Creamos nuestra tablespace la configuración es a nuestro gusto
CREATE TABLESPACE apex20100 DATAFILE '/opt/oracle/oradata/XE/XEPDB1/apex20100.dbf' SIZE 300M AUTOEXTEND ON NEXT 1M;
Instalamos APEX
@apexins.sql apex20100 apex20100 TEMP /i/
Terminada la instalación configuramos la clave de admin
@apxchpwd.sql
Desbloqueamos APEX_PUBLIC_USER
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY 2345 ACCOUNT UNLOCK;
E instalamos rest
@apex_rest_config.sql
Configuramos las imágenes
@apex_epg_config.sql /opt
Para terminar la configuración indicamos en que puerto va estar APEX.
select dbms_xdb.gethttpport from dual;
EXEC DBMS_XDB.sethttpport(20100);
Ahora tendremos que abrir los puertos necesarios para la conexión
Seleccionamos nuestro compute engine e Iremos a la configuración de red
Luego seleccionamos cortafuegos y agregamos regla
Agregaremos al puerto TCP de entrada el puerto que seleccionamos anteriormente, en mi caso 20100
Y el rango de IP si queremos filtrar, en mi caso habilito a todas con 0.0.0.0/0
Ahora solo nos queda probar que funcione correctamente.
Usaremos la ip de nuestro compute engine junto con el puerto que asignamos en mi caso
Para acceder al instance
http://34.67.73.89:20100/apex/apex_admin
Para acceder a un workspace
http://34.67.73.89:20100/apex/
Nota si en caso la página no responda, puedes intentar creando una regla de salida en cortafuegos.
Otro error común es que te pida datos de XDB
usuario y contraseña. El sitio dice: XDB
Normalmente he solucionado esto desbloqueando el usuario ANONYMOUS, del master PDB
Ing. Angel O. Flores Torres, soy Ingeniero de Sistemas e Ingeniero de Aplicaciones Oracle APEX, he trabajado con Oracle APEX desde el 2017, 5x, 18x, 20x En los ultimos años he desarrollado habilidades en CSS, JavaScript, Jquery y PlSql
, I specialize in Oracle APEX (Oracle Application Express )