Create Service Request API:-
CS_SERVICEREQUEST_PUB.CREATE_SERVICEREQUEST
cs_servicerequest_pub.create_servicerequest(p_api_version => 4.0,
p_init_msg_list => fnd_api.g_true,
p_commit => fnd_api.g_false,
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
p_resp_appl_id => v_appl_id,
p_resp_id => v_resp_id,
p_user_id => v_user_id,
p_org_id => 103,
p_request_id => null,
p_request_number => null,
p_service_request_rec => l_service_request_rec,
p_notes => l_notes_table,
p_contacts => l_contacts_tab,
p_auto_assign => 'N',
p_auto_generate_tasks => 'Y',
x_sr_create_out_rec => lx_sr_create_out_rec,
p_default_contract_sla_ind => 'N');
Update Task API
JTF_TASKS_PUB.UPDATE_TASK(p_api_version => 1.0,
p_init_msg_list => fnd_api.g_true,
p_commit => fnd_api.g_false,
p_object_version_number => v_object_version_id,
p_task_id => v_task_id,
p_task_status_id => 14, --'Assigned'
p_owner_id => v_owner_id,
p_owner_type_code => 'RS_EMPLOYEE', --Employee Resource
p_scheduled_start_date => sysdate,
p_scheduled_end_date => sysdate,
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
p_enable_workflow => NULL,
p_abort_workflow => NULL);
--create Task Assignnmnet API
jtf_task_assignments_pub.create_task_assignment(p_api_version => 1.0,
p_init_msg_list => fnd_api.g_true,
p_commit => fnd_api.g_false,
p_task_assignment_id => NULL,
p_task_id => v_task_id,
p_resource_type_code => 'RS_EMPLOYEE',
p_resource_id => v_resource_id,
p_assignment_status_id => 3, --Accepted
p_show_on_calendar => 'Y',
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
x_task_assignment_id => l_task_assignment_id)
CREATE SERVICE REQUEST THROUGH API:
create or replace procedure xxx_custom_regcomp(p_consumer_id in varchar2, --Party Number
p_complaint_type in varchar2, --Service Request type
p_problem_summary in varchar2, --Problem Summary
x_complaint_number out varchar2) as --Stores the output of the procedure
lx_msg_count number;
lx_msg_data varchar2(2000);
lx_msg_index_out number;
lx_return_status varchar2(1);
l_service_request_rec cs_servicerequest_pub.service_request_rec_type;
l_notes_table cs_servicerequest_pub.notes_table;
l_contacts_tab cs_servicerequest_pub.contacts_table;
lx_sr_create_out_rec cs_servicerequest_pub.sr_create_out_rec_type;
v_user_id number;
v_resp_id number;
v_appl_id number;
l_incident_type_id number;
l_party_id number;
v_task_id number;
v_object_version_id number;
v_owner_id number;
l_task_assignment_id number;
v_resource_id number;
v_country varchar2(10);
begin
if (p_consumer_id is not null) and (p_complaint_type is not null) and
(p_problem_summary is not null) then
begin
--fetch the incident type
begin
select cs.incident_type_id
into l_incident_type_id
from cs_incident_types cs
where upper(cs.name) = upper(p_complaint_type);
exception
when others then
dbms_output.put_line('Error in selecting the problem type');
end;
--fetch the party_id, country for the consumer
v_country := null;
begin
select party_id, country
into l_party_id, v_country
from hz_parties
where party_number = p_consumer_id;
exception
when others then
dbms_output.put_line('Error in selecting the party number');
end;
dbms_output.put_line('v_country' || v_country);
--specify the SR attributes
l_service_request_rec.summary := substr(p_problem_summary,
1,
240); --limit problem_summary to 240 characters
l_service_request_rec.customer_id := l_party_id;
l_service_request_rec.type_id := l_incident_type_id;
l_service_request_rec.request_date := sysdate;
l_service_request_rec.status_id := 1;
l_service_request_rec.severity_id := 3;
l_service_request_rec.caller_type := 'PERSON';
l_service_request_rec.verify_cp_flag := 'N';
l_service_request_rec.sr_creation_channel := 'PHONE';
l_service_request_rec.problem_code := 'CON';
--all such SRs will be created from the INT_USER
begin
select user_id
into v_user_id
from apps.fnd_user
where upper(user_name) in ('INT_USER');
exception
when others then
dbms_output.put_line('Error in selecting the interface user');
end;
begin
select fa.application_id, frt.responsibility_id
into v_appl_id, v_resp_id
from apps.fnd_user_resp_groups furg,
apps.fnd_application fa,
apps.fnd_responsibility_tl frt
where fa.application_short_name = 'CSS'
and upper(frt.responsibility_name) =
upper('Custom Responsibility')
and fa.application_id = frt.application_id
and furg.responsibility_application_id = fa.application_id
and furg.responsibility_id = frt.responsibility_id
and furg.user_id = v_user_id
and rownum = 1;
exception
when others then
dbms_output.put_line('Error in selecting the responsibility/application');
end;
--initializing the user
apps.fnd_global.apps_initialize(user_id => v_user_id,
resp_id => v_resp_id,
resp_appl_id => v_appl_id);
--create Service request API
cs_servicerequest_pub.create_servicerequest(p_api_version => 4.0,
p_init_msg_list => fnd_api.g_true,
p_commit => fnd_api.g_false,
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
p_resp_appl_id => v_appl_id,
p_resp_id => v_resp_id,
p_user_id => v_user_id,
p_org_id => 103,
p_request_id => null,
p_request_number => null,
p_service_request_rec => l_service_request_rec,
p_notes => l_notes_table,
p_contacts => l_contacts_tab,
p_auto_assign => 'N',
p_auto_generate_tasks => 'Y',
x_sr_create_out_rec => lx_sr_create_out_rec,
p_default_contract_sla_ind => 'N');
if (lx_return_status <> fnd_api.g_ret_sts_success) then
if (fnd_msg_pub.count_msg > 1) then
--if there are multi-line error messages, display them
for j in 1 .. fnd_msg_pub.count_msg loop
fnd_msg_pub.get(p_msg_index => j,
p_encoded => 'F',
p_data => lx_msg_data,
p_msg_index_out => lx_msg_index_out);
dbms_output.put_line(lx_msg_data);
end loop;
else
--if there is a single-line error message, display it
fnd_msg_pub.get(p_msg_index => 1,
p_encoded => 'F',
p_data => lx_msg_data,
p_msg_index_out => lx_msg_index_out);
dbms_output.put_line(lx_msg_data);
end if;
end if;
--The task for this Service Request if created automatically through the use of Task Templates
--and specifying the 'Service: Auto Generate Tasks on SR Create' profile option to Yes
--if SR creation was successfull then update the task with status='Assigned' and
--populate the scheduled_start_date and scheduled_end_date
if lx_return_status = 'S' then
v_task_id := null;
v_object_version_id := null;
v_owner_id := null;
begin
select task_id, object_version_number, owner_id
into v_task_id, v_object_version_id, v_owner_id
from jtf_tasks_vl jtb
where jtb.source_object_id = lx_sr_create_out_rec.request_id;
exception
when others then
dbms_output.put_line('Could not obtain task details for updation');
end;
dbms_output.put_line('TaskId:' || v_task_id);
dbms_output.put_line('ObjectVer:' || v_object_version_id);
dbms_output.put_line('OwnId:' || v_owner_id);
--update Task API
JTF_TASKS_PUB.UPDATE_TASK(p_api_version => 1.0,
p_init_msg_list => fnd_api.g_true,
p_commit => fnd_api.g_false,
p_object_version_number => v_object_version_id,
p_task_id => v_task_id,
p_task_status_id => 14, --'Assigned'
p_owner_id => v_owner_id,
p_owner_type_code => 'RS_EMPLOYEE', --Employee Resource
p_scheduled_start_date => sysdate,
p_scheduled_end_date => sysdate,
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
p_enable_workflow => NULL,
p_abort_workflow => NULL);
--display error messages
IF lx_return_status <> fnd_api.g_ret_sts_success THEN
IF lx_msg_count > 0 THEN
lx_msg_data := NULL;
FOR i IN 1 .. lx_msg_count LOOP
lx_msg_data := lx_msg_data || ' ' || fnd_msg_pub.get(1, 'F');
END LOOP;
fnd_message.set_encoded(lx_msg_data);
dbms_output.put_line(lx_msg_data);
END IF;
END IF;
end if;
--if task was updated successfully then assign the task to appropriate resource
if lx_return_status = 'S' then
l_task_assignment_id := null;
v_resource_id := null;
--select the appropriate resource
--I am using a custom table which stores my country-to-resource mapping
begin
select supply_resource_id
into v_resource_id
from xxx_supp_resource_map
where territory_code = v_country;
exception
when others then
dbms_output.put_line('Error in selecting resource_id');
end;
dbms_output.put_line('l_task_assignment_id' ||
l_task_assignment_id);
dbms_output.put_line('v_resource_id' || v_resource_id);
--create Task Assignnmnet API
jtf_task_assignments_pub.create_task_assignment(p_api_version => 1.0,
p_init_msg_list => fnd_api.g_true,
p_commit => fnd_api.g_false,
p_task_assignment_id => NULL,
p_task_id => v_task_id,
p_resource_type_code => 'RS_EMPLOYEE',
p_resource_id => v_resource_id,
p_assignment_status_id => 3, --Accepted
p_show_on_calendar => 'Y',
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
x_task_assignment_id => l_task_assignment_id);
--display error messages
IF lx_return_status <> fnd_api.g_ret_sts_success THEN
IF lx_msg_count > 0 THEN
lx_msg_data := NULL;
FOR i IN 1 .. lx_msg_count LOOP
lx_msg_data := lx_msg_data || ' ' || fnd_msg_pub.get(1, 'F');
END LOOP;
fnd_message.set_encoded(lx_msg_data);
dbms_output.put_line(lx_msg_data);
END IF;
end if;
end if;
--commit all or none
--if task assignment was successfull
if (lx_return_status = 'S') then
commit;
--dbms_output.put_line('Complaint has been registered:'||lx_sr_create_out_rec.request_number);
x_complaint_number := 'Service Request with number:' ||
lx_sr_create_out_rec.request_number||' created.';
else
rollback;
--dbms_output.put_line('The complaint could not be registered:');
x_complaint_number := 'Service Request could not be created';
end if;
exception
when others then
--dbms_output.put_line('Unexpected Error ' || sqlerrm);
x_complaint_number := 'Service Request could not be created';
end;
else
x_complaint_number := 'Invalid input provided';
end if;
end xxx_custom_regcomp;
No comments:
Post a Comment