1: package body fnd_transaction_queue as
2: /* $Header: AFCPTRQB.pls 120.1 2005/09/17 02:03:29 pferguso noship $ */
3:
4:
5: --
87: begin
88: resp_appl_id := fnd_global.resp_appl_id;
89: resp_id := fnd_global.resp_id;
90:
91: if (fnd_transaction.debug_flag) then
92: fnd_transaction.debug_info('fnd_trn_queue.get_manager',
93: 'Searching for manager to run:',
94: application || ':' || program);
95: fnd_transaction.debug_info('fnd_trn_queue.get_manager',
88: resp_appl_id := fnd_global.resp_appl_id;
89: resp_id := fnd_global.resp_id;
90:
91: if (fnd_transaction.debug_flag) then
92: fnd_transaction.debug_info('fnd_trn_queue.get_manager',
93: 'Searching for manager to run:',
94: application || ':' || program);
95: fnd_transaction.debug_info('fnd_trn_queue.get_manager',
96: 'RESP_APPL_ID:RESP_ID',
91: if (fnd_transaction.debug_flag) then
92: fnd_transaction.debug_info('fnd_trn_queue.get_manager',
93: 'Searching for manager to run:',
94: application || ':' || program);
95: fnd_transaction.debug_info('fnd_trn_queue.get_manager',
96: 'RESP_APPL_ID:RESP_ID',
97: to_char(resp_appl_id) || ':' || to_char(resp_id));
98: end if;
99:
102: -- Fetch ID of first manager
103: fetch tm into processor_id;
104: -- If cursor is empty, then no manager is defined for request.
105: if (tm%rowcount = 0 ) then
106: fnd_transaction.debug_info('fnd_trn_queue.get_manager', 'No manager available', NULL);
107:
108: fnd_transaction.post_tm_event(1, application, program, -1);
109:
110: fnd_message.set_name('FND', 'CONC-TM-No manager defined');
104: -- If cursor is empty, then no manager is defined for request.
105: if (tm%rowcount = 0 ) then
106: fnd_transaction.debug_info('fnd_trn_queue.get_manager', 'No manager available', NULL);
107:
108: fnd_transaction.post_tm_event(1, application, program, -1);
109:
110: fnd_message.set_name('FND', 'CONC-TM-No manager defined');
111: fnd_message.set_token('APPLICATION', application);
112: fnd_message.set_token('PROGRAM', program);
112: fnd_message.set_token('PROGRAM', program);
113: fnd_message.set_token('RESP_ID', resp_id);
114: fnd_message.set_token('RESP_APPL_ID', resp_appl_id);
115: close tm;
116: return fnd_transaction.E_OTHER;
117: end if;
118:
119: if (fnd_transaction.debug_flag) then
120: fnd_transaction.debug_info('fnd_trn_queue.get_manager',
115: close tm;
116: return fnd_transaction.E_OTHER;
117: end if;
118:
119: if (fnd_transaction.debug_flag) then
120: fnd_transaction.debug_info('fnd_trn_queue.get_manager',
121: 'Got available TM process',
122: processor_id);
123: end if;
116: return fnd_transaction.E_OTHER;
117: end if;
118:
119: if (fnd_transaction.debug_flag) then
120: fnd_transaction.debug_info('fnd_trn_queue.get_manager',
121: 'Got available TM process',
122: processor_id);
123: end if;
124:
122: processor_id);
123: end if;
124:
125: close tm;
126: return fnd_transaction.E_SUCCESS;
127:
128: exception
129: when others then
130: if tm%isopen then
132: end if;
133: fnd_message.set_name ('FND', 'SQL-Generic error');
134: fnd_message.set_token ('ERRNO', sqlcode, FALSE);
135: fnd_message.set_token ('REASON', sqlerrm, FALSE);
136: fnd_message.set_token ('ROUTINE', 'FND_TRANSACTION_QUEUE.GET_MANAGER', FALSE);
137: fnd_transaction.debug_info('fnd_trn_queue.get_manager', 'Caught exception', sqlerrm);
138:
139: return fnd_transaction.E_OTHER;
140:
133: fnd_message.set_name ('FND', 'SQL-Generic error');
134: fnd_message.set_token ('ERRNO', sqlcode, FALSE);
135: fnd_message.set_token ('REASON', sqlerrm, FALSE);
136: fnd_message.set_token ('ROUTINE', 'FND_TRANSACTION_QUEUE.GET_MANAGER', FALSE);
137: fnd_transaction.debug_info('fnd_trn_queue.get_manager', 'Caught exception', sqlerrm);
138:
139: return fnd_transaction.E_OTHER;
140:
141: end get_manager;
135: fnd_message.set_token ('REASON', sqlerrm, FALSE);
136: fnd_message.set_token ('ROUTINE', 'FND_TRANSACTION_QUEUE.GET_MANAGER', FALSE);
137: fnd_transaction.debug_info('fnd_trn_queue.get_manager', 'Caught exception', sqlerrm);
138:
139: return fnd_transaction.E_OTHER;
140:
141: end get_manager;
142:
143:
201: msg_id raw(16);
202: time_left number;
203: end_time date;
204: retval number;
205: debug_flag boolean := fnd_transaction.debug_flag;
206: r boolean;
207: argmax number := fnd_transaction.ARGMAX;
208:
209: pragma exception_init(queue_timeout, -25228);
203: end_time date;
204: retval number;
205: debug_flag boolean := fnd_transaction.debug_flag;
206: r boolean;
207: argmax number := fnd_transaction.ARGMAX;
208:
209: pragma exception_init(queue_timeout, -25228);
210:
211: begin
275: msgid => msg_id);
276:
277:
278: if (debug_flag) then
279: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Waiting for return message', request_id, 'U');
280: end if;
281:
282: msg := system.FND_CP_TM_AQ_PAYLOAD(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
283: NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
294: -- The TM will address the return message to this id
295: dq_opts.consumer_name := TMPREFIX || request_id;
296:
297: time_left := timeout;
298: end_time := sysdate + (timeout * fnd_transaction.DAY_PER_SEC);
299:
300:
301: -- Loop until the return message arrives or the timeout expires,
302: -- but do not wait on any single dequeue call more than TIMEOUT_INCREMENT seconds
315: MESSAGE_PROPERTIES => msg_props,
316: PAYLOAD => msg,
317: MSGID => msg_id);
318: if (debug_flag) then
319: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Got return message', request_id, 'U');
320: end if;
321: exit;
322:
323: exception
322:
323: exception
324: when queue_timeout then
325: if (debug_flag) then
326: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Dequeue timeout', request_id, 'U');
327: end if;
328:
329: if sysdate >= end_time then
330:
340: PAYLOAD => msg,
341: MSGID => msg_id);
342: exception
343: when others then
344: fnd_transaction.debug_info('fnd_trn_queue.send_message',
345: 'Unable to remove timed-out message', sqlerrm, 'U');
346: end;
347:
348: if (debug_flag) then
345: 'Unable to remove timed-out message', sqlerrm, 'U');
346: end;
347:
348: if (debug_flag) then
349: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Return message timed out', request_id, 'U');
350: end if;
351: fnd_transaction.post_tm_event(4, application, program, -1, timeout);
352: return fnd_transaction.E_TIMEOUT;
353:
347:
348: if (debug_flag) then
349: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Return message timed out', request_id, 'U');
350: end if;
351: fnd_transaction.post_tm_event(4, application, program, -1, timeout);
352: return fnd_transaction.E_TIMEOUT;
353:
354: end if;
355:
348: if (debug_flag) then
349: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Return message timed out', request_id, 'U');
350: end if;
351: fnd_transaction.post_tm_event(4, application, program, -1, timeout);
352: return fnd_transaction.E_TIMEOUT;
353:
354: end if;
355:
356: -- Time is not up yet, keep waiting
353:
354: end if;
355:
356: -- Time is not up yet, keep waiting
357: time_left := (end_time - sysdate) * fnd_transaction.SEC_PER_DAY;
358: end;
359:
360: end loop;
361:
362: outcome := msg.outcome;
363: message := msg.message;
364:
365: if (debug_flag) then
366: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Outcome', outcome, 'U');
367: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Message', message, 'U');
368: end if;
369:
370: fnd_transaction.return_values(1) := msg.arg1;
363: message := msg.message;
364:
365: if (debug_flag) then
366: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Outcome', outcome, 'U');
367: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Message', message, 'U');
368: end if;
369:
370: fnd_transaction.return_values(1) := msg.arg1;
371: fnd_transaction.return_values(2) := msg.arg2;
366: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Outcome', outcome, 'U');
367: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Message', message, 'U');
368: end if;
369:
370: fnd_transaction.return_values(1) := msg.arg1;
371: fnd_transaction.return_values(2) := msg.arg2;
372: fnd_transaction.return_values(3) := msg.arg3;
373: fnd_transaction.return_values(4) := msg.arg4;
374: fnd_transaction.return_values(5) := msg.arg5;
367: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Message', message, 'U');
368: end if;
369:
370: fnd_transaction.return_values(1) := msg.arg1;
371: fnd_transaction.return_values(2) := msg.arg2;
372: fnd_transaction.return_values(3) := msg.arg3;
373: fnd_transaction.return_values(4) := msg.arg4;
374: fnd_transaction.return_values(5) := msg.arg5;
375: fnd_transaction.return_values(6) := msg.arg6;
368: end if;
369:
370: fnd_transaction.return_values(1) := msg.arg1;
371: fnd_transaction.return_values(2) := msg.arg2;
372: fnd_transaction.return_values(3) := msg.arg3;
373: fnd_transaction.return_values(4) := msg.arg4;
374: fnd_transaction.return_values(5) := msg.arg5;
375: fnd_transaction.return_values(6) := msg.arg6;
376: fnd_transaction.return_values(7) := msg.arg7;
369:
370: fnd_transaction.return_values(1) := msg.arg1;
371: fnd_transaction.return_values(2) := msg.arg2;
372: fnd_transaction.return_values(3) := msg.arg3;
373: fnd_transaction.return_values(4) := msg.arg4;
374: fnd_transaction.return_values(5) := msg.arg5;
375: fnd_transaction.return_values(6) := msg.arg6;
376: fnd_transaction.return_values(7) := msg.arg7;
377: fnd_transaction.return_values(8) := msg.arg8;
370: fnd_transaction.return_values(1) := msg.arg1;
371: fnd_transaction.return_values(2) := msg.arg2;
372: fnd_transaction.return_values(3) := msg.arg3;
373: fnd_transaction.return_values(4) := msg.arg4;
374: fnd_transaction.return_values(5) := msg.arg5;
375: fnd_transaction.return_values(6) := msg.arg6;
376: fnd_transaction.return_values(7) := msg.arg7;
377: fnd_transaction.return_values(8) := msg.arg8;
378: fnd_transaction.return_values(9) := msg.arg9;
371: fnd_transaction.return_values(2) := msg.arg2;
372: fnd_transaction.return_values(3) := msg.arg3;
373: fnd_transaction.return_values(4) := msg.arg4;
374: fnd_transaction.return_values(5) := msg.arg5;
375: fnd_transaction.return_values(6) := msg.arg6;
376: fnd_transaction.return_values(7) := msg.arg7;
377: fnd_transaction.return_values(8) := msg.arg8;
378: fnd_transaction.return_values(9) := msg.arg9;
379: fnd_transaction.return_values(10) := msg.arg10;
372: fnd_transaction.return_values(3) := msg.arg3;
373: fnd_transaction.return_values(4) := msg.arg4;
374: fnd_transaction.return_values(5) := msg.arg5;
375: fnd_transaction.return_values(6) := msg.arg6;
376: fnd_transaction.return_values(7) := msg.arg7;
377: fnd_transaction.return_values(8) := msg.arg8;
378: fnd_transaction.return_values(9) := msg.arg9;
379: fnd_transaction.return_values(10) := msg.arg10;
380: fnd_transaction.return_values(11) := msg.arg11;
373: fnd_transaction.return_values(4) := msg.arg4;
374: fnd_transaction.return_values(5) := msg.arg5;
375: fnd_transaction.return_values(6) := msg.arg6;
376: fnd_transaction.return_values(7) := msg.arg7;
377: fnd_transaction.return_values(8) := msg.arg8;
378: fnd_transaction.return_values(9) := msg.arg9;
379: fnd_transaction.return_values(10) := msg.arg10;
380: fnd_transaction.return_values(11) := msg.arg11;
381: fnd_transaction.return_values(12) := msg.arg12;
374: fnd_transaction.return_values(5) := msg.arg5;
375: fnd_transaction.return_values(6) := msg.arg6;
376: fnd_transaction.return_values(7) := msg.arg7;
377: fnd_transaction.return_values(8) := msg.arg8;
378: fnd_transaction.return_values(9) := msg.arg9;
379: fnd_transaction.return_values(10) := msg.arg10;
380: fnd_transaction.return_values(11) := msg.arg11;
381: fnd_transaction.return_values(12) := msg.arg12;
382: fnd_transaction.return_values(13) := msg.arg13;
375: fnd_transaction.return_values(6) := msg.arg6;
376: fnd_transaction.return_values(7) := msg.arg7;
377: fnd_transaction.return_values(8) := msg.arg8;
378: fnd_transaction.return_values(9) := msg.arg9;
379: fnd_transaction.return_values(10) := msg.arg10;
380: fnd_transaction.return_values(11) := msg.arg11;
381: fnd_transaction.return_values(12) := msg.arg12;
382: fnd_transaction.return_values(13) := msg.arg13;
383: fnd_transaction.return_values(14) := msg.arg14;
376: fnd_transaction.return_values(7) := msg.arg7;
377: fnd_transaction.return_values(8) := msg.arg8;
378: fnd_transaction.return_values(9) := msg.arg9;
379: fnd_transaction.return_values(10) := msg.arg10;
380: fnd_transaction.return_values(11) := msg.arg11;
381: fnd_transaction.return_values(12) := msg.arg12;
382: fnd_transaction.return_values(13) := msg.arg13;
383: fnd_transaction.return_values(14) := msg.arg14;
384: fnd_transaction.return_values(15) := msg.arg15;
377: fnd_transaction.return_values(8) := msg.arg8;
378: fnd_transaction.return_values(9) := msg.arg9;
379: fnd_transaction.return_values(10) := msg.arg10;
380: fnd_transaction.return_values(11) := msg.arg11;
381: fnd_transaction.return_values(12) := msg.arg12;
382: fnd_transaction.return_values(13) := msg.arg13;
383: fnd_transaction.return_values(14) := msg.arg14;
384: fnd_transaction.return_values(15) := msg.arg15;
385: fnd_transaction.return_values(16) := msg.arg16;
378: fnd_transaction.return_values(9) := msg.arg9;
379: fnd_transaction.return_values(10) := msg.arg10;
380: fnd_transaction.return_values(11) := msg.arg11;
381: fnd_transaction.return_values(12) := msg.arg12;
382: fnd_transaction.return_values(13) := msg.arg13;
383: fnd_transaction.return_values(14) := msg.arg14;
384: fnd_transaction.return_values(15) := msg.arg15;
385: fnd_transaction.return_values(16) := msg.arg16;
386: fnd_transaction.return_values(17) := msg.arg17;
379: fnd_transaction.return_values(10) := msg.arg10;
380: fnd_transaction.return_values(11) := msg.arg11;
381: fnd_transaction.return_values(12) := msg.arg12;
382: fnd_transaction.return_values(13) := msg.arg13;
383: fnd_transaction.return_values(14) := msg.arg14;
384: fnd_transaction.return_values(15) := msg.arg15;
385: fnd_transaction.return_values(16) := msg.arg16;
386: fnd_transaction.return_values(17) := msg.arg17;
387: fnd_transaction.return_values(18) := msg.arg18;
380: fnd_transaction.return_values(11) := msg.arg11;
381: fnd_transaction.return_values(12) := msg.arg12;
382: fnd_transaction.return_values(13) := msg.arg13;
383: fnd_transaction.return_values(14) := msg.arg14;
384: fnd_transaction.return_values(15) := msg.arg15;
385: fnd_transaction.return_values(16) := msg.arg16;
386: fnd_transaction.return_values(17) := msg.arg17;
387: fnd_transaction.return_values(18) := msg.arg18;
388: fnd_transaction.return_values(19) := msg.arg19;
381: fnd_transaction.return_values(12) := msg.arg12;
382: fnd_transaction.return_values(13) := msg.arg13;
383: fnd_transaction.return_values(14) := msg.arg14;
384: fnd_transaction.return_values(15) := msg.arg15;
385: fnd_transaction.return_values(16) := msg.arg16;
386: fnd_transaction.return_values(17) := msg.arg17;
387: fnd_transaction.return_values(18) := msg.arg18;
388: fnd_transaction.return_values(19) := msg.arg19;
389: fnd_transaction.return_values(20) := msg.arg20;
382: fnd_transaction.return_values(13) := msg.arg13;
383: fnd_transaction.return_values(14) := msg.arg14;
384: fnd_transaction.return_values(15) := msg.arg15;
385: fnd_transaction.return_values(16) := msg.arg16;
386: fnd_transaction.return_values(17) := msg.arg17;
387: fnd_transaction.return_values(18) := msg.arg18;
388: fnd_transaction.return_values(19) := msg.arg19;
389: fnd_transaction.return_values(20) := msg.arg20;
390:
383: fnd_transaction.return_values(14) := msg.arg14;
384: fnd_transaction.return_values(15) := msg.arg15;
385: fnd_transaction.return_values(16) := msg.arg16;
386: fnd_transaction.return_values(17) := msg.arg17;
387: fnd_transaction.return_values(18) := msg.arg18;
388: fnd_transaction.return_values(19) := msg.arg19;
389: fnd_transaction.return_values(20) := msg.arg20;
390:
391: if (debug_flag) then
384: fnd_transaction.return_values(15) := msg.arg15;
385: fnd_transaction.return_values(16) := msg.arg16;
386: fnd_transaction.return_values(17) := msg.arg17;
387: fnd_transaction.return_values(18) := msg.arg18;
388: fnd_transaction.return_values(19) := msg.arg19;
389: fnd_transaction.return_values(20) := msg.arg20;
390:
391: if (debug_flag) then
392: for counter1 in 1..20 loop
385: fnd_transaction.return_values(16) := msg.arg16;
386: fnd_transaction.return_values(17) := msg.arg17;
387: fnd_transaction.return_values(18) := msg.arg18;
388: fnd_transaction.return_values(19) := msg.arg19;
389: fnd_transaction.return_values(20) := msg.arg20;
390:
391: if (debug_flag) then
392: for counter1 in 1..20 loop
393: fnd_transaction.debug_info('fnd_trn_queue.send_message',
389: fnd_transaction.return_values(20) := msg.arg20;
390:
391: if (debug_flag) then
392: for counter1 in 1..20 loop
393: fnd_transaction.debug_info('fnd_trn_queue.send_message',
394: 'Return table entry #'||to_char(counter1),
395: fnd_transaction.return_values(counter1), 'U');
396: end loop;
397: end if;
391: if (debug_flag) then
392: for counter1 in 1..20 loop
393: fnd_transaction.debug_info('fnd_trn_queue.send_message',
394: 'Return table entry #'||to_char(counter1),
395: fnd_transaction.return_values(counter1), 'U');
396: end loop;
397: end if;
398:
399: if (debug_flag) then
396: end loop;
397: end if;
398:
399: if (debug_flag) then
400: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Transaction complete', '', 'U');
401: end if;
402:
403: return fnd_transaction.E_SUCCESS;
404:
399: if (debug_flag) then
400: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Transaction complete', '', 'U');
401: end if;
402:
403: return fnd_transaction.E_SUCCESS;
404:
405: exception
406: when OTHERS then
407: fnd_message.set_name ('FND', 'SQL-Generic error');
406: when OTHERS then
407: fnd_message.set_name ('FND', 'SQL-Generic error');
408: fnd_message.set_token ('ERRNO', sqlcode, FALSE);
409: fnd_message.set_token ('REASON', sqlerrm, FALSE);
410: fnd_message.set_token ('ROUTINE', 'FND_TRANSACTION_QUEUE.SEND_MESSAGE', FALSE);
411: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Caught exception', sqlerrm);
412: return fnd_transaction.E_OTHER;
413:
414: end send_message;
407: fnd_message.set_name ('FND', 'SQL-Generic error');
408: fnd_message.set_token ('ERRNO', sqlcode, FALSE);
409: fnd_message.set_token ('REASON', sqlerrm, FALSE);
410: fnd_message.set_token ('ROUTINE', 'FND_TRANSACTION_QUEUE.SEND_MESSAGE', FALSE);
411: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Caught exception', sqlerrm);
412: return fnd_transaction.E_OTHER;
413:
414: end send_message;
415:
408: fnd_message.set_token ('ERRNO', sqlcode, FALSE);
409: fnd_message.set_token ('REASON', sqlerrm, FALSE);
410: fnd_message.set_token ('ROUTINE', 'FND_TRANSACTION_QUEUE.SEND_MESSAGE', FALSE);
411: fnd_transaction.debug_info('fnd_trn_queue.send_message', 'Caught exception', sqlerrm);
412: return fnd_transaction.E_OTHER;
413:
414: end send_message;
415:
416:
413:
414: end send_message;
415:
416:
417: end fnd_transaction_queue;