[Home] [Help]
PACKAGE BODY: APPS.INV_ITEM_MSG
Source
1 PACKAGE BODY INV_ITEM_MSG AS
2 /* $Header: INVVIMSB.pls 120.3.12020000.2 2012/07/09 08:21:23 asugandh ship $ */
3
4
5 ---------------------- Package variables and constants -----------------------
6
7 G_PKG_NAME CONSTANT VARCHAR2(30) := 'INV_ITEM_MSG';
8
9 -- Datatype of the message record and table
10
11 TYPE Msg_Rec_type IS RECORD
12 (
13 Msg_Data VARCHAR2(2000)
14 , Msg_Name VARCHAR2(30)
15 , Transaction_Id NUMBER
16 , Column_Name VARCHAR2(30)
17 );
18
19 TYPE Msg_Tbl_type IS TABLE OF Msg_Rec_type
20 INDEX BY BINARY_INTEGER;
21
22 -- Global message table variable
23
24 g_Msg_Tbl Msg_Tbl_type;
25
26 -- Global variable holding the message count
27
28 g_Msg_Count NUMBER := 0;
29
30 -- Index used by the Get function to keep track of the last fetched message
31
32 g_Msg_Index NUMBER := 0;
33
34 -- Set message level to Error by default
35 --
36 g_Message_Level NUMBER := g_Level_Error;
37
38 -- Message mode (output control).
39 -- Valid values:
40 -- 'FILE'
41 -- 'CP_LOG'
42 -- 'CONSOLE'
43 --
44 g_Message_Mode VARCHAR2(30) := 'FILE';
45
46 /*
47 log file
48 IF (l_debug = 1) THEN
49 debug level
50 END IF;
51 IF (l_debug = 1) THEN
52 trace on/off
53 END IF;
54
55 INV_ITEM_OI_DEBUG_TRACE (yes/no)
56 INV_ITEM_OI_DEBUG_LEVEL (fatal, error, warning, debug, trace)
57 */
58 ------------------------------------------------------------------------------
59
60
61 --------------------------------- Initialize ---------------------------------
62
63 -- Usage Used by INV_ITEM_MSG API callers to intialize the
64 -- global message table.
65 -- Desc Clears the g_Msg_Tbl and resets all its global variables.
66 -- Except for the message level threshold.
67
68 PROCEDURE Initialize
69 IS
70 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
71 BEGIN
72
73 g_Msg_Tbl.DELETE;
74 g_Msg_Count := 0;
75 g_Msg_Index := 0;
76
77 END Initialize;
78
79 PROCEDURE Initialize_Error_Handler
80 IS
81 BEGIN
82 Error_Handler.Initialize;
83 Error_Handler.Set_BO_Identifier ('INV_ITEM');
84 END Initialize_Error_Handler;
85 ------------------------------------------------------------------------------
86
87
88 ----------------------------- set_Message_Level ------------------------------
89
90 PROCEDURE set_Message_Level (p_Msg_Level IN NUMBER)
91 IS
92 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
93 BEGIN
94
95 g_Message_Level := p_Msg_Level;
96
97 END set_Message_Level;
98 ------------------------------------------------------------------------------
99
100
101 ------------------------------ set_Message_Mode ------------------------------
102
103 FUNCTION set_Message_Mode (p_Mode IN VARCHAR2)
104 RETURN VARCHAR2
105 IS
106 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
107 BEGIN
108
109 g_Message_Mode := p_Mode;
110 RETURN (NULL);
111
112 /*
113 IF (p_Mode = 'FILE') THEN
114 g_Message_Mode := 'FILE';
115 RETURN (NULL);
116
117 IF (G_DIR IS NULL) THEN
118 select value
119 INTO G_DIR
120 from v$PARAMETER
121 where name = 'utl_file_dir';
122
123 if instr(G_DIR,',') > 0 then
124 G_DIR := substr(G_DIR,1,instr(G_DIR,',')-1);
125 end if;
126 END IF;
127
128 IF (G_FILE IS NULL) THEN
129 select substr('l'|| substr(to_char(sysdate,'MI'),1,1)
130 || lpad(BIS_debug_s.nextval,6,'0'),1,8) || '.BIS'
131 into G_FILE
132 from dual;
133
134 G_FILE_PTR := UTL_FILE.fopen(G_DIR, G_FILE, 'w');
135 END IF;
136
137 RETURN (G_DIR || '/' || g_file);
138
139 ELSIF (p_Mode = 'CONSOLE') THEN
140 g_Message_Mode := 'CONSOLE';
141 RETURN (NULL);
142 ELSE
143 g_Message_Mode := 'TABLE';
144 RETURN (NULL);
145 END IF;
146
147 EXCEPTION
148
149 WHEN others THEN
150 g_Message_Mode := 'TABLE';
151 RETURN (NULL);
152 */
153
154 END set_Message_Mode;
155
156
157 PROCEDURE set_Message_Mode (p_Mode IN VARCHAR2)
158 IS
159 l_file_ptr VARCHAR2(2000);
160 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
161 BEGIN
162
163 l_file_ptr := set_Message_Mode (p_Mode => p_Mode);
164
165 END set_Message_Mode;
166
167
168 --------------------------- Insert_Interface_Error ---------------------------
169
170 -- Private package procedure
171
172 PROCEDURE Insert_Interface_Error
173 (
174 p_Msg_Name IN VARCHAR2
175 , p_Msg_Text IN VARCHAR2
176 , p_transaction_id IN NUMBER
177 , p_column_name IN VARCHAR2
178 );
179 ------------------------------------------------------------------------------
180
181
182 -------------------------------- Add_Message ---------------------------------
183
184 -- Usage Used to add messages to the message table.
185 --
186 -- Desc Puts a message and tokens on the message dictionary stack,
187 -- reads the message off the message dictionary stack, and
188 -- writes it in an encoded format to the message table.
189 -- The message is appended at the bottom of the message table.
190
191 PROCEDURE Add_Message
192 ( p_Msg_Name IN VARCHAR2
193 , p_token1 IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
194 , p_value1 IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
195 , p_token2 IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
196 , p_value2 IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
197 , p_token3 IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
198 , p_value3 IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
199 , p_translate IN VARCHAR2 DEFAULT fnd_api.g_FALSE
200 , p_transaction_id IN NUMBER DEFAULT fnd_api.g_MISS_NUM
201 , p_column_name IN VARCHAR2 DEFAULT NULL
202 )
203 IS
204 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
205
206 BEGIN
207
208 INVPUTLI.info('Add_Message: p_Msg_Name=' || p_Msg_Name);
209
210 --bis_debug_pub.debug_on;
211 --BIS_VG_UTIL.Add_Error_Message (...);
212 --inv_debug.message(p_Msg_Text);
213
214 FND_MESSAGE.Set_Name('INV', p_Msg_Name);
215 IF ( p_token1 <> fnd_api.g_MISS_CHAR ) THEN
216 FND_MESSAGE.Set_Token(p_token1, p_value1, FND_API.To_Boolean(p_translate));
217 END IF;
218 IF ( p_token2 <> fnd_api.g_MISS_CHAR ) THEN
219 FND_MESSAGE.Set_Token(p_token2, p_value2, FND_API.To_Boolean(p_translate));
220 END IF;
221 IF ( p_token3 <> fnd_api.g_MISS_CHAR ) THEN
222 FND_MESSAGE.Set_Token(p_token3, p_value3, FND_API.To_Boolean(p_translate));
223 END IF;
224
225 -- Increment message count
226
227 g_Msg_Count := g_Msg_Count + 1;
228
229 -- Add message in encoded format to the message table
230 --pnagasur:Added If condition for fixing Bug13028351
231 IF g_Msg_Tbl.EXISTS(g_Msg_Count - 1) THEN
232 g_Msg_Tbl( g_Msg_Count ).Msg_Data := FND_MESSAGE.Get_Encoded ;
233 g_Msg_Tbl( g_Msg_Count ).Msg_Name := p_Msg_Name ;
234 g_Msg_Tbl( g_Msg_Count ).Transaction_Id := p_transaction_id ;
235 g_Msg_Tbl( g_Msg_Count ).Column_Name := p_column_name ;
236 END IF;
237 END Add_Message;
238 ------------------------------------------------------------------------------
239
240
241 ---------------------------------- Add_Error ---------------------------------
242
243 PROCEDURE Add_Error
244 ( p_Msg_Name IN VARCHAR2
245 , p_token IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
246 , p_value IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
247 , p_translate IN VARCHAR2 DEFAULT fnd_api.g_FALSE
248 )
249 IS
250 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
251 BEGIN
252
253 IF (g_Level_Error >= g_Message_Level) THEN
254 Add_Message
255 ( p_Msg_Name => p_Msg_Name
256 , p_token1 => p_token
257 , p_value1 => p_value
258 , p_translate => p_translate
259 );
260 END IF;
261
262 END Add_Error;
263 ------------------------------------------------------------------------------
264
265
266 --------------------------------- Add_Warning --------------------------------
267
268 PROCEDURE Add_Warning
269 ( p_Msg_Name IN VARCHAR2
270 , p_token IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
271 , p_value IN VARCHAR2 DEFAULT fnd_api.g_MISS_CHAR
272 , p_translate IN VARCHAR2 DEFAULT fnd_api.g_FALSE
273 )
274 IS
275 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
276 BEGIN
277
278 IF (g_Level_Warning >= g_Message_Level) THEN
279 Add_Message
280 ( p_Msg_Name => p_Msg_Name
281 , p_token1 => p_token
282 , p_value1 => p_value
283 , p_translate => p_translate
284 );
285 END IF;
286
287 END Add_Warning;
288 ------------------------------------------------------------------------------
289
290
291 ---------------------------- Add_Unexpected_Error ----------------------------
292
293 PROCEDURE Add_Unexpected_Error
294 ( p_Msg_Ctx IN INV_ITEM_MSG.Msg_Ctx_type
295 , p_Error_Text IN VARCHAR2
296 )
297 IS
298 -- l_Error_Text VARCHAR2(2000);
299 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
300 BEGIN
301
302 /*
303 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.g_MSG_LVL_UNEXP_ERROR) THEN
304
305 FND_MSG_PUB.Add_Exc_Msg
306 ( p_pkg_name => G_PKG_NAME
307 , p_procedure_name => g_api_name
308 , p_error_text => p_Error_Text
309 );
310 */
311 /*
312 IF ( Log_Mode = 'CP_LOG' ) THEN
313 l_Error_Text := SUBSTRB (p_Error_Text, 1,240);
314 ELSE
315 l_Error_Text := p_Error_Text;
316 END IF;
317 */
318
319 IF (g_Level_Unexpected >= g_Message_Level) THEN
320 Add_Message
321 ( p_Msg_Name => 'INV_ITEM_UNEXPECTED_ERROR'
322 , p_token1 => 'PKG_NAME'
323 , p_value1 => p_Msg_Ctx.Package_Name
324 , p_token2 => 'PROCEDURE_NAME'
325 , p_value2 => p_Msg_Ctx.Procedure_Name
326 , p_token3 => 'ERROR_TEXT'
327 , p_value3 => p_Error_Text
328 );
329 END IF;
330
331 END Add_Unexpected_Error;
332 ------------------------------------------------------------------------------
333
334
335 ----------------------------------- Debug ------------------------------------
336
337 PROCEDURE Debug
338 ( p_Msg_Ctx IN INV_ITEM_MSG.Msg_Ctx_type
339 , p_Msg_Text IN VARCHAR2
340 )
341 IS
342 -- l_msg_text VARCHAR2(2000);
343 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
344 BEGIN
345
346 -- l_msg_text := g_Package_Name || '.' || g_Procedure_Name ': ' p_Msg_Text;
347
348 -- Use Add_Message for debugging as well in order to have a consistent way
349 -- of getting all messages in encoded format irrespective of the message level.
350
351 IF (g_Level_Statement >= g_Message_Level) THEN
352 Add_Message
353 ( p_Msg_Name => 'INV_API_DEBUG_TEXT'
354 , p_token1 => 'PACKAGE_NAME'
355 , p_value1 => p_Msg_Ctx.Package_Name
356 , p_token2 => 'PROCEDURE_NAME'
357 , p_value2 => p_Msg_Ctx.Procedure_Name
358 , p_token3 => 'TEXT'
359 , p_value3 => p_Msg_Text
360 );
361 END IF;
362
363 END Debug;
364 ------------------------------------------------------------------------------
365
366
367 ---------------------------------- Count_Msg ---------------------------------
368
369 -- Usage Used by API callers and developers to find the count
370 -- of messages in the message list.
371 --
372 -- Desc Returns the value of g_Msg_Count.
373
374 FUNCTION Count_Msg
375 RETURN NUMBER
376 IS
377 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
378 BEGIN
379
380 RETURN g_Msg_Count;
381
382 END Count_Msg;
383
384
385 -------------------------------- Count_And_Get -------------------------------
386
387 -- Usage Used by API developers to find the count of messages
388 -- in the message table. If there is only one message in
389 -- the table it retrieves this message.
390
391 PROCEDURE Count_And_Get
392 ( p_encoded IN VARCHAR2 := FND_API.g_TRUE
393 , p_count OUT NOCOPY NUMBER
394 , p_data OUT NOCOPY VARCHAR2
395 )
396 IS
397 l_Msg_Index NUMBER := g_Msg_Index;
398 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
399 BEGIN
400
401 IF ( g_Msg_Count = 1 ) THEN
402
403 g_Msg_Index := 1; -- G_FIRST
404
405 IF ( FND_API.To_Boolean( p_encoded ) ) THEN
406 p_data := g_Msg_Tbl( g_Msg_Index ).Msg_Data;
407 ELSE
408 FND_MESSAGE.Set_Encoded ( g_Msg_Tbl( g_Msg_Index ).Msg_Data );
409 p_data := FND_MESSAGE.Get;
410 END IF;
411 ELSE
412 p_data := NULL;
413 END IF; -- (g_Msg_Count = 1)
414
415 p_count := g_Msg_Count ;
416
417 EXCEPTION
418
419 WHEN no_data_found THEN
420
421 -- Revert g_Msg_Index and return
422 g_Msg_Index := l_Msg_Index;
423
424 p_data := NULL;
425
426 END Count_And_Get;
427
428
429 -------------------------------- Write_Message -------------------------------
430
431 -- Usage Used to unload a message from the message table.
432 --
433
434 PROCEDURE Write_Message
435 ( p_msg_index IN NUMBER
436 )
437 IS
438 l_Msg_Index NUMBER := g_Msg_Index;
439 l_Msg_Name VARCHAR2(30);
440 l_msg_text VARCHAR2(2000);
441 l_transaction_id NUMBER;
442 l_column_name VARCHAR2(30);
443 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
444 BEGIN
445
446 -- Get message without token substitution
447 --l_msg_text := FND_MESSAGE.Get_String('INV', 'INV_CAT_SET_CAT_COMB');
448
449 IF ( p_msg_index = G_NEXT ) THEN
450 g_Msg_Index := g_Msg_Index + 1;
451 ELSIF ( p_msg_index = G_PREVIOUS ) THEN
452 g_Msg_Index := g_Msg_Index - 1;
453 ELSIF ( p_msg_index = G_FIRST ) THEN
454 g_Msg_Index := 1;
455 ELSIF ( p_msg_index = G_LAST ) THEN
456 g_Msg_Index := g_Msg_Count;
457 ELSE
458 g_Msg_Index := p_msg_index;
459 END IF;
460
461 -- Get translated message text
462 BEGIN
463
464 FND_MESSAGE.Set_Encoded( g_Msg_Tbl( g_Msg_Index ).Msg_Data );
465 l_msg_text := FND_MESSAGE.Get;
466
467 EXCEPTION
468 WHEN no_data_found THEN
469 -- No more messages, revert g_Msg_Index and return
470 g_Msg_Index := l_Msg_Index;
471
472 --l_msg_text := NULL;
473 RETURN;
474 END;
475
476 IF (g_Message_Mode = 'CP_LOG') THEN
477
478 -- Write the message into concurrent request log file,
479 -- and insert into the interface error table
480
481 FND_FILE.Put_Line (FND_FILE.Log, SUBSTRB(l_msg_text, 1,240));
482
483 l_Msg_Name := g_Msg_Tbl( g_Msg_Index ).Msg_Name ;
484 l_transaction_id := g_Msg_Tbl( g_Msg_Index ).Transaction_Id ;
485
486 IF ( l_transaction_id = fnd_api.g_MISS_NUM ) THEN
487 l_transaction_id := NULL;
488 END IF;
489
490 l_column_name := g_Msg_Tbl( g_Msg_Index ).Column_Name ;
491
492 Insert_Interface_Error
493 (
494 p_Msg_Name => l_Msg_Name
495 , p_Msg_Text => l_msg_text
496 , p_transaction_id => l_transaction_id
497 , p_column_name => l_column_name
498 );
499
500 ELSIF (g_Message_Mode = 'FILE') THEN
501 -- Write the message into concurrent request log file,
502 FND_FILE.Put_Line (FND_FILE.Log, SUBSTRB(l_msg_text, 1,240));
503 ELSIF (g_Message_Mode = 'PLM_LOG') THEN
504
505 -- Write into Error handler.
506 Error_Handler.Add_Error_Message
507 (p_message_text => l_msg_text
508 ,p_message_type => 'E');
509
510 ELSIF (g_Message_Mode = 'CONSOLE') THEN
511 null;
512 --DBMS_OUTPUT.put_line ( SUBSTRB( REPLACE(l_msg_text, chr(0), ' '), 1,250) );
513
514 --Bug: 2451359 Added the PLSQL message_mode.
515 ELSIF (g_Message_Mode = 'PLSQL') THEN
516 FND_MESSAGE.Set_Encoded( g_Msg_Tbl( g_Msg_Index ).Msg_Data );
517 FND_MSG_PUB.Add;
518
519 END IF; -- g_Message_Mode
520
521 /* to get message text
522 l_msg_text := FND_MSG_PUB.Get ( p_msg_index => FND_MSG_PUB.g_LAST
523 , p_encoded => FND_API.g_FALSE
524 );
525
526 -- Reset current message index value back to 0
527 FND_MSG_PUB.Reset (FND_MSG_PUB.g_FIRST);
528 */
529
530 END Write_Message;
531
532
533 --------------------------------- Write_List ---------------------------------
534
535 -- Usage Used to write all messages from the message table.
536 --
537
538 PROCEDURE Write_List
539 ( p_delete IN BOOLEAN DEFAULT TRUE
540 )
541 IS
542 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
543 BEGIN
544 FOR i IN 1 .. g_Msg_Count LOOP -- g_Msg_Tbl.COUNT
545 Write_Message (i);
546 END LOOP;
547
548 -- Clear the message table and reset its global variables
549
550 IF ( p_delete ) THEN
551 Initialize;
552 END IF;
553
554 END Write_List;
555
556
557 --------------------------- Insert_Interface_Error ---------------------------
558
559 PROCEDURE Insert_Interface_Error
560 (
561 p_Msg_Name IN VARCHAR2
562 , p_Msg_Text IN VARCHAR2
563 , p_transaction_id IN NUMBER
564 , p_column_name IN VARCHAR2
565 )
566 IS
567 l_Msg_Name VARCHAR2(30) := SUBSTRB(p_Msg_Name, 1,30);
568 l_Msg_Text VARCHAR2(240) := SUBSTRB(p_Msg_Text, 1,240);
569 l_Sysdate DATE := SYSDATE;
570 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
571 BEGIN
572
573 INSERT INTO mtl_interface_errors
574 (
575 TRANSACTION_ID
576 , UNIQUE_ID
577 , ORGANIZATION_ID
578 , TABLE_NAME
579 , COLUMN_NAME
580 , MESSAGE_NAME
581 , ERROR_MESSAGE
582 , CREATION_DATE
583 , CREATED_BY
584 , LAST_UPDATE_DATE
585 , LAST_UPDATED_BY
586 , LAST_UPDATE_LOGIN
587 , PROGRAM_APPLICATION_ID
588 , PROGRAM_ID
589 , REQUEST_ID
590 , PROGRAM_UPDATE_DATE
591 )
592 VALUES
593 (
594 p_transaction_id
595 , mtl_system_items_interface_s.NEXTVAL
596 , g_Organization_Id
597 , g_Table_Name
598 , p_column_name
599 , l_Msg_Name
600 , l_Msg_Text
601 , l_Sysdate
602 , g_User_id
603 , l_Sysdate
604 , g_User_id
605 , g_Login_id
606 , g_Prog_appid
607 , g_Prog_id
608 , g_Request_id
609 , l_Sysdate
610 );
611
612 EXCEPTION
613
614 WHEN others THEN
615 FND_FILE.Put_Line( FND_FILE.Log, SUBSTRB('Unexpected error in INV_ITEM_MSG.Insert_Interface_Error: ' || SQLERRM, 1,240) );
616
617 END Insert_Interface_Error;
618 ------------------------------------------------------------------------------
619
620 -- PROCEDURE Get
621 --
622
623 PROCEDURE Get
624 ( p_msg_index IN NUMBER := G_NEXT ,
625 p_encoded IN VARCHAR2 := 'T' ,
626 p_data OUT NOCOPY VARCHAR2 ,
627 p_msg_index_out OUT NOCOPY NUMBER
628 )
629 IS
630 l_msg_index NUMBER := G_msg_index;
631 BEGIN
632
633 IF p_msg_index = G_NEXT THEN
634 G_msg_index := G_msg_index + 1;
635 ELSIF p_msg_index = G_FIRST THEN
636 G_msg_index := 1;
637 ELSIF p_msg_index = G_PREVIOUS THEN
638 G_msg_index := G_msg_index - 1;
639 ELSIF p_msg_index = G_LAST THEN
640 G_msg_index := G_msg_count ;
641 ELSE
642 G_msg_index := p_msg_index ;
643 END IF;
644
645
646 IF FND_API.To_Boolean( p_encoded ) THEN
647 FND_MESSAGE.Set_Encoded( g_Msg_Tbl( g_Msg_Index ).Msg_Data );
648 p_data := FND_MESSAGE.Get;
649 END IF;
650
651 p_msg_index_out := G_msg_index;
652
653 EXCEPTION
654
655 WHEN NO_DATA_FOUND THEN
656
657 -- No more messages, revert G_msg_index and return NULL;
658
659 G_msg_index := l_msg_index;
660
661 p_data := NULL;
662 p_msg_index_out := NULL;
663
664 END Get;
665
666 ------------------------------------------------------------------------------
667 -- FUNCTION Get
668 --
669
670 FUNCTION Get
671 ( p_msg_index IN NUMBER := G_NEXT ,
672 p_encoded IN VARCHAR2 := 'T'
673 )
674 RETURN VARCHAR2
675 IS
676 l_data VARCHAR2(2000) ;
677 l_msg_index_out NUMBER ;
678 BEGIN
679
680 Get
681 ( p_msg_index ,
682 p_encoded ,
683 l_data ,
684 l_msg_index_out
685 );
686
687 RETURN l_data ;
688
689 END Get;
690 ------------------------------------------------------------------------------
691
692 END INV_ITEM_MSG;