DBA Data[Home] [Help]

PACKAGE BODY: APPS.INV_ITEM_MSG

Source


1 PACKAGE BODY INV_ITEM_MSG AS
2 /* $Header: INVVIMSB.pls 120.3 2006/05/29 05:40:32 lparihar noship $ */
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 
231    g_Msg_Tbl( g_Msg_Count ).Msg_Data       := FND_MESSAGE.Get_Encoded ;
232    g_Msg_Tbl( g_Msg_Count ).Msg_Name       := p_Msg_Name ;
233    g_Msg_Tbl( g_Msg_Count ).Transaction_Id := p_transaction_id ;
234    g_Msg_Tbl( g_Msg_Count ).Column_Name    := p_column_name ;
235 
236 END Add_Message;
237 ------------------------------------------------------------------------------
238 
239 
240 ---------------------------------- Add_Error ---------------------------------
241 
242 PROCEDURE Add_Error
243 (  p_Msg_Name   IN  VARCHAR2
244 ,  p_token      IN  VARCHAR2  DEFAULT  fnd_api.g_MISS_CHAR
245 ,  p_value      IN  VARCHAR2  DEFAULT  fnd_api.g_MISS_CHAR
246 ,  p_translate  IN  VARCHAR2  DEFAULT  fnd_api.g_FALSE
247 )
248 IS
249     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
250 BEGIN
251 
252    IF (g_Level_Error >= g_Message_Level) THEN
253       Add_Message
254       (  p_Msg_Name   =>  p_Msg_Name
255       ,  p_token1     =>  p_token
256       ,  p_value1     =>  p_value
257       ,  p_translate  =>  p_translate
258       );
259    END IF;
260 
261 END Add_Error;
262 ------------------------------------------------------------------------------
263 
264 
265 --------------------------------- Add_Warning --------------------------------
266 
267 PROCEDURE Add_Warning
268 (  p_Msg_Name   IN  VARCHAR2
269 ,  p_token      IN  VARCHAR2  DEFAULT  fnd_api.g_MISS_CHAR
270 ,  p_value      IN  VARCHAR2  DEFAULT  fnd_api.g_MISS_CHAR
271 ,  p_translate  IN  VARCHAR2  DEFAULT  fnd_api.g_FALSE
272 )
273 IS
274     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
275 BEGIN
276 
277    IF (g_Level_Warning >= g_Message_Level) THEN
278       Add_Message
279       (  p_Msg_Name   =>  p_Msg_Name
280       ,  p_token1     =>  p_token
281       ,  p_value1     =>  p_value
282       ,  p_translate  =>  p_translate
283       );
284    END IF;
285 
286 END Add_Warning;
287 ------------------------------------------------------------------------------
288 
289 
290 ---------------------------- Add_Unexpected_Error ----------------------------
291 
292 PROCEDURE Add_Unexpected_Error
293 (  p_Msg_Ctx        IN  INV_ITEM_MSG.Msg_Ctx_type
294 ,  p_Error_Text     IN  VARCHAR2
295 )
296 IS
297 --   l_Error_Text    VARCHAR2(2000);
298     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
299 BEGIN
300 
301 /*
302    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.g_MSG_LVL_UNEXP_ERROR) THEN
303 
304       FND_MSG_PUB.Add_Exc_Msg
305       (  p_pkg_name         =>  G_PKG_NAME
306       ,  p_procedure_name   =>  g_api_name
307       ,  p_error_text       =>  p_Error_Text
308       );
309 */
310 /*
311    IF ( Log_Mode = 'CP_LOG' ) THEN
312       l_Error_Text := SUBSTRB (p_Error_Text, 1,240);
313    ELSE
314       l_Error_Text := p_Error_Text;
315    END IF;
316 */
317 
318    IF (g_Level_Unexpected >= g_Message_Level) THEN
319       Add_Message
320       (  p_Msg_Name    =>  'INV_ITEM_UNEXPECTED_ERROR'
321       ,  p_token1      =>  'PKG_NAME'
322       ,  p_value1      =>  p_Msg_Ctx.Package_Name
323       ,  p_token2      =>  'PROCEDURE_NAME'
324       ,  p_value2      =>  p_Msg_Ctx.Procedure_Name
325       ,  p_token3      =>  'ERROR_TEXT'
326       ,  p_value3      =>  p_Error_Text
327       );
328    END IF;
329 
330 END Add_Unexpected_Error;
331 ------------------------------------------------------------------------------
332 
333 
334 ----------------------------------- Debug ------------------------------------
335 
336 PROCEDURE Debug
337 (  p_Msg_Ctx        IN  INV_ITEM_MSG.Msg_Ctx_type
338 ,  p_Msg_Text       IN  VARCHAR2
339 )
340 IS
341 --   l_msg_text       VARCHAR2(2000);
342     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
343 BEGIN
344 
345 --   l_msg_text := g_Package_Name || '.' || g_Procedure_Name ': ' p_Msg_Text;
346 
347    -- Use Add_Message for debugging as well in order to have a consistent way
348    -- of getting all messages in encoded format irrespective of the message level.
349 
350    IF (g_Level_Statement >= g_Message_Level) THEN
351       Add_Message
352       (  p_Msg_Name    =>  'INV_API_DEBUG_TEXT'
353       ,  p_token1      =>  'PACKAGE_NAME'
354       ,  p_value1      =>  p_Msg_Ctx.Package_Name
355       ,  p_token2      =>  'PROCEDURE_NAME'
356       ,  p_value2      =>  p_Msg_Ctx.Procedure_Name
357       ,  p_token3      =>  'TEXT'
358       ,  p_value3      =>  p_Msg_Text
359       );
360    END IF;
361 
362 END Debug;
363 ------------------------------------------------------------------------------
364 
365 
369 --		of messages in the message list.
366 ---------------------------------- Count_Msg ---------------------------------
367 
368 -- Usage	Used by API callers and developers to find the count
370 --
371 -- Desc		Returns the value of g_Msg_Count.
372 
373 FUNCTION Count_Msg
374 RETURN  NUMBER
375 IS
376     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
377 BEGIN
378 
379    RETURN g_Msg_Count;
380 
381 END Count_Msg;
382 
383 
384 -------------------------------- Count_And_Get -------------------------------
385 
386 -- Usage	Used by API developers to find the count of messages
387 --		in the message table. If there is only one message in
388 --		the table it retrieves this message.
389 
390 PROCEDURE Count_And_Get
391 (  p_encoded     IN   VARCHAR2  :=  FND_API.g_TRUE
392 ,  p_count       OUT  NOCOPY NUMBER
393 ,  p_data        OUT  NOCOPY VARCHAR2
394 )
395 IS
396    l_Msg_Index      NUMBER  :=  g_Msg_Index;
397     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
398 BEGIN
399 
400    IF ( g_Msg_Count = 1 ) THEN
401 
402       g_Msg_Index := 1;  -- G_FIRST
403 
404       IF ( FND_API.To_Boolean( p_encoded ) ) THEN
405          p_data := g_Msg_Tbl( g_Msg_Index ).Msg_Data;
406       ELSE
407          FND_MESSAGE.Set_Encoded ( g_Msg_Tbl( g_Msg_Index ).Msg_Data );
408          p_data := FND_MESSAGE.Get;
409       END IF;
410    ELSE
411       p_data := NULL;
412    END IF;  -- (g_Msg_Count = 1)
413 
414    p_count := g_Msg_Count ;
415 
416 EXCEPTION
417 
418    WHEN no_data_found THEN
419 
420       -- Revert g_Msg_Index and return
421       g_Msg_Index := l_Msg_Index;
422 
423       p_data := NULL;
424 
425 END Count_And_Get;
426 
427 
428 -------------------------------- Write_Message -------------------------------
429 
430 -- Usage	Used to unload a message from the message table.
431 --
432 
433 PROCEDURE Write_Message
434 (  p_msg_index    IN  NUMBER
435 )
436 IS
437    l_Msg_Index         NUMBER          :=  g_Msg_Index;
438    l_Msg_Name          VARCHAR2(30);
439    l_msg_text          VARCHAR2(2000);
440    l_transaction_id    NUMBER;
441    l_column_name       VARCHAR2(30);
442     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
443 BEGIN
444 
445 -- Get message without token substitution
446 --l_msg_text := FND_MESSAGE.Get_String('INV', 'INV_CAT_SET_CAT_COMB');
447 
448    IF ( p_msg_index = G_NEXT ) THEN
449       g_Msg_Index := g_Msg_Index + 1;
450    ELSIF ( p_msg_index = G_PREVIOUS ) THEN
451       g_Msg_Index := g_Msg_Index - 1;
452    ELSIF ( p_msg_index = G_FIRST ) THEN
453       g_Msg_Index := 1;
454    ELSIF ( p_msg_index = G_LAST ) THEN
455       g_Msg_Index := g_Msg_Count;
456    ELSE
457       g_Msg_Index := p_msg_index;
458    END IF;
459 
460    -- Get translated message text
461    BEGIN
462 
463       FND_MESSAGE.Set_Encoded( g_Msg_Tbl( g_Msg_Index ).Msg_Data );
467       WHEN no_data_found THEN
464       l_msg_text := FND_MESSAGE.Get;
465 
466    EXCEPTION
468          -- No more messages, revert g_Msg_Index and return
469          g_Msg_Index := l_Msg_Index;
470 
471          --l_msg_text := NULL;
472          RETURN;
473    END;
474 
475    IF (g_Message_Mode = 'CP_LOG') THEN
476 
477       -- Write the message into concurrent request log file,
478       -- and insert into the interface error table
479 
480       FND_FILE.Put_Line (FND_FILE.Log, SUBSTRB(l_msg_text, 1,240));
481 
482       l_Msg_Name       := g_Msg_Tbl( g_Msg_Index ).Msg_Name ;
483       l_transaction_id := g_Msg_Tbl( g_Msg_Index ).Transaction_Id ;
484 
485       IF ( l_transaction_id = fnd_api.g_MISS_NUM ) THEN
486          l_transaction_id := NULL;
487       END IF;
488 
489       l_column_name := g_Msg_Tbl( g_Msg_Index ).Column_Name ;
490 
491       Insert_Interface_Error
492       (
493          p_Msg_Name        =>  l_Msg_Name
494       ,  p_Msg_Text        =>  l_msg_text
495       ,  p_transaction_id  =>  l_transaction_id
496       ,  p_column_name     =>  l_column_name
497       );
498 
499    ELSIF (g_Message_Mode = 'FILE') THEN
500    -- Write the message into concurrent request log file,
501       FND_FILE.Put_Line (FND_FILE.Log, SUBSTRB(l_msg_text, 1,240));
502    ELSIF (g_Message_Mode = 'PLM_LOG') THEN
503 
504       -- Write into Error handler.
505       Error_Handler.Add_Error_Message
506         (p_message_text  => l_msg_text
507 	,p_message_type  =>  'E');
508 
509    ELSIF (g_Message_Mode = 'CONSOLE') THEN
510       null;
511       --DBMS_OUTPUT.put_line ( SUBSTRB( REPLACE(l_msg_text, chr(0), ' '), 1,250) );
512 
513 --Bug: 2451359 Added the PLSQL message_mode.
514    ELSIF (g_Message_Mode = 'PLSQL') THEN
515       FND_MESSAGE.Set_Encoded( g_Msg_Tbl( g_Msg_Index ).Msg_Data );
516       FND_MSG_PUB.Add;
517 
518    END IF;  -- g_Message_Mode
519 
520 /* to get message text
521    l_msg_text := FND_MSG_PUB.Get (  p_msg_index  =>  FND_MSG_PUB.g_LAST
522                                  ,  p_encoded    =>  FND_API.g_FALSE
523                                  );
524 
525    -- Reset current message index value back to 0
526    FND_MSG_PUB.Reset (FND_MSG_PUB.g_FIRST);
527 */
528 
529 END Write_Message;
530 
531 
532 --------------------------------- Write_List ---------------------------------
533 
534 -- Usage      Used to write all messages from the message table.
535 --
536 
537 PROCEDURE Write_List
538 (  p_delete    IN  BOOLEAN  DEFAULT  TRUE
539 )
540 IS
541     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
542 BEGIN
543    FOR i IN 1 .. g_Msg_Count LOOP  -- g_Msg_Tbl.COUNT
544       Write_Message (i);
545    END LOOP;
546 
547    -- Clear the message table and reset its global variables
548 
549    IF ( p_delete ) THEN
550       Initialize;
551    END IF;
552 
553 END Write_List;
554 
555 
559 (
556 --------------------------- Insert_Interface_Error ---------------------------
557 
558 PROCEDURE Insert_Interface_Error
560    p_Msg_Name        IN  VARCHAR2
561 ,  p_Msg_Text        IN  VARCHAR2
562 ,  p_transaction_id  IN  NUMBER
563 ,  p_column_name     IN  VARCHAR2
564 )
565 IS
566    l_Msg_Name       VARCHAR2(30)   :=  SUBSTRB(p_Msg_Name, 1,30);
567    l_Msg_Text       VARCHAR2(240)  :=  SUBSTRB(p_Msg_Text, 1,240);
568    l_Sysdate        DATE           :=  SYSDATE;
569     l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
570 BEGIN
571 
572    INSERT INTO mtl_interface_errors
573    (
574       TRANSACTION_ID
575    ,  UNIQUE_ID
576    ,  ORGANIZATION_ID
577    ,  TABLE_NAME
578    ,  COLUMN_NAME
579    ,  MESSAGE_NAME
580    ,  ERROR_MESSAGE
581    ,  CREATION_DATE
582    ,  CREATED_BY
583    ,  LAST_UPDATE_DATE
584    ,  LAST_UPDATED_BY
585    ,  LAST_UPDATE_LOGIN
586    ,  PROGRAM_APPLICATION_ID
587    ,  PROGRAM_ID
588    ,  REQUEST_ID
589    ,  PROGRAM_UPDATE_DATE
590    )
591    VALUES
592    (
593       p_transaction_id
594    ,  mtl_system_items_interface_s.NEXTVAL
595    ,  g_Organization_Id
596    ,  g_Table_Name
597    ,  p_column_name
598    ,  l_Msg_Name
599    ,  l_Msg_Text
600    ,  l_Sysdate
601    ,  g_User_id
602    ,  l_Sysdate
603    ,  g_User_id
604    ,  g_Login_id
605    ,  g_Prog_appid
606    ,  g_Prog_id
607    ,  g_Request_id
608    ,  l_Sysdate
609    );
610 
611 EXCEPTION
612 
613    WHEN others THEN
614       FND_FILE.Put_Line( FND_FILE.Log, SUBSTRB('Unexpected error in INV_ITEM_MSG.Insert_Interface_Error: ' || SQLERRM, 1,240) );
615 
616 END Insert_Interface_Error;
617 ------------------------------------------------------------------------------
618 
619 --  PROCEDURE 	Get
620 --
621 
622 PROCEDURE    Get
623 (   p_msg_index	    IN	NUMBER	    := G_NEXT		,
624     p_encoded	    IN	VARCHAR2    := 'T'	,
625     p_data	    OUT	NOCOPY VARCHAR2			,
626     p_msg_index_out OUT	NOCOPY NUMBER
627 )
628 IS
629 l_msg_index NUMBER := G_msg_index;
630 BEGIN
631 
632     IF p_msg_index = G_NEXT THEN
633 	G_msg_index := G_msg_index + 1;
634     ELSIF p_msg_index = G_FIRST THEN
635 	G_msg_index := 1;
636     ELSIF p_msg_index = G_PREVIOUS THEN
637 	G_msg_index := G_msg_index - 1;
638     ELSIF p_msg_index = G_LAST THEN
639 	G_msg_index := G_msg_count ;
640     ELSE
641 	G_msg_index := p_msg_index ;
642     END IF;
643 
644 
645     IF FND_API.To_Boolean( p_encoded ) THEN
646        FND_MESSAGE.Set_Encoded( g_Msg_Tbl( g_Msg_Index ).Msg_Data );
647        p_data := FND_MESSAGE.Get;
648     END IF;
649 
650     p_msg_index_out	:=  G_msg_index;
651 
652 EXCEPTION
653 
654     WHEN NO_DATA_FOUND THEN
655 
656 	--  No more messages, revert G_msg_index and return NULL;
657 
658 	G_msg_index := l_msg_index;
659 
660 	p_data		:=  NULL;
661 	p_msg_index_out	:=  NULL;
662 
663 END Get;
664 
665 ------------------------------------------------------------------------------
666 --  FUNCTION	Get
667 --
668 
669 FUNCTION    Get
670 (   p_msg_index	    IN NUMBER	:= G_NEXT	    ,
671     p_encoded	    IN VARCHAR2	:= 'T'
672 )
673 RETURN VARCHAR2
674 IS
675     l_data	    VARCHAR2(2000)  ;
676     l_msg_index_out NUMBER	    ;
677 BEGIN
678 
679     Get
680     (	p_msg_index	    ,
681 	p_encoded	    ,
682 	l_data		    ,
683 	l_msg_index_out
684     );
685 
686     RETURN l_data ;
687 
688 END Get;
689 ------------------------------------------------------------------------------
690 
691 END INV_ITEM_MSG;