martes, 12 de abril de 2011

Configurar Oracle Forms WEB UTILS

Pasos para la instalación de WebUtil1. Desempaquetar el archivo webutil_106. Las carpetas que contiene son:
- doc
- java
- server
- webutil
Para este ejemplo, se supondrá que se instaló en la carpeta C:\webutil_106

2. Crear un usuario en la base de datos, por ejemplo webutil.

3. Conectado como el usuario webutil, ejecutar el script c:\webutil_106\create_webutil_db.sql

*************************************
CREATE OR REPLACE PACKAGE WEBUTIL_DB AUTHID CURRENT_USER AS

/*********************************************************************************\
* WebUtil_DB - Database functions used by the WebUtil_File_Transfer
* Package. These functions allow reading and writing direct
* to the specified BLOB in the database.
* The functions should not be called externally from WebUtil
*********************************************************************************
* Version 1.0.0
*********************************************************************************
* Change History
* DRMILLS 11/JAN/2003 - Creation
*
\*********************************************************************************/

FUNCTION OpenBlob(blobTable in VARCHAR2,
blobColumn in VARCHAR2,
blobWhere in VARCHAR2,
openMode in VARCHAR2,
chunkSize in PLS_INTEGER default null) return BOOLEAN;

FUNCTION CloseBlob(checksum in PLS_INTEGER) return BOOLEAN;

PROCEDURE WriteData(data in VARCHAR2);

FUNCTION ReadData return VARCHAR;

FUNCTION GetLastError return PLS_INTEGER;

FUNCTION GetSourceLength return PLS_INTEGER;

FUNCTION GetSourceChunks return PLS_INTEGER;

END WEBUTIL_DB;
/

CREATE OR REPLACE PACKAGE BODY WEBUTIL_DB AS
m_binaryData BLOB;
m_blobTable VARCHAR2(60);
m_blobColumn VARCHAR2(60);
m_blobWhere VARCHAR2(1024);
m_mode CHAR(1);
m_lastError PLS_INTEGER := 0;
m_sourceLength PLS_INTEGER := 0;
m_bytesRead PLS_INTEGER := 0;
MAX_READ_BYTES PLS_INTEGER := 4096;

-- internal Program Units
PROCEDURE Reset;

PROCEDURE Reset is
BEGIN
m_blobTable := null;
m_blobColumn := null;
m_blobWhere := null;
m_mode := null;
m_lastError := 0;
m_sourceLength := 0;
m_bytesRead := 0;
END Reset;


FUNCTION OpenBlob(blobTable in VARCHAR2, blobColumn in VARCHAR2, blobWhere in VARCHAR2, openMode in VARCHAR2, chunkSize PLS_INTEGER default null) return BOOLEAN is
result BOOLEAN := false;
stmtFetch VARCHAR2(2000);
hit PLS_INTEGER;
BEGIN
-- New transaction clean up
reset;

m_blobTable := blobTable;
m_blobColumn := blobColumn;
m_blobWhere := blobWhere;
m_mode := upper(openMode);

if chunkSize is not null then
if chunkSize > 16384 then
MAX_READ_BYTES := 16384;
else
MAX_READ_BYTES := chunkSize;
end if;
end if;

-- check the target row exists
stmtFetch := 'select count(*) from '||m_blobTable||' where '||m_blobWhere;
EXECUTE IMMEDIATE stmtFetch into hit;

if hit = 1 then
if m_mode = 'W' then
DBMS_LOB.CREATETEMPORARY(m_binaryData,false);
DBMS_LOB.OPEN(m_binaryData,DBMS_LOB.LOB_READWRITE);
m_sourceLength := 0;
result := true;
elsif m_mode = 'R' then
stmtFetch := 'select '||m_blobColumn||' from '||m_blobTable||' where '||m_blobWhere;
EXECUTE IMMEDIATE stmtFetch into m_binaryData;
if m_binaryData is not null then
m_sourceLength := dbms_lob.getlength(m_binaryData);
if m_sourceLength > 0 then
result := true;
else
m_lastError := 110;
end if;
else
m_lastError := 111;
end if;
else
m_lastError := 112;
end if; -- mode
else
-- too many rows
m_lastError := 113;
end if; -- Hit
return result;
END OpenBlob;

FUNCTION CloseBlob(checksum in PLS_INTEGER) return BOOLEAN is
sourceBlob BLOB;
stmtFetch VARCHAR2(2000);
stmtInit VARCHAR2(2000);
result BOOLEAN := false;
BEGIN
if m_mode = 'W' then
m_sourceLength := DBMS_LOB.GETLENGTH(m_binaryData);
end if;

-- checksum
if checksum = m_sourceLength then
if m_mode = 'W' then
-- get the locator to the table blob
stmtFetch := 'select '||m_blobColumn||' from '||m_blobTable||' where '||m_blobWhere||' for update';
EXECUTE IMMEDIATE stmtFetch into sourceBlob;

-- Check the blob has been initialised
-- and if it's not empty clear it out
if sourceBlob is null then
stmtInit := 'update '||m_blobTable||' set '||m_blobColumn||'=EMPTY_BLOB() where '||m_blobWhere;
EXECUTE IMMEDIATE stmtInit;
EXECUTE IMMEDIATE stmtFetch into sourceBlob;
elsif dbms_lob.getlength(sourceBlob) > 0 then
dbms_lob.TRIM(sourceBlob,0);
end if;
-- now replace the table data with the temp BLOB
DBMS_LOB.APPEND(sourceBlob,m_binaryData);
DBMS_LOB.CLOSE(m_binaryData);
result := true;
else
-- todo
null;
end if; --mode
else
m_lastError := 115;
end if; --checksum
return result;
END CloseBlob;

