[Home] [Help]
PACKAGE BODY: APPS.QP_JAVA_ENGINE
Source
1 PACKAGE BODY QP_JAVA_ENGINE AS
2 /* $Header: QPXINTJB.pls 120.0 2005/06/02 00:17:07 appldev noship $ */
3
4 l_debug VARCHAR2(3);
5 TYPE PROFNAME_TYPE IS TABLE OF VARCHAR2(80) INDEX BY BINARY_INTEGER;
6 TYPE PROFVALUE_TYPE IS TABLE OF VARCHAR2(240) INDEX BY BINARY_INTEGER;
7
8 G_PROFILE_NAMES PROFNAME_TYPE;
9 G_PROFILE_VALUES PROFVALUE_TYPE;
10 G_PROFILE_STR varchar2(32767);
11
12 /*+----------------------------------------------------------------------
13 | PROCEDURE insert_profs2_AT
14 | This procedure insert profile name/value pairs into interface table
15 | qp_int_prof_t using AUTONOMONOUS TRANSACTION
16 +----------------------------------------------------------------------
17 */
18 PROCEDURE Insert_Profs2_AT(
19 p_request_id IN NUMBER,
20 x_status_code OUT NOCOPY VARCHAR2,
21 x_status_text OUT NOCOPY VARCHAR2)
22 AS
23 PRAGMA AUTONOMOUS_TRANSACTION;
24 l_routine VARCHAR2(240):='Routine:QP_JAVA_ENGINE.INSERT_PROFS2_AT';
25
26 CURSOR qp_profs_cur is
27 select PROFILE_OPTION_NAME
28 from FND_PROFILE_OPTIONS
29 where (APPLICATION_ID = 661 or
30 PROFILE_OPTION_NAME = 'ORG_ID') and
31 START_DATE_ACTIVE <=sysdate and
32 nvl(END_DATE_ACTIVE,sysdate) >= sysdate and
33 (APP_ENABLED_FLAG <> 'N' or
34 RESP_ENABLED_FLAG <>'N' or
35 USER_ENABLED_FLAG <>'N');
36
37 --l_profile_names QP_PREQ_GRP.VARCHAR_TYPE;
38
39 BEGIN
40 l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
41
42 x_status_code := FND_API.G_RET_STS_SUCCESS;
43
44 IF G_PROFILE_NAMES.count = 0 THEN
45 IF l_debug = FND_API.G_TRUE THEN
46 QP_PREQ_GRP.engine_debug('G_PROFILE_NAMES cache is empty and needs warming it up.');
47 END IF;
48 OPEN qp_profs_cur;
49 G_PROFILE_NAMES.delete;
50 FETCH qp_profs_cur BULK COLLECT INTO
51 G_PROFILE_NAMES;
52
53 FOR i in G_PROFILE_NAMES.FIRST..G_PROFILE_NAMES.LAST
54 LOOP
55 G_PROFILE_VALUES(i) := FND_PROFILE.value(G_PROFILE_NAMES(i));
56 END LOOP;
57 ELSE
58 IF l_debug = FND_API.G_TRUE THEN
59 QP_PREQ_GRP.engine_debug('G_PROFILE_NAMES cache has been warmed up and reuse it.');
60 END IF;
61 END IF;
62
63 IF l_debug = FND_API.G_TRUE THEN
64 --FOR i in l_profile_names.FIRST..l_profile_names.LAST
65 FOR i in G_PROFILE_NAMES.FIRST..G_PROFILE_NAMES.LAST
66 LOOP
67 --QP_PREQ_GRP.engine_debug('profile name:'||l_profile_names(i)||' value:'||FND_PROFILE.value(l_profile_names(i)));
68 QP_PREQ_GRP.engine_debug('profile name:'||G_PROFILE_NAMES(i)||' value:'||G_PROFILE_VALUES(i));
69 END LOOP;
70 END IF;
71
72 --FORALL i in l_profile_names.FIRST..l_profile_names.LAST
73 FORALL i in G_PROFILE_NAMES.FIRST..G_PROFILE_NAMES.LAST
74 INSERT INTO QP_INT_PROFS_T
75 ( REQUEST_ID,
76 PROFILE_OPTION_NAME,
77 PROFILE_OPTION_VALUE)
78 VALUES ( p_request_id,
79 --l_profile_names(i),
80 --FND_PROFILE.value(l_profile_names(i))
81 G_PROFILE_NAMES(i),
82 G_PROFILE_VALUES(i)
83 );
84 COMMIT;
85 EXCEPTION
86 WHEN OTHERS THEN
87 x_status_code := FND_API.G_RET_STS_ERROR;
88 x_status_text :=l_routine||' '||SQLERRM;
89 IF QP_PREQ_GRP.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
90 QP_PREQ_GRP.engine_debug(l_routine||' '||SQLERRM);
91 QP_PREQ_GRP.engine_debug(SQLERRM);
92 END IF;
93 END;
94
95 /*+----------------------------------------------------------------------
96 | FUNCTION Get_Prof_String
97 | Output: HTTP request parameter string for Profile Option Values
98 | e.g., G_PARAM_NAME_PROFL_PATN=N|N|Y|Y|Y|N|N|N|N|N
99 | This function contructs parameter string for user-level Profile Option
100 | Values, which will be used for UTL_HTTP call
101 +----------------------------------------------------------------------
102 */
103 FUNCTION Get_Prof_String
104 RETURN varchar2 IS
105 --prof_str varchar2(32767);
106 prof_pattern varchar2(32767);
107 BEGIN
108 IF(G_PROFILE_STR IS NULL) THEN
109 IF l_debug = FND_API.G_TRUE THEN
110 QP_PREQ_GRP.engine_debug('G_PROFILE_STR is empty and needs initialization.');
111 END IF;
112
113 --prof_str := G_PARAM_NAME_PROFL_PATN||'=';
114 G_PROFILE_STR := G_PARAM_NAME_PROFL_PATN||'=';
115
116 /*Profile Option Values Pattern:
117 (QP_DEBUG|QP_INV_DECIMAL_PRECISION|QP_LIMIT_EXCEED_ACTION|
118 |QP_QUALIFY_SECONDARY_PRICE_LISTS|QP_RETURN_MANUAL_DISCOUNTS|
119 QP_SATIS_QUALS_OPT|QP_SET_REQUEST_NAME|QP_SOURCE_SYSTEM_CODE|
120 QP_TIME_UOM_CONVERSION|QP_FLEX_VALUESET_RESTRICT) */
121
122 prof_pattern := FND_PROFILE.VALUE('QP_DEBUG')||G_PATN_SEPERATOR;
123 prof_pattern := prof_pattern||FND_PROFILE.VALUE('QP_INV_DECIMAL_PRECISION')||G_PATN_SEPERATOR;
124 prof_pattern := prof_pattern||FND_PROFILE.VALUE('QP_LIMIT_EXCEED_ACTION')||G_PATN_SEPERATOR;
125 prof_pattern := prof_pattern||FND_PROFILE.VALUE('QP_QUALIFY_SECONDARY_PRICE_LISTS')||G_PATN_SEPERATOR;
126 prof_pattern := prof_pattern||FND_PROFILE.VALUE('QP_RETURN_MANUAL_DISCOUNTS')||G_PATN_SEPERATOR;
127 prof_pattern := prof_pattern||FND_PROFILE.VALUE('QP_SATIS_QUALS_OPT')||G_PATN_SEPERATOR;
128 prof_pattern := prof_pattern||FND_PROFILE.VALUE('QP_SET_REQUEST_NAME')||G_PATN_SEPERATOR;
129 prof_pattern := prof_pattern||FND_PROFILE.VALUE('QP_SOURCE_SYSTEM_CODE')||G_PATN_SEPERATOR;
130 prof_pattern := prof_pattern||FND_PROFILE.VALUE('QP_TIME_UOM_CONVERSION')||G_PATN_SEPERATOR;
131
132 prof_pattern := prof_pattern||FND_PROFILE.VALUE('QP_FLEX_VALUESET_RESTRICT');
133
134 --prof_str := prof_str||prof_pattern;
135 G_PROFILE_STR := G_PROFILE_STR||prof_pattern;
136 END IF;
137
138 --RETURN prof_str;
139 RETURN G_PROFILE_STR;
140 END Get_Prof_String;
141
142 /*+----------------------------------------------------------------------
143 | FUNCTION Get_Ctrl_String
144 | Output: HTTP request parameter string for Control Record
145 | e.g., G_PARAM_NAME_CTRL_PATN=
146 | BATCH|Y|Y|Y|Y|Y|N|Y|Y|Y|Y|ONT|Y|Y|Y|Y|1.0|XY|USD
147 | This function contructs parameter string for Control Record based on
148 | p_control_rec information, which will be used for UTL_HTTP call
149 +----------------------------------------------------------------------
150 */
151 FUNCTION Get_Ctrl_String(p_control_rec IN QP_PREQ_GRP.CONTROL_RECORD_TYPE)
152 RETURN varchar2 IS
153 p_ctrl_str varchar2(32767);
154 p_control_pattern varchar2(32767);
155
156 BEGIN
157 p_ctrl_str := G_PARAM_NAME_CTRL_PATN||'=';
158 /*Control Pattern:
159 PRICING_EVENT|CALCULATE_FLAG|SIMULATION_FLAG|ROUNDING_FLAG|
160 GSA_CHECK_FLAG|GSA_DUP_CHECK_FLAG|MANUAL_DISCOUNT_FLAG|DEBUG_FLAG|
161 SOURCE_ORDER_AMOUNT_FLAG|MANUAL_ADJUSTMENTS_CALL_FLAG|GET_FREIGHT_FLAG|
162 REQUEST_TYPE_CODE|VIEW_CODE|CHECK_CUST_VIEW_FLAG|FULL_PRICING_CALL|
163 USE_MULTI_CURRENCY|USER_CONVERSION_RATE|USER_CONVERSION_TYPE|
164 FUNCTION_CURRENCY*/
165 /*TEMP_TABLE_INSERT_FLAG,PUBLIC_API_CALL_FLAG from p_control_rec not passed*/
166 p_control_pattern := p_control_rec.PRICING_EVENT||G_PATN_SEPERATOR;
167 p_control_pattern := p_control_pattern||p_control_rec.CALCULATE_FLAG||G_PATN_SEPERATOR;
168 p_control_pattern := p_control_pattern||p_control_rec.SIMULATION_FLAG||G_PATN_SEPERATOR;
169 p_control_pattern := p_control_pattern||p_control_rec.ROUNDING_FLAG||G_PATN_SEPERATOR;
170
171 p_control_pattern := p_control_pattern||p_control_rec.GSA_CHECK_FLAG||G_PATN_SEPERATOR;
172
173 p_control_pattern := p_control_pattern||p_control_rec.GSA_DUP_CHECK_FLAG||G_PATN_SEPERATOR;
174
175 p_control_pattern := p_control_pattern||p_control_rec.MANUAL_DISCOUNT_FLAG||G_PATN_SEPERATOR;
176
177 --p_control_pattern := p_control_pattern||p_control_rec.DEBUG_FLAG||G_PATN_SEPERATOR;
178 --debug control from QP_PREQ_GRP.G_DEBUG_ENGINE
179 p_control_pattern := p_control_pattern||QP_PREQ_GRP.G_DEBUG_ENGINE||G_PATN_SEPERATOR;
180
181 p_control_pattern := p_control_pattern||p_control_rec.SOURCE_ORDER_AMOUNT_FLAG||G_PATN_SEPERATOR;
182
183 p_control_pattern := p_control_pattern||p_control_rec.MANUAL_ADJUSTMENTS_CALL_FLAG||G_PATN_SEPERATOR;
184
185 p_control_pattern := p_control_pattern||p_control_rec.GET_FREIGHT_FLAG||G_PATN_SEPERATOR;
186
187 p_control_pattern := p_control_pattern||p_control_rec.REQUEST_TYPE_CODE||G_PATN_SEPERATOR;
188
189 p_control_pattern := p_control_pattern||p_control_rec.VIEW_CODE||G_PATN_SEPERATOR;
190
191 p_control_pattern := p_control_pattern||p_control_rec.CHECK_CUST_VIEW_FLAG||G_PATN_SEPERATOR;
192
193 p_control_pattern := p_control_pattern||p_control_rec.FULL_PRICING_CALL||G_PATN_SEPERATOR;
194
195 p_control_pattern := p_control_pattern||p_control_rec.USE_MULTI_CURRENCY||G_PATN_SEPERATOR;
196
197 p_control_pattern := p_control_pattern||p_control_rec.USER_CONVERSION_RATE||G_PATN_SEPERATOR;
198
199 p_control_pattern := p_control_pattern||p_control_rec.USER_CONVERSION_TYPE||G_PATN_SEPERATOR;
200
201 p_control_pattern := p_control_pattern||p_control_rec.FUNCTION_CURRENCY;
202
203 p_ctrl_str := p_ctrl_str||p_control_pattern;
204 RETURN p_ctrl_str;
205 END Get_Ctrl_String;
206
207 PROCEDURE REQUEST_PRICE(request_id IN NUMBER,
208 p_control_rec IN QP_PREQ_GRP.CONTROL_RECORD_TYPE,
209 x_return_status OUT NOCOPY VARCHAR2,
210 x_return_status_text OUT NOCOPY VARCHAR2)
211 IS
212 l_routine VARCHAR2(240):='Routine:QP_JAVA_ENGINE.REQUEST_PRICE';
213 p_ctrl_str varchar2(32767);
214
215 l_pricing_start_time number;
216 l_pricing_end_time number;
217 l_return_status VARCHAR2(240);
218 --l_status_text VARCHAR2(240);
219 l_status_text VARCHAR2(32767);
220 url_param_string varchar2(32767);
221 l_action_type varchar2(10) := 'PRICE';
222 l_session_id number := FND_GLOBAL.SESSION_ID;
223
224 E_ROUTINE_ERRORS EXCEPTION;
225 BEGIN
226 l_debug := QP_PREQ_GRP.G_DEBUG_ENGINE;
227
228 IF l_debug = FND_API.G_TRUE THEN
229 l_pricing_start_time := dbms_utility.get_time;
230 QP_PREQ_GRP.engine_debug('Inside ' || l_routine);
231 QP_PREQ_GRP.engine_debug('calc_flag:' ||p_control_rec.CALCULATE_FLAG);
232 END IF;
233
234 /*Construct request parameter string CtrlPatn*/
235 p_ctrl_str := Get_Ctrl_String(p_control_rec);
236 IF l_debug = FND_API.G_TRUE THEN
237 QP_PREQ_GRP.engine_debug('Ctrl_Str:'||p_ctrl_str);
238 END IF;
239
240 /*Store QP Profiles*/
241 Insert_Profs2_AT(request_id, l_return_status,l_status_text);
242 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
243 RAISE E_ROUTINE_ERRORS;
244 END IF;
245
246 --/*Construct request parameter string ContextConfig*/
247 --p_ctxt_str := Get_Context_Params;
248
249 /*Send Request To Java Engine*/
250 url_param_string := G_PARAM_NAME_REQUEST_ID||'='||request_id||G_HARD_CHAR||p_ctrl_str||G_HARD_CHAR||QP_JAVA_ENGINE_UTIL_PUB.G_PARAM_NAME_ACTION||'='||l_action_type||G_HARD_CHAR;
251
252 url_param_string := url_param_string||'n1='||QP_PREQ_GRP.G_INT_LINES_NO||G_HARD_CHAR||'n2='||QP_PREQ_GRP.G_INT_LDETS_NO||G_HARD_CHAR||'n3='||QP_PREQ_GRP.G_INT_ATTRS_NO||G_HARD_CHAR||'n4='||QP_PREQ_GRP.G_INT_RELS_NO;
253
254 IF(QP_PREQ_GRP.G_INT_LINES_NO < G_JPE_LINES_THRESHOLD) THEN
255 QP_JAVA_ENGINE_UTIL_PUB.Send_Java_Engine_Request(url_param_string, l_return_status,l_status_text, 60, FND_API.G_FALSE, FND_API.G_TRUE);
256 ELSE
257 QP_JAVA_ENGINE_UTIL_PUB.Send_Java_Engine_Request(url_param_string, l_return_status,l_status_text, -1, FND_API.G_TRUE, FND_API.G_TRUE);
258 END IF;
259 --IF l_return_status = FND_API.G_RET_STS_ERROR THEN
260 --RAISE E_ROUTINE_ERRORS;
261 --END IF;
262 x_return_status := l_return_status;
263 x_return_status_text := substr(l_status_text, 1, 240);
264
265 IF l_debug = FND_API.G_TRUE THEN
266 l_pricing_end_time := dbms_utility.get_time;
267 QP_PREQ_GRP.engine_debug('Total time in '||l_routine||': '||(l_pricing_end_time - l_pricing_start_time)/100);
268 END IF;
269
270 IF l_debug = FND_API.G_TRUE THEN
271 QP_PREQ_GRP.engine_debug('Request Id:'||request_id||' has finished with status_code='||x_return_status||' status_text='||x_return_status_text);
272 END IF;
273 EXCEPTION
274 WHEN E_ROUTINE_ERRORS THEN
275 IF QP_PREQ_GRP.G_DEBUG_ENGINE = FND_API.G_TRUE THEN
276 QP_PREQ_GRP.engine_debug(l_routine||': '||l_status_text);
277 END IF;
278 x_return_status := FND_API.G_RET_STS_ERROR;
279 --x_return_status_text := l_routine||': '||l_status_text;
280 x_return_status_text := l_status_text;
281 WHEN OTHERS THEN
282 x_return_status := FND_API.G_RET_STS_ERROR;
283 FND_MESSAGE.SET_NAME('QP','QP_JPE_UNEXPECTED_ERROR');
284 x_return_status_text := FND_MESSAGE.get;
285 --x_return_status_text := 'Java Engine call failed unexpectedly. Please contact system administrator!';
286 IF l_debug = FND_API.G_TRUE THEN
287 QP_PREQ_GRP.engine_debug('Request Id:'||request_id||' failed unexpectedly!' );
288 END IF;
289 END;
290 END QP_JAVA_ENGINE;