方法文档 — 使用 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;

寄送此页面
Printer View 打印机视图