DBA Data[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;