12: ------------------------------------------------------------------------------
13:
14: PROCEDURE Create_Interaction
15: ( p_api_version IN NUMBER,
16: p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false,
17: p_commit IN VARCHAR2 DEFAULT fnd_api.g_false,
18: p_validation_level IN NUMBER DEFAULT fnd_api.g_valid_level_full,
19: x_return_status OUT VARCHAR2,
20: x_msg_count OUT NUMBER,
13:
14: PROCEDURE Create_Interaction
15: ( p_api_version IN NUMBER,
16: p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false,
17: p_commit IN VARCHAR2 DEFAULT fnd_api.g_false,
18: p_validation_level IN NUMBER DEFAULT fnd_api.g_valid_level_full,
19: x_return_status OUT VARCHAR2,
20: x_msg_count OUT NUMBER,
21: x_msg_data OUT VARCHAR2,
14: PROCEDURE Create_Interaction
15: ( p_api_version IN NUMBER,
16: p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false,
17: p_commit IN VARCHAR2 DEFAULT fnd_api.g_false,
18: p_validation_level IN NUMBER DEFAULT fnd_api.g_valid_level_full,
19: x_return_status OUT VARCHAR2,
20: x_msg_count OUT NUMBER,
21: x_msg_data OUT VARCHAR2,
22: p_resp_appl_id IN NUMBER DEFAULT NULL,
90: -- Standard start of API savepoint
91: SAVEPOINT create_interaction_pvt;
92:
93: -- Standard call to check for call compatibility
94: IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
95: l_api_name, g_pkg_name) THEN
96: RAISE fnd_api.g_exc_unexpected_error;
97: END IF;
98:
92:
93: -- Standard call to check for call compatibility
94: IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
95: l_api_name, g_pkg_name) THEN
96: RAISE fnd_api.g_exc_unexpected_error;
97: END IF;
98:
99: -- Initialize message list if p_init_msg_list is set to TRUE
100: IF fnd_api.to_boolean(p_init_msg_list) THEN
96: RAISE fnd_api.g_exc_unexpected_error;
97: END IF;
98:
99: -- Initialize message list if p_init_msg_list is set to TRUE
100: IF fnd_api.to_boolean(p_init_msg_list) THEN
101: fnd_msg_pub.initialize;
102: END IF;
103:
104: -- Initialize API return status to success
101: fnd_msg_pub.initialize;
102: END IF;
103:
104: -- Initialize API return status to success
105: x_return_status := fnd_api.g_ret_sts_success;
106:
107: -------------------------------------------------------------------------
108: -- Apply business-rule validation to all required and passed parameters
109: -- if validation level is set to FULL. Skip business-rule validation to
108: -- Apply business-rule validation to all required and passed parameters
109: -- if validation level is set to FULL. Skip business-rule validation to
110: -- all non-Service parameters if validation level is set to INT.
111: -------------------------------------------------------------------------
112: IF (p_validation_level > fnd_api.g_valid_level_none) THEN
113:
114: IF (p_validation_level > g_valid_level_int) THEN
115:
116: -- Validate user and login session IDs
116: -- Validate user and login session IDs
117: --------------------------------------
118: IF (p_user_id IS NULL) THEN
119: cs_core_util.add_null_parameter_msg(l_api_name_full, 'p_user_id');
120: RAISE fnd_api.g_exc_error;
121: ELSE
122: cs_core_util.validate_who_info
123: ( p_api_name => l_api_name_full,
124: p_parameter_name_usr => 'p_user_id',
125: p_parameter_name_log => 'p_login_id',
126: p_user_id => p_user_id,
127: p_login_id => p_login_id,
128: x_return_status => l_return_status );
129: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
130: RAISE fnd_api.g_exc_error;
131: END IF;
132: END IF;
133:
126: p_user_id => p_user_id,
127: p_login_id => p_login_id,
128: x_return_status => l_return_status );
129: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
130: RAISE fnd_api.g_exc_error;
131: END IF;
132: END IF;
133:
134: -- Validate operating unit ID
136: IF cs_core_util.is_multiorg_enabled THEN
137: IF (p_org_id IS NULL) THEN
138: cs_core_util.add_null_parameter_msg(l_api_name_full,
139: 'p_org_id');
140: RAISE fnd_api.g_exc_error;
141: ELSE
142: cs_core_util.validate_operating_unit
143: ( p_api_name => l_api_name_full,
144: p_parameter_name => 'p_org_id',
143: ( p_api_name => l_api_name_full,
144: p_parameter_name => 'p_org_id',
145: p_org_id => p_org_id,
146: x_return_status => l_return_status );
147: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
148: RAISE fnd_api.g_exc_error;
149: END IF;
150: END IF;
151: ELSE
144: p_parameter_name => 'p_org_id',
145: p_org_id => p_org_id,
146: x_return_status => l_return_status );
147: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
148: RAISE fnd_api.g_exc_error;
149: END IF;
150: END IF;
151: ELSE
152: IF (p_org_id IS NOT NULL) THEN
159: -----------------------
160: IF (p_customer_id IS NULL) THEN
161: cs_core_util.add_null_parameter_msg(l_api_name_full,
162: 'p_customer_id');
163: RAISE fnd_api.g_exc_error;
164: ELSE
165: cs_core_util.validate_customer
166: ( p_api_name => l_api_name_full,
167: p_parameter_name => 'p_customer_id',
166: ( p_api_name => l_api_name_full,
167: p_parameter_name => 'p_customer_id',
168: p_customer_id => p_customer_id,
169: x_return_status => l_return_status );
170: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
171: RAISE fnd_api.g_exc_error;
172: END IF;
173: END IF;
174:
167: p_parameter_name => 'p_customer_id',
168: p_customer_id => p_customer_id,
169: x_return_status => l_return_status );
170: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
171: RAISE fnd_api.g_exc_error;
172: END IF;
173: END IF;
174:
175: -- Validate contact ID
181: p_customer_contact_id => p_contact_id,
182: p_customer_id => p_customer_id,
183: p_org_id => l_org_id,
184: x_return_status => l_return_status );
185: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
186: RAISE fnd_api.g_exc_error;
187: END IF;
188: END IF;
189:
182: p_customer_id => p_customer_id,
183: p_org_id => l_org_id,
184: x_return_status => l_return_status );
185: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
186: RAISE fnd_api.g_exc_error;
187: END IF;
188: END IF;
189:
190: -- Validate employee ID
194: ( p_api_name => l_api_name_full,
195: p_parameter_name => 'p_employee_id',
196: p_person_id => p_employee_id,
197: x_return_status => l_return_status );
198: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
199: RAISE fnd_api.g_exc_error;
200: END IF;
201: END IF;
202:
195: p_parameter_name => 'p_employee_id',
196: p_person_id => p_employee_id,
197: x_return_status => l_return_status );
198: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
199: RAISE fnd_api.g_exc_error;
200: END IF;
201: END IF;
202:
203: END IF; /* p_validation_level > g_valid_level_int */
206: ---------------------------------
207: IF (p_interaction_type_code IS NULL) THEN
208: cs_core_util.add_null_parameter_msg(l_api_name_full,
209: 'p_interaction_type_code');
210: RAISE fnd_api.g_exc_error;
211: ELSE
212: cs_core_util.validate_lookup_code
213: ( p_api_name => l_api_name_full,
214: p_parameter_name => 'p_interaction_type_code',
214: p_parameter_name => 'p_interaction_type_code',
215: p_lookup_code => p_interaction_type_code,
216: p_lookup_type => 'INTERACTION_TYPE',
217: x_return_status => l_return_status );
218: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
219: RAISE fnd_api.g_exc_error;
220: END IF;
221: END IF;
222:
215: p_lookup_code => p_interaction_type_code,
216: p_lookup_type => 'INTERACTION_TYPE',
217: x_return_status => l_return_status );
218: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
219: RAISE fnd_api.g_exc_error;
220: END IF;
221: END IF;
222:
223: -- Validate interaction category code
224: -------------------------------------
225: IF (p_interaction_category_code IS NULL) THEN
226: cs_core_util.add_null_parameter_msg(l_api_name_full,
227: 'p_interaction_category_code');
228: RAISE fnd_api.g_exc_error;
229: ELSE
230: cs_core_util.validate_lookup_code
231: ( p_api_name => l_api_name_full,
232: p_parameter_name => 'p_interaction_category_code',
232: p_parameter_name => 'p_interaction_category_code',
233: p_lookup_code => p_interaction_category_code,
234: p_lookup_type => 'INTERACTION_CATEGORY',
235: x_return_status => l_return_status );
236: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
237: RAISE fnd_api.g_exc_error;
238: END IF;
239: END IF;
240:
233: p_lookup_code => p_interaction_category_code,
234: p_lookup_type => 'INTERACTION_CATEGORY',
235: x_return_status => l_return_status );
236: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
237: RAISE fnd_api.g_exc_error;
238: END IF;
239: END IF;
240:
241: -- Validate interaction method code
242: -----------------------------------
243: IF (p_interaction_method_code IS NULL) THEN
244: cs_core_util.add_null_parameter_msg(l_api_name_full,
245: 'p_interaction_method_code');
246: RAISE fnd_api.g_exc_error;
247: ELSE
248: cs_core_util.validate_lookup_code
249: ( p_api_name => l_api_name_full,
250: p_parameter_name => 'p_interaction_method_code',
250: p_parameter_name => 'p_interaction_method_code',
251: p_lookup_code => p_interaction_method_code,
252: p_lookup_type => 'INTERACTION_METHOD',
253: x_return_status => l_return_status );
254: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
255: RAISE fnd_api.g_exc_error;
256: END IF;
257: END IF;
258:
251: p_lookup_code => p_interaction_method_code,
252: p_lookup_type => 'INTERACTION_METHOD',
253: x_return_status => l_return_status );
254: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
255: RAISE fnd_api.g_exc_error;
256: END IF;
257: END IF;
258:
259: -- Validate interaction date
260: ----------------------------
261: IF (p_interaction_date IS NULL) THEN
262: cs_core_util.add_null_parameter_msg(l_api_name_full,
263: 'p_interaction_date');
264: RAISE fnd_api.g_exc_error;
265: END IF;
266:
267: -- Validate interaction document code
268: -------------------------------------
272: p_parameter_name => 'p_interaction_document_code',
273: p_lookup_code => p_interaction_document_code,
274: p_lookup_type => 'INTERACTION_DOCUMENT',
275: x_return_status => l_return_status );
276: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
277: RAISE fnd_api.g_exc_error;
278: END IF;
279: --
280: -- Validate document number when document type is not null
273: p_lookup_code => p_interaction_document_code,
274: p_lookup_type => 'INTERACTION_DOCUMENT',
275: x_return_status => l_return_status );
276: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
277: RAISE fnd_api.g_exc_error;
278: END IF;
279: --
280: -- Validate document number when document type is not null
281: --
337: -----------------------
338: IF (p_public_flag <> 'Y') AND (p_public_flag <> 'N') THEN
339: cs_core_util.add_invalid_argument_msg(l_api_name_full, p_public_flag,
340: 'p_public_flag');
341: RAISE fnd_api.g_exc_error;
342: END IF;
343:
344: -- Validate parent interaction ID
345: ---------------------------------
349: p_parameter_name => 'p_parent_interaction_id',
350: p_parent_interaction_id => p_parent_interaction_id,
351: p_org_id => l_org_id,
352: x_return_status => l_return_status );
353: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
354: RAISE fnd_api.g_exc_error;
355: END IF;
356: END IF;
357:
350: p_parent_interaction_id => p_parent_interaction_id,
351: p_org_id => l_org_id,
352: x_return_status => l_return_status );
353: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
354: RAISE fnd_api.g_exc_error;
355: END IF;
356: END IF;
357:
358: -- Validate descriptive flexfield values
398: p_context_value => p_attribute_category,
399: p_resp_appl_id => p_resp_appl_id,
400: p_resp_id => p_resp_id,
401: x_return_status => l_return_status);
402: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
403: RAISE fnd_api.g_exc_error;
404: END IF;
405: END IF;
406:
399: p_resp_appl_id => p_resp_appl_id,
400: p_resp_id => p_resp_id,
401: x_return_status => l_return_status);
402: IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
403: RAISE fnd_api.g_exc_error;
404: END IF;
405: END IF;
406:
407: -- Validate string lengths
458: l_source_document_status := p_source_document_status;
459: l_follow_up_action := p_follow_up_action;
460: l_notes := p_notes;
461:
462: END IF; /* p_validation_level > fnd_api.g_valid_level_none */
463:
464: -------------------------------------------------------------------------
465: -- Perform the database operation. Generate the interaction ID from the
466: -- sequence, then insert the sequence number and passed in attributes
577: --
578: x_interaction_id := l_interaction_id;
579:
580: -- Standard check of p_commit
581: IF fnd_api.to_boolean(p_commit) THEN
582: COMMIT WORK;
583: END IF;
584:
585: -- Standard call to get message count and if count is 1, get message info
586: fnd_msg_pub.count_and_get
587: ( p_count => x_msg_count,
588: p_data => x_msg_data );
589: EXCEPTION
590: WHEN fnd_api.g_exc_error THEN
591: ROLLBACK TO create_interaction_pvt;
592: x_return_status := fnd_api.g_ret_sts_error ;
593: fnd_msg_pub.count_and_get
594: ( p_count => x_msg_count,
588: p_data => x_msg_data );
589: EXCEPTION
590: WHEN fnd_api.g_exc_error THEN
591: ROLLBACK TO create_interaction_pvt;
592: x_return_status := fnd_api.g_ret_sts_error ;
593: fnd_msg_pub.count_and_get
594: ( p_count => x_msg_count,
595: p_data => x_msg_data );
596: WHEN fnd_api.g_exc_unexpected_error THEN
592: x_return_status := fnd_api.g_ret_sts_error ;
593: fnd_msg_pub.count_and_get
594: ( p_count => x_msg_count,
595: p_data => x_msg_data );
596: WHEN fnd_api.g_exc_unexpected_error THEN
597: ROLLBACK TO create_interaction_pvt;
598: x_return_status := fnd_api.g_ret_sts_unexp_error ;
599: fnd_msg_pub.count_and_get
600: ( p_count => x_msg_count,
594: ( p_count => x_msg_count,
595: p_data => x_msg_data );
596: WHEN fnd_api.g_exc_unexpected_error THEN
597: ROLLBACK TO create_interaction_pvt;
598: x_return_status := fnd_api.g_ret_sts_unexp_error ;
599: fnd_msg_pub.count_and_get
600: ( p_count => x_msg_count,
601: p_data => x_msg_data );
602: WHEN OTHERS THEN
600: ( p_count => x_msg_count,
601: p_data => x_msg_data );
602: WHEN OTHERS THEN
603: ROLLBACK TO create_interaction_pvt;
604: x_return_status := fnd_api.g_ret_sts_unexp_error ;
605: IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
606: fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
607: END IF;
608: fnd_msg_pub.count_and_get