submit concurrent request set from backend
I always had a doubt as how to call a concurrent request set from backend. I got this useful material while googling. So taught of sharing with you ppl. Hope you will enjoy.
When programmatically launching a request set, base it on the following skeleton code. Couple of points to note first:
- When a concurrent program has parameters, you must pass a value (or null) for each parameter that is on the Concurrent Program Definition - it is NOT the parameters that you see in the Request Set Definition as ones that are not displayed cannot be seen there, but programmatically are required.
- Default values that are set up in the concurrent program definition, or the request set definition are not calculated for you - you must pass them in programmatically.
- ALL stages of the request set must be programmatically dealt with - failure to do so will prevent the request set from running and you will not see ANY of it (the request set is effectively rolled back).
- The values of the parameters that you pass must correspond to the values seen in the Parameters field in the Requests Windows, when you manually launch the job.
l_action := 'Launching Request Set'; DBMS_OUTPUT.PUT_ l_ok := fnd_submit.set_request_set (application => 'XX' ,request_set => 'XX_SAMPLE' ); -- ------------------------------------ -- Stage 1 with 2 requests in the stage -- ----------------------------------- IF l_ok AND l_success = 0 THEN -- ---------------------------------------------------- -- SQL*Load the Ship To Addresses -- ---------------------------------------------------- l_action := '1st job - 1st stage 1st request'; DBMS_OUTPUT.PUT_ l_ok := fnd_submit.submit_program (application => 'XX' ,program => 'XX_CONC_ ,stage => 'RS_STAGE_10' ,argument1 => 'conc prog params here' ); l_success := -100; END IF; IF l_ok AND l_success = 0 THEN -- ---------------------------------------------------- -- SQL*Load the Invoices -- ---------------------------------------------------- l_action := '2nd job - 1st stage 2nd request'; DBMS_OUTPUT.PUT_ l_ok := fnd_submit.submit_program (application => 'XX' ,program => 'XX_CONC_ ,stage => 'RS_STAGE_10' ,argument1 => 'conc prog params here' ); l_success := -110; END IF; -- -------------------------------------- -- New stage with 1 request -- -------------------------------------- IF l_ok AND l_success = 0 THEN l_action := '3rd job - 2nd stage 1st request'; DBMS_OUTPUT.PUT_ l_ok := fnd_submit.submit_program (application => 'XX' ,program => 'XX_CONC_ ,stage => 'RS_STAGE_20' ,argument1 => 'conc prog params here' ); l_success := -120; END IF; -- -------------------------------------- -- New stage with 1 request with LOTS of -- parameters -- -------------------------------------- IF l_ok AND l_success = 0 THEN l_action := '4th job - 3rd stage 1st request'; DBMS_OUTPUT.PUT_ l_ok := fnd_submit.submit_program (application => 'AR' ,program => 'R ,stage => 'INV_INTERIM_60' ,argument1 => '1' ,argument2 => TO_ ,argument3 => 'MP KRYTON' ,argument4 => TO_CHAR(TRUNC((SYSDATE - 0.5)),'RRRR/MM/DD HH24:MI:SS') ,argument5 => NULL ,argument6 => NULL ,argument7 => NULL ,argument8 => NULL ,argument9 => NULL ,argument10 => NULL ,argument11 => NULL ,argument12 => NULL ,argument13 => NULL ,argument14 => NULL ,argument15 => NULL ,argument16 => NULL ,argument17 => NULL ,argument18 => NULL ,argument19 => NULL ,argument20 => NULL ,argument21 => NULL ,argument22 => NULL ,argument23 => NULL ,argument24 => NULL ,argument25 => 'Y' ,argument26 => NULL ,argument27 => fnd_profile.VALUE('ORG_ID') ); l_success := -145; END IF; -- ----------------------------------------------- -- All requests in the set have been submitted now -- ----------------------------------------------- IF l_ok AND l_success = 0 THEN -- ---------------------------------------------------- -- Run the job and then wait until all requests -- have completed processing - we have to wait because -- when we exit here the file is moved to a different -- directory. -- ---------------------------------------------------- l_request_id := fnd_submit.submit_set(NULL,FALSE); DBMS_OUTPUT.PUT_ COMMIT; l_complete := fnd_concurrent.wait_for_request (request_id => l_request_id ,INTERVAL => 2 ,max_wait => 120 ,phase => l_phase ,status => l_status ,dev_phase => l_dev_phase ,dev_status => l_dev_status ,message => l_message ); l_success := -150; END IF; IF l_success = 0 THEN p_success := l_request_id; DBMS_OUTPUT.PUT_ p_success := l_success; END IF; |