DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_FILE_PRIVATE

Source


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;