方法文档 — 使用 Webutil 在客户端执行 Text_IO
简介
许多表单应用程序利用 Text_IO 从文件系统读写数据。将表单应用程序移植到 Web 时,Text_IO 的工作方式与客户端/服务器完全相同。然而,现在须牢记应用程序在应用服务器(而不是在客户机)上运行。
这实际上可能正是您所希望的行为(例如,使用 Text_IO 写审计信息)。然而,可能您需要 Text_IO 访问用户所在的机器。例如,某个销售人员登录到表单应用程序,并希望该应用程序从其本地机器上读取销售数据。
WebUtil 向您提供执行客户端 Text_IO 的功能。
设置
有关设置 WebUtil 的步骤,请参阅作为软件下载一部分的《精通 WebUtil 手册》。
更改代码
请考虑如下的代码:
PROCEDURE WRITE_ITEM_BLOCK (FILENAME IN VARCHAR2) IS
MYFILE TEXT_IO.FILE_TYPE;
CUR_REC NUMBER;
BEGIN
GO_BLOCK('S_ITEM');
CUR_REC := :SYSTEM.CURSOR_RECORD;
IF :SYSTEM.BLOCK_STATUS != 'NEW' THEN
FIRST_RECORD;
MYFILE := TEXT_IO.FOPEN(FILENAME, 'W');
TEXT_IO.PUTF(MYFILE,'Item_ID,Proudct_ID,Description'||CHR(10));
LOOP
TEXT_IO.PUTF(MYFILE, TO_CHAR(:S_ITEM.ITEM_ID)||',');
TEXT_IO.PUTF(MYFILE, TO_CHAR(:S_ITEM.PRODUCT_ID)||',');
TEXT_IO.PUTF(MYFILE, :S_ITEM.DESCRIPTION||',');
TEXT_IO.PUTF(MYFILE, CHR(10));
EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
NEXT_RECORD;
END LOOP;
TEXT_IO.FCLOSE(MYFILE);
END IF;
GO_RECORD(CUR_REC);
END;
此代码将检查一块记录,并将数据输出到一个命名文件上。要在客户端上执行同样的功能,请附加 WebUtil 对象库及 PL/SQL 库,并用 CLIENT_TEXT_IO 替换 TEXT_IO 的所有实例。
结果代码将像以前一样运行,但将文件写到客户机。
PROCEDURE WRITE_ITEM_BLOCK (FILENAME IN VARCHAR2) IS
MYFILE CLIENT_TEXT_IO.FILE_TYPE;
CUR_REC NUMBER;
BEGIN
GO_BLOCK('S_ITEM');
CUR_REC := :SYSTEM.CURSOR_RECORD;
IF :SYSTEM.BLOCK_STATUS != 'NEW' THEN
FIRST_RECORD;
MYFILE := CLIENT_TEXT_IO.FOPEN(FILENAME, 'W');
CLIENT_TEXT_IO.PUTF(MYFILE,'Item_ID,Proudct_ID,Description'||CHR(10));
LOOP
CLIENT_TEXT_IO.PUTF(MYFILE, TO_CHAR(:S_ITEM.ITEM_ID)||',');
CLIENT_TEXT_IO.PUTF(MYFILE, TO_CHAR(:S_ITEM.PRODUCT_ID)||',');
CLIENT_TEXT_IO.PUTF(MYFILE, :S_ITEM.DESCRIPTION||',');
CLIENT_TEXT_IO.PUTF(MYFILE, CHR(10));
EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
NEXT_RECORD;
END LOOP;
CLIENT_TEXT_IO.FCLOSE(MYFILE);
END IF;
GO_RECORD(CUR_REC);
END;
|