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