martes, 11 de noviembre de 2014

Abrir un archivo desde Oracle Forms (Open file from oracle forms)

Para abrir un archivo desde Oracle forms y sin la necesidad de tener configurado el Webutil Oracle Forms nos ofrece la interacción con el paquete Dynamic Data Exchange (DDE).

Sobre el paquete de DDE:
El paquete DDE ofrece intercambio dinámico de datos (DDE) de apoyo dentro de las Formas
y Componentes del desarrollador.

Intercambio dinámico de datos (DDE) es un mecanismo por el cual las aplicaciones pueden
comunicarse e intercambiar datos de Windows. Soporte de cliente DDE se añade como un
extensión de procedimiento a las formas del desarrollador. El paquete PL/SQL para soporte DDE
proporciona a los desarrolladores de aplicaciones una interfaz de programación de aplicaciones (API) para el acceso a la funcionalidad DDE desde dentro de los procedimientos y disparadores PL/SQL.
Las funciones DDE permiten que las aplicaciones de Oracle comunicarse con otra DDE.

Las Aplicaciones de Windows (servidores) funcionan de tres maneras:

  • Importación de datos.
  • Exportación de datos.
  • Ejecución de comandos en el servidor DDE.

Este ejemplo muestra que en caso de que una boleta sea rechazada inmediatamente se muestra la lista de devoluciones, la lista tiene un
registro de incidencias que cuentan con un campo check, el cual el usuario va a marcar para que sea analizada*

Para que la forma se ejecute orrectamente es necesario:
-Crear un bloque llamado: BL_BROWSE
-Un grupo de botones de radio llamado: GR_SINO
-Crear una biblioteca con una alerta -> La biblioteca puede tener cualquier nombre pero con una unidad de programa que se llame
PAS1_MOSTRAR_AVISO que cuente con 2 parámetros ('Nombre_alerta','Mensaje_alerta');
-Localizar correctamente donde están los ejecutables (.exe) de los programas, por ejemplo:C:\Program Files\Microsoft Office\Office15\EXCEL.EXE
-La ruta del archivo que se desea abrir desde forms no tenga espacios en blanco, por ejemplo:C:\Listadedevoluciones.xls
-Listo

Además cuenta con un campo para llenar con un email al que queramos enviar el archivo, a la hora de imprimir el botón de enviar correo automáticamente abre el correo.


Código WHEN-RADIO-CHANGED:
DECLARE
AppID PLS_INTEGER;
lv_error varchar2(500);
  /*Ing. Roberto Díaz 11-11-2014 CR*/
BEGIN
IF :BL_BROWSE.GR_SINO=1 THEN
PAS1_MOSTRAR_AVISO('ALERT_MENSAJE','La boleta ha sido aprobada');
ELSE                                                           
PAS1_MOSTRAR_AVISO('ALERT_MENSAJE','La boleta ha sido rechazada');
AppID:=DDE.App_Begin('C:\Program Files\Microsoft Office\Office15\EXCEL.EXE'||' '||'C:\Listadedevoluciones.xls',DDE.APP_MODE_MAXIMIZED);
AppID:=DDE.App_Begin('C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe'||' '||'C:\webutil_conf.pdf',DDE.APP_MODE_MAXIMIZED);
END IF;
exception when others then 
lv_error:=(sqlerrm(sqlcode));
:bl_browse.it_mail:=lv_error;

END;

Código WHEN-BUTTON-PRESSED:
host('explorer.exe mailto:'||:bl_browse.it_mail);


La forma queda de la siguiente manera:



lunes, 29 de septiembre de 2014

Reloj Oracle Forms 10g

Es muy común ver la fecha en formas pero no tanto así la hora respectiva corriendo, este proceso es muy fácil de crear y solo se necesitan realizar 3 pasos:

1-When-Timer-Expired
2-When-New-Form-Instance
3-Pre-Form

*********************************************************************************
--Código When-New-Form-Instance
declare
TiempoActual TIMER;
   Xseg CONSTANT NUMBER := 1000;
begin

  TiempoActual:=CREATE_TIMER('TIEMPOACTUAL',Xseg,REPEAT);
 
  Select add_months(sysdate,-1) into :BL_FECHAS.FECHA_DESDE
  From dual;
 
  Select sysdate into :BL_FECHAS.FECHA_HASTA
  From dual;

select * into :BL_FECHAS.user
from global_name;

end;

*********************************************************************************
--Código When-Timer-Expired
declare
Timer_Expired varchar2(30);
   Lv_temporizador TIMER;
Temporizador VARCHAR2(40) := Get_Application_Property(TIMER_NAME);
   Lv_tiempo Varchar2(30) :=:SYSTEM.CURRENT_DATETIME;
   Lv_tiempo2 Varchar2(30);

begin
 
   SELECT ADD_MONTHS(SYSDATE,-1)INTO Lv_tiempo2
   FROM DUAL;
 
   IF Temporizador='TIEMPOACTUAL' THEN
     :BL_FECHAS.FECHA_HASTA:=Lv_tiempo;
     :BL_FECHAS.FECHA_DESDE:=Lv_tiempo2;
   END IF;
 
end;

*********************************************************************************
--Código Pre-Form
  set_application_property(PLSQL_DATE_FORMAT, 'DD/MM/YYYY HH24:MI:SS');
  set_application_property(BUILTIN_DATE_FORMAT, 'DD/MM/YYYY HH24:MI:SS');
  forms_ddl('ALTER SESSION SET NLS_DATE_FORMAT = ''DD/MM/YYYY HH24:MI:SS''');

*********************************************************************************
Notas: Los campos del bloque fecha no son de base de datos ni tipo Date, no se debe de permitir ni inserción ni actualización.

El Lienzo es muy sencillo y busca de manera gráfica mostrar de la forma más fácil el ejemplo mostrado.

El campo Fecha_Desde viene cargado con la fecha menos un mes, y la Fecha_Hasta que viene cargado con la hora actual.

Timer10g.fmb