[Home] [Help]
PACKAGE BODY: APPS.DOM_DOC_TEXT_UTIL
Source
1 PACKAGE BODY DOM_DOC_TEXT_UTIL AS
2 /* $Header: DOMUIMTB.pls 120.5 2011/03/30 06:23:41 pnagasur ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'DOM_DOC_TEXT_UTIL';
5
6 -- -----------------------------------------------------------------------------
7 -- Private Globals
8 -- -----------------------------------------------------------------------------
9
10 g_Prod_Short_Name CONSTANT VARCHAR2(30) := 'DOM';
11 g_Prod_Schema VARCHAR2(30);
12 g_Index_Owner VARCHAR2(30);
13 g_Index_Name VARCHAR2(30) := 'DOM_IMTEXT_TL_CTX1';
14 g_Indexing_Context VARCHAR2(30) := 'SYNC_INDEX';
15
16 g_installed BOOLEAN;
17 g_inst_status VARCHAR2(1);
18 g_industry VARCHAR2(1);
19
20 g_DB_Version_Num NUMBER := NULL;
21 g_DB_Version_Str VARCHAR2(30) := NULL;
22 g_compatibility VARCHAR2(30) := NULL;
23
24 g_MSTK_Flex_Delimiter VARCHAR2(1) := NULL;
25
26 --c_Dom_Appl_Id CONSTANT NUMBER := 703;
27 --c_Dom_DFF_Name CONSTANT VARCHAR2(30) := 'DOM_DOC_GROUP';
28
29 -- Global debug flag
30 g_Debug BOOLEAN := TRUE;
31
32 t_temp NUMBER := 0;
33
34 --Bug 4045988
35 l_DB_Version_Str VARCHAR2(30) := NULL;
36 l_DB_Numeric_Character VARCHAR2(30) := NULL;
37 --Bug 4045988
38
39
40 -- Variable used to buffer text strings before writing into LOB.
41 --
42 g_Buffer VARCHAR2(32767);
43 g_Buffer_Length INTEGER;
44
45 /*
46 -- -----------------------------------------------------------------------------
47 -- Debug
48 -- -----------------------------------------------------------------------------
49
50 PROCEDURE Debug
51 (
52 p_change_id IN NUMBER
53 , p_org_id IN NUMBER
54 , p_msg_name IN VARCHAR2
55 , p_error_text IN VARCHAR2
56 );
57 */
58 -- -----------------------------------------------------------------------------
59 -- Set_Context
60 -- -----------------------------------------------------------------------------
61
62 PROCEDURE Set_Context ( p_context IN VARCHAR2 )
63 IS
64 BEGIN
65 g_Indexing_Context := p_context;
66 END Set_Context;
67
68 -- -----------------------------------------------------------------------------
69 -- Append_VARCHAR_to_LOB
70 -- -----------------------------------------------------------------------------
71
72 PROCEDURE Append_VARCHAR_to_LOB
73 (
74 x_tlob IN OUT NOCOPY CLOB
75 , p_string IN VARCHAR2
76 , p_action IN VARCHAR2 DEFAULT 'APPEND'
77 )
78 IS
79 start_writing BOOLEAN := TRUE;
80 l_offset INTEGER := 1;
81 l_Max_Length INTEGER := 32767;
82 l_String_Length INTEGER;
83 BEGIN
84
85 IF ( p_action = 'BEGIN' ) THEN
86
87 -- Empty the LOB, if this is the first chunk of text to append
88 DBMS_LOB.Trim ( lob_loc => x_tlob, newlen => 0 );
89
90 g_Buffer := p_string;
91 g_Buffer_Length := -1;
92
93 ELSIF ( p_action IN ('APPEND', 'END') ) THEN
94
95 start_writing := ( g_Buffer_Length = -1 );
96 IF ( start_writing ) THEN
97 g_Buffer_Length := Length (g_Buffer);
98 END IF;
99
100 l_String_Length := Length (p_string);
101
102 -- Write buffer to LOB if required
103
104 IF ( g_Buffer_Length + l_String_Length >= l_Max_Length ) THEN
105 IF ( start_writing ) THEN
106 DBMS_LOB.Write ( lob_loc => x_tlob
107 , amount => Length (g_Buffer)
108 , offset => l_offset
109 , buffer => g_Buffer
110 );
111 ELSE
112 DBMS_LOB.WriteAppend ( lob_loc => x_tlob
113 , amount => Length (g_Buffer)
114 , buffer => g_Buffer
115 );
116 END IF;
117
118 -- Reset buffer
119 g_Buffer := p_string;
120 g_Buffer_Length := Length (g_Buffer);
121 ELSE
122 g_Buffer := g_Buffer || p_string;
123 g_Buffer_Length := g_Buffer_Length + l_String_Length;
124 END IF; -- Max_Length reached
125
126 IF ( p_action = 'END' ) THEN
127 start_writing := ( g_Buffer_Length = -1 );
128 IF ( start_writing ) THEN
129 DBMS_LOB.Write ( lob_loc => x_tlob
130 , amount => Length (g_Buffer)
131 , offset => l_offset
132 , buffer => g_Buffer
133 );
134 ELSE
135 DBMS_LOB.WriteAppend ( lob_loc => x_tlob
136 , amount => Length (g_Buffer)
137 , buffer => g_Buffer
138 );
139 END IF;
140 -- Reset buffer
141 g_Buffer := '';
142 g_Buffer_Length := -1;
143 END IF;
144
145 END IF; -- p_action
146
147 END Append_VARCHAR_to_LOB;
148
149 -- -----------------------------------------------------------------------------
150 -- Get_doc_Text
151 -- -----------------------------------------------------------------------------
152
153 PROCEDURE Get_doc_Text
154 (
155 p_rowid IN ROWID
156 , p_output_type IN VARCHAR2
157 , x_tlob IN OUT NOCOPY CLOB
158 , x_tchar IN OUT NOCOPY VARCHAR2
159 )
160 IS
161
162 BEGIN
163 NULL;
164
165 --Null out this method, as it is not referred anywhere ,also Document Management is no longer supported
166
167 END Get_doc_Text;
168
169 /*
170 -- -----------------------------------------------------------------------------
171 -- Debug
172 -- -----------------------------------------------------------------------------
173
174 PROCEDURE Debug
175 (
176 p_change_id IN NUMBER
177 , p_org_id IN NUMBER
178 , p_msg_name IN VARCHAR2
179 , p_error_text IN VARCHAR2
180 )
181 IS
182
183 BEGIN
184 --Null out this method, as it is not referred anywhere ,also Document Management is no longer supported
185
186 END Debug;
187 */
188 -- -----------------------------------------------------------------------------
189 -- Print_Lob
190 -- -----------------------------------------------------------------------------
191
192 PROCEDURE Print_Lob ( p_tlob_loc IN CLOB )
193 IS
194 l_amount BINARY_INTEGER := 255;
195 l_offset INTEGER := 1;
196 l_offset_max INTEGER := 32767;
197 l_buffer VARCHAR2(32767);
198 BEGIN
199
200 --DBMS_OUTPUT.put_line('LOB contents:');
201
202 -- Read portions of LOB
203 LOOP
204 DBMS_LOB.Read ( lob_loc => p_tlob_loc
205 , amount => l_amount
206 , offset => l_offset
207 , buffer => l_buffer
208 );
209
210 --DBMS_OUTPUT.put_line(l_buffer);
211
212 l_offset := l_offset + l_amount;
213 EXIT WHEN l_offset > l_offset_max;
214 END LOOP;
215
216 EXCEPTION
217 WHEN no_data_found THEN
218 NULL;
219
220 END Print_Lob;
221
222
223
224 -- -----------------------------------------------------------------------------
225 -- Sync_Index
226 -- -----------------------------------------------------------------------------
227
228 PROCEDURE Sync_Index ( p_idx_name IN VARCHAR2 DEFAULT NULL )
229 IS
230 BEGIN
231
232 AD_CTX_DDL.Sync_Index ( idx_name => NVL(g_Index_Owner || '.' || p_idx_name, g_Index_Owner ||'.'|| g_Index_Name) );
233
234 EXCEPTION
235 WHEN others THEN
236 DOM_DOC_TEXT_PVT.Log_Line ('DOM_DOC_TEXT_UTIL : Error in Sync Index');
237
238 END Sync_Index;
239
240 -- -----------------------------------------------------------------------------
241 -- Sync_Index_For_Forms
242 -- -----------------------------------------------------------------------------
243
244 PROCEDURE Sync_Index_For_Forms ( p_idx_name IN VARCHAR2 DEFAULT NULL )
245 IS
246 BEGIN
247
248 EXECUTE IMMEDIATE 'ALTER INDEX ' || g_Index_Owner ||'.'|| g_Index_Name || ' REBUILD ONLINE PARAMETERS (''SYNC'')';
249
250 EXCEPTION
251 WHEN others THEN
252 NULL;
253
254 DOM_DOC_TEXT_PVT.Log_Line ('DOM_DOC_TEXT_UTIL : Error in Sync_Index_For_Forms');
255
256 END Sync_Index_For_Forms;
257 -- -----------------------------------------------------------------------------
258 -- Optimize_Index
259 -- -----------------------------------------------------------------------------
260
261 -- Start : Concurrent Program for Optimize iM index
262 PROCEDURE Optimize_Index
263 (
264 ERRBUF OUT NOCOPY VARCHAR2
265 , RETCODE OUT NOCOPY NUMBER
266 , p_optlevel IN VARCHAR2 DEFAULT AD_CTX_DDL.Optlevel_Full
267 , p_dummy IN VARCHAR2 DEFAULT NULL
268 , p_maxtime IN NUMBER DEFAULT AD_CTX_DDL.Maxtime_Unlimited
269 )
270 IS
271
272 Mctx INV_ITEM_MSG.Msg_Ctx_type;
273 l_api_name CONSTANT VARCHAR2(30) := 'Optimize_Index';
274 l_success CONSTANT NUMBER := 0;
275 l_error CONSTANT NUMBER := 2;
276 l_debug NUMBER := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
277 l_maxtime NUMBER := NVL(p_maxtime,AD_CTX_DDL.Maxtime_Unlimited);
278
279 BEGIN
280
281 IF p_optlevel ='FAST' THEN
282 l_maxtime := NULL;
283 END IF;
284
285 AD_CTX_DDL.Optimize_Index ( idx_name => g_Index_Owner ||'.'|| g_Index_Name
286 , optlevel => NVL(p_optlevel,AD_CTX_DDL.Optlevel_Full)
287 , maxtime => l_maxtime);
288 --gyedla Create Message
289 RETCODE := l_success;
290 ERRBUF := FND_MESSAGE.Get_String('DOM', 'DOM_OPTIMINDEX_SUCCESS');
291
292 --gyedla Create Message
293
294 EXCEPTION
295 WHEN OTHERS THEN
296 RETCODE := l_error;
297 ERRBUF := FND_MESSAGE.Get_String('DOM', 'DOM_OPTIMINDEX_FAILURE');
298 DOM_DOC_TEXT_PVT.Log_Line ('DOM_DOC_TEXT_UTIL : Error in Optimize Index for CM Text Index');
299
300 END Optimize_Index;
301 -- End : Concurrent Program for Optimize iM index
302
303
304 -- -----------------------------------------------------------------------------
305 -- get_Prod_Schema
306 -- -----------------------------------------------------------------------------
307
308 FUNCTION get_Prod_Schema
309 RETURN VARCHAR2
310 IS
311 BEGIN
312 RETURN (g_Prod_Schema);
313 END get_Prod_Schema;
314
315 -- -----------------------------------------------------------------------------
316 -- get_DB_Version_Num
317 -- -----------------------------------------------------------------------------
318
319 FUNCTION get_DB_Version_Num
320 RETURN NUMBER
321 IS
322 BEGIN
323 RETURN (g_DB_Version_Num);
324 END get_DB_Version_Num;
325
326 FUNCTION get_DB_Version_Str
327 RETURN VARCHAR2
328 IS
329 BEGIN
330 RETURN (g_DB_Version_Str);
331 END get_DB_Version_Str;
332
333 -- -----------------------------------------------------------------------------
334 -- insert_document
338 (
335 -- -----------------------------------------------------------------------------
336
337 PROCEDURE Insert_Update_Doc
339 p_doc_id IN NUMBER DEFAULT FND_API.G_MISS_NUM
340 )
341 IS
342
343 BEGIN
344 --Null out this method, as it is not referred anywhere ,also Document Management is no longer supported
345 NULL;
346 END Insert_Update_Doc;
347
348 -- *****************************************************************************
349 -- ** Package initialization block **
350 -- *****************************************************************************
351
352 BEGIN
353
354 ------------------------------------------------------------------
355 -- Determine index schema and store in a private global variable
356 ------------------------------------------------------------------
357
358 g_installed := FND_INSTALLATION.Get_App_Info ('DOM', g_inst_status, g_industry, g_Prod_Schema);
359
360 g_Index_Owner := g_Prod_Schema;
361
362 -------------------------
363 -- Determine DB version
364 -------------------------
365
366 --Bug 5514824/4045988: We need to convert the db version string to be compativle with the
367 --numeric characters of that language. Eg. '9.2' need to be changed to '9F2'
368 -- in French before we can use it in TO_NUMBER
369
370 DBMS_UTILITY.db_Version (g_DB_Version_Str, g_compatibility);
371 l_DB_Version_Str := SUBSTR(g_DB_Version_Str, 1, INSTR(g_DB_Version_Str, '.', 1, 2) - 1);
372
373 SELECT SUBSTR(VALUE,0,1) into l_DB_Numeric_Character
374 FROM V$NLS_PARAMETERS
375 Where PARAMETER = 'NLS_NUMERIC_CHARACTERS';
376 g_DB_Version_Num := TO_NUMBER( REPLACE(l_DB_Version_Str, '.', l_DB_Numeric_Character) );
377
378
379 END DOM_DOC_TEXT_UTIL;