DBA Data[Home] [Help]

PACKAGE BODY: APPS.FUN_RICH_MESSAGE_PKG

Source


1 PACKAGE BODY FUN_RICH_MESSAGE_PKG  AS
2 /* $Header: FUNXTMRULRTMUTB.pls 120.0 2005/06/20 04:30:10 ammishra noship $ */
3 
4 
5 TYPE token_rec_type IS RECORD (
6    TOK_NAM   VARCHAR2(100),
7    TOK_VAL   VARCHAR2(100)
8 );
9 
10 TYPE token_tab_type IS TABLE OF token_rec_type INDEX BY BINARY_INTEGER;
11 
12 g_token_list token_tab_type;
13 g_token_count NUMBER := 0;
14 
15 
16 FUNCTION GET_MESSAGE_PRIVATE(APPIN IN VARCHAR2,
17                             NAMEIN IN VARCHAR2)
18 RETURN CLOB;
19 
20 FUNCTION CLOB_REPLACE(P_LOB IN OUT nocopy CLOB,
21                       P_WHAT IN VARCHAR2,
22       	              P_WITH IN VARCHAR2 ) RETURN CLOB
23 IS
24 temp_clob        CLOB;
25 end_offset       INTEGER := 1;
26 start_offset     INTEGER := 1;
27 occurence        NUMBER := 1;
28 replace_str_len  NUMBER := LENGTH(P_WITH);
29 temp_clob_len    NUMBER := 0;
30 dest_lob_len     NUMBER := 0;
31 
32 BEGIN
33   IF DBMS_LOB.ISOPEN(P_LOB) = 0 THEN
34     NULL;
35   END IF;
36   DBMS_LOB.CREATETEMPORARY(temp_clob,TRUE,DBMS_LOB.SESSION);
37   LOOP
38     end_offset := DBMS_LOB.INSTR(P_LOB,P_WHAT,1,occurence);
39     IF end_offset = 0 THEN
40       temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
41       dest_lob_len := DBMS_LOB.GETLENGTH(P_LOB) - start_offset + 1;
42       IF dest_lob_len > 0 THEN
43         DBMS_LOB.COPY(temp_clob,P_LOB,dest_lob_len,temp_clob_len+1,start_offset);
44       END IF;
45       EXIT;
46     END IF;
47     temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
48     IF (end_offset - start_offset) > 0 THEN
49       DBMS_LOB.COPY(temp_clob,P_LOB,(end_offset - start_offset),temp_clob_len+1,start_offset);
50     END IF;
51     start_offset := end_offset + LENGTH(P_WHAT);
52     occurence := occurence + 1;
53     IF P_WITH IS NOT NULL THEN
54       DBMS_LOB.WRITEAPPEND(temp_clob,replace_str_len,P_WITH);
55     END IF;
56   END LOOP;
57   IF LENGTH(P_WHAT) > LENGTH(P_WITH) THEN
58     DBMS_LOB.TRIM(P_LOB,DBMS_LOB.GETLENGTH(temp_clob));
59   END IF;
60 --  DBMS_LOB.COPY(dest_lob,temp_clob,DBMS_LOB.GETLENGTH(temp_clob),1,1);
61   RETURN temp_clob;
62 
63 END;
64 
65 /*
66 FUNCTION TEST RETURN CLOB IS
67 BEGIN
68   TOKEN_TAB(1).TOK_NAM := 'ROWID';
69   TOKEN_TAB(1).TOK_VAL := '931';
70 
71   TOKEN_TAB(2).TOK_NAM := 'LANGUAGE_CODE';
72   TOKEN_TAB(2).TOK_VAL := 'US';
73 
74   MSGTEST := FUN_RICH_MESSAGE_PKG.get('SQLAP','FUN_RULE_DEFINED_MSG106',TOKEN_TAB);
75 
76   RETURN MSGTEST;
77 END;
78 */
79 
80 PROCEDURE init_token_list IS
81 BEGIN
82     g_token_count := 0;
83 END init_token_list;
84 
85 PROCEDURE add_token(name VARCHAR2, value VARCHAR2) IS
86     l_token_rec token_rec_type;
87   BEGIN
88     l_token_rec.tok_nam := name;
89     l_token_rec.tok_val := value;
90 
91     g_token_count := g_token_count + 1;
92     g_token_list(g_token_count) := l_token_rec;
93 
94 END add_token;
95 
96 --Method to be called from Java programs where token substitutions would happen in Java.
97 FUNCTION GET_MESSAGE_JAVA(APPLICATION_SHORT_NAME  IN VARCHAR2,
98              MESSAGE_NAME in varchar2
99             ) return CLOB IS
100 
101 MSG       CLOB;
102 SRCH      VARCHAR2(2000);
103 TOK_NAM   VARCHAR2(100);
104 TOK_VAL   VARCHAR2(100);
105 
106 BEGIN
107 
108 IF (MESSAGE_NAME IS NULL) THEN
109     MSG := '';
110     RETURN MSG;
111 END IF;
112 
113 MSG := GET_MESSAGE_PRIVATE(APPLICATION_SHORT_NAME, MESSAGE_NAME);
114 
115 IF ((MSG IS NULL) OR (MSG = '')) THEN
116     MSG := MESSAGE_NAME;
117 END IF;
118 
119 RETURN MSG;  --Returns the CLOB message text with tokens.
120 
121 END;
122 
123 FUNCTION GET_MESSAGE(APPLICATION_SHORT_NAME  IN VARCHAR2,
124              MESSAGE_NAME IN VARCHAR2
125             ) RETURN CLOB IS
126 
127 MSG       CLOB;
128 SRCH      VARCHAR2(2000);
129 TOK_NAM   VARCHAR2(100);
130 TOK_VAL   VARCHAR2(100);
131 
132 BEGIN
133 
134 IF (MESSAGE_NAME IS NULL) THEN
135     MSG := '';
136     RETURN MSG;
137 END IF;
138 
139 MSG := GET_MESSAGE_PRIVATE(APPLICATION_SHORT_NAME, MESSAGE_NAME);
140 
141 IF ((MSG IS NULL) OR (MSG = '')) THEN
142     MSG := MESSAGE_NAME;
143 END IF;
144 
145 --THis table contains records of Token name and Token Value.
146 
147 FOR i IN 1 .. G_TOKEN_LIST.COUNT
148 LOOP
149     TOK_NAM := G_TOKEN_LIST(i).TOK_NAM;
150     TOK_VAL := G_TOKEN_LIST(i).TOK_VAL;
151 
152     IF (TOK_NAM IS NOT NULL OR TOK_NAM <> '') THEN
153        SRCH := '&'||'amp;' || TOK_NAM;
154        MSG := CLOB_REPLACE(MSG,SRCH,TOK_VAL);
155     END IF;
156 
157 END LOOP;
158 
159 RETURN MSG;
160 
161 END;
162 
163 FUNCTION GET_MESSAGE_PRIVATE(APPIN IN VARCHAR2,
164          	     NAMEIN IN VARCHAR2)
165 RETURN CLOB IS
166 
167 	MSG CLOB;
168 
169 BEGIN
170 
171 	SELECT MESSAGE_TEXT
172 	INTO MSG
173 	FROM FUN_RICH_MESSAGES_VL M, FND_APPLICATION A
174 	WHERE M.MESSAGE_NAME = NAMEIN
175 	AND A.APPLICATION_SHORT_NAME = APPIN
176 	AND M.APPLICATION_ID = A.APPLICATION_ID
177         FOR UPDATE;  --Else LOB Locator complains.
178 
179   RETURN MSG;
180 EXCEPTION
181 
182 	/* NULL HANDLING */
183 	WHEN NO_DATA_FOUND THEN
184 	  MSG := NULL;
185           RETURN MSG;
186 
187 	WHEN OTHERS THEN
188 	  MSG := NULL;
189           RETURN MSG;
190 
191 END;
192 
193 
194 END FUN_RICH_MESSAGE_PKG;