[Home] [Help]
PACKAGE BODY: APPS.GML_BATCH_WORKFLOW_PKG
Source
1 PACKAGE BODY GML_BATCH_WORKFLOW_PKG AS
2 /* $Header: GMLBTWFB.pls 120.0 2005/05/25 16:47:05 appldev noship $ */
3 /* +=========================================================================+
4 | Copyright (c) 2002 Oracle Corporation |
5 | All righTs reserved |
6 +=========================================================================+
7 | FILENAME |
8 | GMLBTWFB.pls |
9 | |
10 | DESCRIPTION |
11 | This package contains Workflow procedures for GME-OM Integration |
12 | reservation. |
13 | |
14 | -- Init_wf() |
15 | -- Check_event() |
16 | -- Insert_gml_batch_so_workflow() |
17 | |
18 | HISTORY |
19 | 10-Oct-2003 nchekuri Created |
20 | |
21 +=========================================================================+ */
22
23
24 PROCEDURE init_wf (
25 p_session_id IN NUMBER
26 , p_approver IN NUMBER
27 , p_so_header_id IN NUMBER
28 , p_so_line_id IN NUMBER
29 , p_batch_id IN NUMBER
30 , p_batch_line_id IN NUMBER
31 , p_whse_code IN VARCHAR2
32 , p_lot_no IN VARCHAR2 DEFAULT NULL
33 , p_action_code IN VARCHAR2 )IS
34
35 l_itemtype VARCHAR2(240) := 'GMLBTRES';
36 l_itemkey VARCHAR2(240) := to_char(p_session_id)||'-'||to_char(sysdate,'dd-MON-yyyy HH24:mi:ss');
37 l_run_wf_in_background CONSTANT WF_ENGINE.THRESHOLD%TYPE := -1;
38 l_WorkflowProcess VARCHAR2(30) := 'GMLBTRES_PROCESS';
39 l_count NUMBER;
40
41 l_order_no NUMBER;
42 l_so_line_no NUMBER;
43 l_item_no VARCHAR2(40);
44 l_order_type VARCHAR2(30);
45 l_batch_no VARCHAR2(32);
46 l_fpo_no VARCHAR2(32);
47 l_plant_code VARCHAR2(4);
48 l_plan_complt_date DATE;
49 l_approver_name VARCHAR2(20);
50
51 /* Cusor Declarations */
52
53 CURSOR Get_user_name(p_user_id IN NUMBER) IS
54 SELECT user_name
55 FROM fnd_user
56 WHERE user_id = p_user_id;
57
58 CURSOR Get_order_info(p_so_line_id IN NUMBER) IS
59 SELECT ol.line_number, mtl.segment1,
60 ot.transaction_type_code,
61 oh.order_number
62 FROM oe_order_headers_all oh
63 ,oe_order_lines_all ol
64 ,oe_transaction_types_all ot
65 ,mtl_system_items mtl
66 WHERE ol.line_id = p_so_line_id
67 and ol.header_id = oh.header_id
68 and oh.order_type_id = ot.transaction_type_id
69 and mtl.inventory_item_id = ol.inventory_item_id;
70
71 CURSOR Get_batch_info(p_batch_id IN NUMBER) IS
72 SELECT batch_no,plant_code,
73 plan_cmplt_date
74 FROM gme_batch_header
75 WHERE batch_id = p_batch_id;
76
77
78 BEGIN
79
80
81 /* Get the User Name */
82
83 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf workflow procedure');
84
85 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf: Input Parameters......');
86 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf: P_so_header_id = '||p_so_header_id);
87 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf: p_so_line_id = '||p_so_line_id);
88 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf: p_action_code = '||p_action_code);
89 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf: p_batch_id = ' ||p_batch_id);
90 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf: p_batch_line_id = '|| p_batch_line_id);
91 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf: p_whse_code = '|| p_whse_code);
92 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf: p_lot_no = '|| p_lot_no);
93
94 OPEN Get_user_name(p_approver);
95 FETCH Get_user_name INTO l_approver_name;
96 IF(Get_user_name%NOTFOUND) THEN
97 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG.init_wf Get_user_name%NOTFOUND');
98 CLOSE Get_user_name;
99 RETURN;
100 END IF;
101
102 CLOSE Get_user_name;
103
104 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf after get_user_name');
105
106 /* Get the Order and Line Information */
107
108 OPEN Get_order_info(p_so_line_id);
109 FETCH Get_order_info INTO l_so_line_no,l_item_no,
110 l_order_type,l_order_no;
111 IF(Get_order_info%NOTFOUND) THEN
112 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG.init_wf Get_order_info%NOTFOUND');
113 CLOSE Get_order_info;
114 RETURN;
115 END IF;
116
117 CLOSE Get_order_info;
118
119 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf; Order/Line Information......');
120 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf; Order_type = '|| l_order_type);
121 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf; Order_no = '|| l_order_no);
122 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf; Line_no = '|| l_so_line_no);
123 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf; Item_no = '|| l_item_no);
124
125 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf after get_order_info');
126
127 /* Get the batch Information */
128
129 OPEN Get_batch_info(p_batch_id);
130 FETCH Get_batch_info INTO l_batch_no, l_plant_code,l_plan_complt_date;
131 IF(Get_batch_info%NOTFOUND) THEN
132 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG.init_wf Get_batch_info%NOTFOUND');
133 CLOSE Get_batch_info;
134 RETURN;
135 END IF;
136 CLOSE Get_batch_info;
137
138 l_fpo_no := l_batch_no;
139
140 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf; Batch Information......');
141 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf; Batch_no = '|| l_batch_no);
142 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf; Plant_code = '|| l_plant_code);
143 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf; Planned Completion Date = '|| l_plan_complt_date);
144
145 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf after Get_batch_info');
146
147 /* Increment the itemkey global variable */
148
149 g_itemkey_num := g_itemkey_num+1;
150 l_itemkey := l_itemkey||'-'||to_char(g_itemkey_num);
151
152 /* create the process*/
153
154
155 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf before CreateProcess');
156
157 WF_ENGINE.CREATEPROCESS(
158 itemtype => l_itemtype
159 , itemkey => l_itemkey
160 , process => l_WorkflowProcess) ;
161
162 /* make sure that process runs with background engine */
163
164 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf after CreateProcess');
165
166 -- WF_ENGINE.THRESHOLD := l_run_wf_in_background ;
167 --WF_ENGINE.THRESHOLD := -1 ;
168
169 /* set the item attributes*/
170 /*
171 WF_ENGINE.SETITEMATTRNUMBER(
172 itemtype => l_itemtype
173 , itemkey => l_itemkey
174 , aname => 'SESSION_ID'
175 , avalue => l_session_id );
176 */
177
178 WF_ENGINE.SETITEMATTRTEXT(
179 itemtype => l_itemtype
180 , itemkey =>l_itemkey
181 , aname => 'APPROVER'
182 , avalue => l_approver_name);
183
184 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set Approver Name');
185
186 WF_ENGINE.SETITEMATTRTEXT(
187 itemtype => l_itemtype
188 , itemkey => l_itemkey
189 , aname => 'ACTION_CODE'
190 , avalue => p_action_code );
191
192 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set action Code');
193
194 WF_ENGINE.SETITEMATTRTEXT(
195 itemtype => l_itemtype
196 , itemkey => l_itemkey
197 , aname => 'ORDER_NO'
198 , avalue => to_char(l_order_no) );
199
200 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set Order Number ');
201
202 WF_ENGINE.SETITEMATTRTEXT(
203 itemtype => l_itemtype
204 , itemkey => l_itemkey
205 , aname => 'ORDER_TYPE'
206 , avalue => l_order_type );
207
208 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set Order Type ');
209
210 WF_ENGINE.SETITEMATTRTEXT(
211 itemtype => l_itemtype
212 , itemkey => l_itemkey
213 , aname => 'SO_LINE_NO'
214 , avalue => to_char(l_so_line_no) );
215
216 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set so_line_no ');
217
218 WF_ENGINE.SETITEMATTRTEXT(
219 itemtype => l_itemtype
220 , itemkey => l_itemkey
221 , aname => 'ITEM_NO'
222 , avalue => l_item_no );
223
224 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set Item Number ');
225
226 WF_ENGINE.SETITEMATTRTEXT(
227 itemtype => l_itemtype
228 , itemkey => l_itemkey
229 , aname => 'PLANT_CODE'
230 , avalue => l_plant_code );
231
232 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set Plant Code ');
233
234 WF_ENGINE.SETITEMATTRTEXT(
235 itemtype => l_itemtype
236 , itemkey => l_itemkey
237 , aname => 'BATCH_NO'
238 , avalue => l_batch_no );
239
240 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set Whse Code ');
241
242 WF_ENGINE.SETITEMATTRTEXT(
243 itemtype => l_itemtype
244 , itemkey => l_itemkey
245 , aname => 'WHSE_CODE'
246 , avalue => p_whse_code );
247
248 IF (p_lot_no is NOT NULL) THEN
249 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set Whse Code ');
250 WF_ENGINE.SETITEMATTRTEXT(
251 itemtype => l_itemtype
252 , itemkey => l_itemkey
253 , aname => 'LOT_NO'
254 , avalue => p_lot_no );
255 END IF;
256
257 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set Batch Number ');
258
259 WF_ENGINE.SETITEMATTRTEXT(
260 itemtype => l_itemtype
261 , itemkey => l_itemkey
262 , aname => 'FPO_NO'
263 , avalue => l_fpo_no );
264
265 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Set FPO Number ');
266
267 /*
268 WF_ENGINE.SETITEMATTRTEXT(
269 itemtype => l_itemtype
270 , itemkey => l_itemkey
271 , aname => 'PL_COMPL_DATE'
272 , avalue => TO_CHAR(TO_DATE(l_plan_complt_date,'MON-DD-YYYY')) );
273 */
274
275 /* start the Workflow process */
276
277 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf after Setting the Attributes');
278 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Before Start Process');
279
280 WF_ENGINE.STARTPROCESS (
281 itemtype => l_itemtype
282 , itemkey => l_itemkey );
283
284 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf After Start Process');
285
286 /* Insert the workflow/batch/so information into Gml_batch_so_workflow table for
287 future reference. */
288
289 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Before Insert Record');
290
291 INSERT_GML_BATCH_SO_WORKFLOW(
292 l_itemtype
293 , l_itemkey
294 , p_so_header_id
295 , p_so_line_id
296 , p_batch_id
297 , p_batch_line_id
298 , p_action_code);
299
300 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf After Insert Record');
301
302 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. Init_wf Exiting ....');
303
304
305 EXCEPTION
306
307 WHEN OTHERS THEN
308 NULL;
309 GMI_RESERVATION_UTIL.PrintLn('WARNING! In GML_BATCH_WORKFLOW_PKG. Init_wf Others Exception');
310
311 WF_CORE.CONTEXT ('GML_BATCH_WORKFLOW','init_wf'
312 ,l_itemtype,l_itemkey,'Initial' );
313
314 RAISE;
315
316 END INIT_WF;
317
318 PROCEDURE check_event(
319 p_itemtype IN VARCHAR2,
320 p_itemkey IN VARCHAR2,
321 p_actid IN NUMBER,
322 p_funcmode IN VARCHAR2,
323 p_resultout OUT NOCOPY VARCHAR2) IS
324
325 l_event_type VARCHAR2(240) := WF_ENGINE.GETITEMATTRTEXT(
326 itemtype=>p_itemtype,
327 itemkey=>P_itemkey,
328 aname => 'ACTION_CODE');
329 BEGIN
330
331 p_resultout := 'COMPLETE:'||l_event_type;
332
333 EXCEPTION
334
335 WHEN OTHERS THEN
336 NULL;
337
338 END check_event;
339
340
341 PROCEDURE INSERT_GML_BATCH_SO_WORKFLOW(
342 p_itemtype IN VARCHAR2
343 , p_itemkey IN VARCHAR2
344 , p_so_header_id IN NUMBER
345 , p_so_line_id IN NUMBER
346 , p_batch_id IN NUMBER
347 , p_batch_line_id IN NUMBER
348 , p_action_code IN VARCHAR2) IS
349
350 l_wf_item_id NUMBER;
351
352 BEGIN
353
354 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. INSERT_GML_BATCH_SO_WORKFLOW..... ');
355
356 SELECT GML_BATCH_SO_WORKFLOW_S.nextval
357 INTO l_wf_item_id FROM DUAL;
358
359 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. INSERT_GML_BATCH_SO_WORKFLOW Before Insert ');
360
361 INSERT INTO Gml_batch_so_workflow (
362 WF_ITEM_ID
363 , WF_ITEM_TYPE
364 , WF_ITEM_KEY
365 , SO_HEADER_ID
366 , SO_LINE_ID
367 , BATCH_ID
368 , BATCH_LINE_ID
369 , ACTION_CODE
370 , CREATION_DATE
371 , CREATED_BY
372 , LAST_UPDATE_DATE
373 , LAST_UPDATED_BY ) VALUES
374
375 ( l_wf_item_id
376 , p_itemtype
377 , p_itemkey
378 , p_so_header_id
379 , p_so_line_id
380 , p_batch_id
381 , p_batch_line_id
382 , p_action_code
383 , sysdate
384 , fnd_global.user_id
385 , sysdate
386 , fnd_global.user_id);
387
388 GMI_RESERVATION_UTIL.PrintLn('In GML_BATCH_WORKFLOW_PKG. INSERT_GML_BATCH_SO_WORKFLOW After Insert ');
389
390 EXCEPTION
391
392 WHEN OTHERS THEN
393 GMI_RESERVATION_UTIL.PrintLn('WARNING! GML_BATCH_WORKFLOW_PKG. INSERT_GML_BATCH_SO_WORKFLOW OTHERS Exception ');
394 NULL;
395
396 END INSERT_GML_BATCH_SO_WORKFLOW;
397
398
399 END GML_BATCH_WORKFLOW_PKG;