When submitting concurrent requests using
PL/SQL, it is often desired to have the parent process wait until all
the child processes have completed before completing itself. The
following describes the function used to accomplish this.
Refer Metalink 1021956.6: The following describes how to submit concurrent requests using PL/SQL and have the parent request ‘wait’ until each of the child processes have completed before it completes.
Use the FND_CONCURRENT.WAIT_FOR_REQUEST function documented in the Oracle Applications Developer’s Guide, RELEASE 11i, Page 21-8 See the FND_CONCURRENT.WAIT_FOR_REQUEST function description.
Description
Wait for the request completion, then return the request phase/status and
completion message to the caller. Also call sleep between database checks.
Arguments (input)
request_id
The request ID of the program to wait on.
interval
Time to wait between checks. This is the number of seconds to sleep.
The default is 60 seconds.
max_wait
The maximum time in seconds to wait for the requests completion.
Arguments (output)
phase
The user friendly request phase from FND_LOOKUPS.
status
The user friendly request status from FND_LOOKUPS.
dev_phase
The request phase as a constant string that can be used for program
logic comparisons.
dev_status
The request status as a constant string that can be used for program
logic comparisons.
message
The completion message supplied if the request has completed.
Refer Metalink 1021956.6: The following describes how to submit concurrent requests using PL/SQL and have the parent request ‘wait’ until each of the child processes have completed before it completes.
Use the FND_CONCURRENT.WAIT_FOR_REQUEST function documented in the Oracle Applications Developer’s Guide, RELEASE 11i, Page 21-8 See the FND_CONCURRENT.WAIT_FOR_REQUEST function description.
Summary
<strong>FUNCTION FND_CONCURRENT.WAIT_FOR_REQUEST</strong>
(request_id IN number DEFAULT NULL,
interval IN number DEFAULT 60,
max_wait IN number DEFAULT 0,
phase OUT varchar2,
STATUS OUT varchar2,
dev_phase OUT varchar2,
dev_status OUT varchar2,
message OUT varchar2) RETURN BOOLEAN;
<strong>FUNCTION FND_CONCURRENT.WAIT_FOR_REQUEST</strong>
(request_id IN number DEFAULT NULL,
interval IN number DEFAULT 60,
max_wait IN number DEFAULT 0,
phase OUT varchar2,
STATUS OUT varchar2,
dev_phase OUT varchar2,
dev_status OUT varchar2,
message OUT varchar2) RETURN BOOLEAN;
Wait for the request completion, then return the request phase/status and
completion message to the caller. Also call sleep between database checks.
Arguments (input)
request_id
The request ID of the program to wait on.
interval
Time to wait between checks. This is the number of seconds to sleep.
The default is 60 seconds.
max_wait
The maximum time in seconds to wait for the requests completion.
Arguments (output)
phase
The user friendly request phase from FND_LOOKUPS.
status
The user friendly request status from FND_LOOKUPS.
dev_phase
The request phase as a constant string that can be used for program
logic comparisons.
dev_status
The request status as a constant string that can be used for program
logic comparisons.
message
The completion message supplied if the request has completed.
BEGIN
l_request_id :=
fnd_request.submit_request (‘XXCUS’,
‘XXCUSSPOOL’,
NULL,
NULL,
FALSE,
p_filename_i,
p_seq_i
);
END; p_request_id_o := l_request_id;
fnd_file.put_line (fnd_file.LOG,‘XXCUSSPOOL Submitted. Request_id=’”p_request_id_o”‘ Filename=’”p_filename_i”‘ Seq=’”p_seq_i );
IF p_request_id_o = 0
THEN
ec_log_debug (p_filename_i,‘SUBMIT_FILE_CREATION’,4090, ‘XXCUSSPOOL submission failed for ‘”p_filename_i”‘Request_id=’”p_request_id_o );
ELSE
l_return :=
fnd_concurrent.wait_for_request (request_id => p_request_id_o,
INTERVAL => 10,
max_wait => 300, – Null means wait forever, I normally provide 300 = 5 mins
phase => l_phase,
STATUS => l_status,
dev_phase => l_dev_phase,
dev_status => l_dev_status,
MESSAGE => l_message
);
END IF;
l_request_id :=
fnd_request.submit_request (‘XXCUS’,
‘XXCUSSPOOL’,
NULL,
NULL,
FALSE,
p_filename_i,
p_seq_i
);
END; p_request_id_o := l_request_id;
fnd_file.put_line (fnd_file.LOG,‘XXCUSSPOOL Submitted. Request_id=’”p_request_id_o”‘ Filename=’”p_filename_i”‘ Seq=’”p_seq_i );
IF p_request_id_o = 0
THEN
ec_log_debug (p_filename_i,‘SUBMIT_FILE_CREATION’,4090, ‘XXCUSSPOOL submission failed for ‘”p_filename_i”‘Request_id=’”p_request_id_o );
ELSE
l_return :=
fnd_concurrent.wait_for_request (request_id => p_request_id_o,
INTERVAL => 10,
max_wait => 300, – Null means wait forever, I normally provide 300 = 5 mins
phase => l_phase,
STATUS => l_status,
dev_phase => l_dev_phase,
dev_status => l_dev_status,
MESSAGE => l_message
);
END IF;
No comments:
Post a Comment