PROCEDURE WriteData(data in VARCHAR2) is
rawData raw(16384);
BEGIN
rawData := utl_encode.BASE64_DECODE(utl_raw.CAST_TO_RAW(data));
dbms_lob.WRITEAPPEND(m_binaryData, utl_raw.LENGTH(rawData), rawData);
END WriteData;


FUNCTION ReadData return VARCHAR is
rawData RAW(16384);
bytesToRead PLS_INTEGER;
BEGIN
bytesToRead := (m_sourceLength - m_bytesRead);
if bytesToRead > MAX_READ_BYTES then
bytesToRead := MAX_READ_BYTES;
end if;
DBMS_LOB.READ(m_binaryData, bytesToRead, (m_bytesRead + 1), rawData);
m_bytesRead := m_bytesRead + bytesToRead;
return UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(rawData));
END ReadData;

FUNCTION GetLastError return PLS_INTEGER is
BEGIN
return m_lastError;
END GetLastError;


FUNCTION GetSourceLength return PLS_INTEGER is
BEGIN
return m_sourceLength;
END GetSourceLength;

FUNCTION GetSourceChunks return PLS_INTEGER is
chunks PLS_INTEGER;
BEGIN
chunks := floor(m_sourceLength/MAX_READ_BYTES);
if mod(m_sourceLength,MAX_READ_BYTES) > 0 then
chunks := chunks+1;
end if;
return chunks;
END GetSourceChunks;

END;
/
EXIT;
/



*************************************


4. Desde SYSTEM, crear un sinónimo público webutil_db para el paquete webutil.webutil_db.

5. Otorgar el privilegio de ejecución sobre el paquete webutil.webutil_db a cualquier usuario que vaya a usar a WEBUTIL. Puede otorgar el privilegio a PUBLIC.

6. Copie los archivos:
• C:\webutil_106\
- webutil.olb
- webutil.pll
en $ORACLE_HOME\forms90\
• C:\webutil_106\server\
- webutil.cfg
- webutilbase.htm
- webutiljini.htm
- webutiljpi.htm
en $ORACLE_HOME\forms90\server\
• C:\webutil_106\java\*.* a $ORACLE_HOME\forms90\java\
• C:\webutil_106\webutil\*.* a $ORACLE_HOME\forms90\webutil\
7. Del archivo jacob.zip, el archivo jacob.jar cópielo a $ORACLE_HOME\forms90\java y el archivo jacob.dll cópielo a $ORACLE_HOME\forms90\webutil.
8. En el archivo C:\Oracle\Ora10gDS\j2ee\DevSuite\application-deployments\forms\forms90web\orion-web.xml agregue lo siguiente:

9. En una instalación de IAS u OAS, hay que definir un directorio virtual. Agregue lo siguiente al archivo C:\Oracle\Ora10gDS\forms90\server\forms90.conf.
AliasMatch ^/forms90/webutil/(..*) “C:\Oracle\Ora10gDS\forms90\webutil\$1”
10. Hacer una copia del archivo de configuración default.env. Hay que llamarlo webutil.env. A este archivo hay que hacerle los siguientes cambios:
• Hay que agregar la variable
WEBUTIL_CONFIG=C:\Oracle\Ora10gDS\forms90\server\webutil.cfg
• A la variable CLASSPATH (se encuentra al final del archivo) hay que apendizarle las siguientes rutas:

C:\Oracle\Ora10gDS\forms90\java\frmwebutil.jar;C:\Oracle\Ora10gDS\jdk\jre\lib\rt.jar;C:\Oracle\Ora10gDS\forms90\java\jacob.jar;C:\Oracle\Ora10gDS\forms90\java\f90all.jar

NOTA: las rutas pueden variar dependiendo de su instalación:
11. En el archivo $ORACLE_HOME\forms90\server\formsweb.cfg hay que agregar una entrada como esta:
[pruebawebutil]
form=prueba1.fmx
userid=inventario/inventario@apiver
webUtilArchive=frmwebutil.jar,jacob.jar
baseHTMLjInitiator=webutiljini.htm
baseHTMLjpi=webutiljpi.htm
baseHTML=webutilbase.htm
envFile=webutil.env
separateframe=TRUE
12. Para que la lectura de imágenes funcione, debe de editar el archivo $ORACLE_HOME\forms90\server\webutil.cfg y hay que cambiar los valores de las variables transfer.appsrv.enabled y transfer.appsrv.workAreaRoot a:
transfer.appsrv.enabled=TRUE
transfer.appsrv.workAreaRoot=”algún directorio en el server”
13. Compile la librería C:\Oracle\Ora10gDS\forms90\webutil.pll.
14. Por cada forma en donde quiera utilizar Webutil, debe:
• Ligar la librería webutil.pll
• Copiar a la forma el objeto webutil que está en la librería de objetos webutil.
EL copiar el objeto webutil creará varios objetos en su forma; uno de ellos es un bloque. Es responsabilidad del programador que en ejecución este bloque no se visualice.
En tipo de diseño, el contenido del bloque no se ve (son varios java_beans), a menos que a las variables (de ambiente o de registro) CLASSPATH y FORMS90_BUILDER_CLASSPATH le agregue las rutas especificadas en el punto 10

Fuente: http://zaga-code.blogspot.com/2008/07/configurar-oracle-forms-web-utils.html

1 comentario:

  1. yo ya segui todos estos pasos y me marca un error

    oracle.forms.webutil.clienteInfo.GetClientInfo bean not found. WEBUTIL_CLIENTINFO.GET_SYSTEM_PROPERTY sill no work

    Me podrían ayudar, por favor!

    ResponderEliminar