1 package body FND_FILE_PRIVATE as
2 /* $Header: AFCPPPRB.pls 120.2 2005/08/22 06:55:48 aweisber ship $ */
3
4
5 LOG utl_file.file_type;
6 OUT utl_file.file_type;
7
8 BUFFER_SIZE constant number := 32500;
9
10 LOG_FNAME varchar2(255);
11 OUT_FNAME varchar2(255);
12 TEMP_DIR varchar2(255);
13
14 NEXT_LOG_LINE varchar2(32767);
15 NEXT_OUT_LINE varchar2(32767);
16
17 procedure PUT_NAMES(P_LOG in varchar2, P_OUT in varchar2, P_DIR in varchar2)
18 is
19 begin
20 LOG_FNAME := P_LOG;
21 OUT_FNAME := P_OUT;
22 TEMP_DIR := P_DIR;
23 end;
24
25
26 function OPEN_FILE(TYPE in varchar2) return boolean is
27 MAX_LINESIZE binary_integer := 32767;
28 begin
29
30 if TYPE = 'OUT' and
31 OUT_FNAME is not null and
32 TEMP_DIR is not null then
33 OUT := utl_file.fopen(TEMP_DIR, OUT_FNAME, 'r', MAX_LINESIZE);
34 return TRUE;
35 elsif TYPE = 'LOG' and
36 LOG_FNAME is not null and
37 TEMP_DIR is not null then
38 LOG := utl_file.fopen(TEMP_DIR, LOG_FNAME, 'r', MAX_LINESIZE);
39 return TRUE;
40 else
41 return FALSE;
42 end if;
43
44 exception
45
46 when OTHERS then
47 return FALSE;
48
49 end OPEN_FILE;
50
51 procedure OPEN(LOGFILE in out NOCOPY varchar2,
52 OUTFILE in out NOCOPY varchar2) is
53 begin
54
55 OUTFILE := 'F';
56 LOGFILE := 'F';
57
58 NEXT_OUT_LINE := '';
59 NEXT_LOG_LINE := '';
60
61 if OPEN_FILE('LOG') = TRUE then
62 LOGFILE := 'T';
63 end if;
64
65 if OPEN_FILE('OUT') = TRUE then
66 OUTFILE := 'T';
67 end if;
68
69 end OPEN;
70
71 procedure LOGFILE_GET(STATUS in out NOCOPY varchar2,
72 TEXT in out NOCOPY varchar2) is
73 CR varchar2(2);
74 begin
75
76 CR := '
77 ';
78 TEXT := '';
79 while nvl(lengthb(TEXT), 0) + nvl(lengthb(NEXT_LOG_LINE), 0) < BUFFER_SIZE loop
80 TEXT := concat(TEXT, NEXT_LOG_LINE);
81 NEXT_LOG_LINE := '';
82 utl_file.get_line(LOG, NEXT_LOG_LINE);
83 NEXT_LOG_LINE := concat(NEXT_LOG_LINE, CR);
84 end loop;
85
86 STATUS := 'OK';
87
88 exception
89 when NO_DATA_FOUND then
90 if nvl(length(TEXT), 0) > 0 then
91 STATUS := 'OK';
92 return;
93 else
94 STATUS := 'EOF';
95 return;
96 end if;
97
98 when UTL_FILE.INVALID_FILEHANDLE then
99 fnd_message.set_name('FND', 'CONC-TEMPFILE_INVALID_HANDLE');
100 fnd_message.set_token('TEMP_FILE', LOG_FNAME, FALSE);
101 raise_application_error(-20104, fnd_message.get);
102
103 when UTL_FILE.INVALID_OPERATION then
104 fnd_message.set_name('FND', 'CONC-TEMPFILE_INVALID_OPERATN');
105 fnd_message.set_token('TEMP_FILE', LOG_FNAME, FALSE);
106 raise_application_error(-20105, fnd_message.get);
107
108 when UTL_FILE.READ_ERROR then
109 fnd_message.set_name('FND', 'CONC-TEMPFILE_READ_ERROR');
110 fnd_message.set_token('TEMP_FILE', LOG_FNAME, FALSE);
111 raise_application_error(-20106, fnd_message.get);
112
113
114 when OTHERS then
115 raise;
116
117 end LOGFILE_GET;
118
119 procedure OUTFILE_GET(STATUS in out NOCOPY varchar2,
120 TEXT in out NOCOPY varchar2) is
121 CR varchar2(2);
122 begin
123 CR := '
124 ';
125 TEXT := '';
126 while nvl(lengthb(TEXT), 0) + nvl(lengthb(NEXT_OUT_LINE), 0) < BUFFER_SIZE loop
127 TEXT := concat(TEXT, NEXT_OUT_LINE);
128 NEXT_OUT_LINE := '';
129 utl_file.get_line(OUT, NEXT_OUT_LINE);
130 NEXT_OUT_LINE := concat(NEXT_OUT_LINE, CR);
131 end loop;
132
133 STATUS := 'OK';
134 exception
135 when NO_DATA_FOUND then
136 if nvl(length(TEXT), 0) > 0 then
137 STATUS := 'OK';
138 return;
139 else
140 STATUS := 'EOF';
141 return;
142 end if;
143
144 when UTL_FILE.INVALID_FILEHANDLE then
145 fnd_message.set_name('FND', 'CONC-TEMPFILE_INVALID_HANDLE');
146 fnd_message.set_token('TEMP_FILE', OUT_FNAME, FALSE);
147 raise_application_error(-20104, fnd_message.get);
148
149 when UTL_FILE.INVALID_OPERATION then
150 fnd_message.set_name('FND', 'CONC-TEMPFILE_INVALID_OPERATN');
151 fnd_message.set_token('TEMP_FILE', OUT_FNAME, FALSE);
152 raise_application_error(-20105, fnd_message.get);
153
154 when UTL_FILE.READ_ERROR then
155 fnd_message.set_name('FND', 'CONC-TEMPFILE_READ_ERROR');
156 fnd_message.set_token('TEMP_FILE', OUT_FNAME, FALSE);
157 raise_application_error(-20106, fnd_message.get);
158
159 when OTHERS then
160 raise;
161
162 end OUTFILE_GET;
163
164 /*
165 ** CLOSE_FILE - close an open file and make it 0-length
166 ** unfortunately, we can't delete files on the server
167 ** deleting will have to be done with a cron job or something
168 **
169 ** IN
170 ** filetype - file to close log/out
171 ** RETURN
172 ** BOOLEAN - was file closed successfully ?
173 ** EXCEPTIONS
174 ** invalid_filehandle - not a valid file handle
175 ** write_error - OS error occured during write operation
176 */
177
178 function CLOSE_FILE(filetype in varchar2) return boolean is
179
180 begin
181
182 if (filetype = 'LOG') then
183 if (utl_file.is_open(LOG)) then
184 utl_file.fclose(LOG);
185 LOG := utl_file.fopen(TEMP_DIR, LOG_FNAME, 'w');
186 utl_file.fclose(LOG);
187 end if;
188 end if;
189
190 if (filetype = 'OUT') then
191 if (utl_file.is_open(OUT)) then
192 utl_file.fclose(OUT);
193 OUT := utl_file.fopen(TEMP_DIR, OUT_FNAME, 'w');
194 utl_file.fclose(OUT);
195 end if;
196 end if;
197
198 return TRUE;
199
200 exception
201 when UTL_FILE.INVALID_PATH then
202 fnd_message.set_name('FND', 'CONC-TEMPFILE_INVALID_PATH');
203 fnd_message.set_token('FILE_DIR', TEMP_DIR, FALSE);
204 raise_application_error(-20101, fnd_message.get);
205
206 when OTHERS then
207 raise;
208
209 return FALSE;
210
211 end CLOSE_FILE;
212
213 procedure CLOSE is
214 success boolean;
215 begin
216 begin
217 success := CLOSE_FILE('LOG');
218 exception
219 when OTHERS then
220 null;
221 end;
222 begin
223 success := CLOSE_FILE('OUT');
224 exception
225 when OTHERS then
226 null;
227 end;
228
229 end CLOSE;
230
231
232 end FND_FILE_PRIVATE;