DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_FILE_PRIVATE

Source


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