When you are calling fnd_request.submit_request and setting sub request parameter as TRUE to create the parent child relationship, all the child requests finish as Inactive/No Manager.
Set the parent program as PAUSED, this will allows the successful execution of child requests.
So the sequence to use fnd_request.submit_request with sub_request as TURE is
--It will be null for first time parent scan by concurrent manager.
lc_req_data := fnd_conc_global.request_data;
--
IF lc_req_data IS NULL THEN
--
l_reqid := fnd_request.submit_request
(application => <Program application short name>
,program => <Program short name>
,description => ''
,start_time => SYSDATE
,sub_request => TRUE
,argument1 => <Argument(s)>
);
COMMIT;
-- Set program status as 'PAUSED'. Setting this status will make sure that parent will wait till all child gets completed. Otherwise they will finish as Inactive/No Manager
fnd_conc_global.set_req_globals(conc_status => 'PAUSED',
request_data => '1'
);
ELSIF lc_req_data = 'END' THEN
RETURN;
END IF;
Ref: (Doc ID 2282106.1)
Set the parent program as PAUSED, this will allows the successful execution of child requests.
So the sequence to use fnd_request.submit_request with sub_request as TURE is
--It will be null for first time parent scan by concurrent manager.
lc_req_data := fnd_conc_global.request_data;
--
IF lc_req_data IS NULL THEN
--
l_reqid := fnd_request.submit_request
(application => <Program application short name>
,program => <Program short name>
,description => ''
,start_time => SYSDATE
,sub_request => TRUE
,argument1 => <Argument(s)>
);
COMMIT;
-- Set program status as 'PAUSED'. Setting this status will make sure that parent will wait till all child gets completed. Otherwise they will finish as Inactive/No Manager
fnd_conc_global.set_req_globals(conc_status => 'PAUSED',
request_data => '1'
);
ELSIF lc_req_data = 'END' THEN
RETURN;
END IF;