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