Oracle has provided an API IEX_DISPUTE_PUB.CREATE_DISPUTE which is part of Advanced Collections to create a dispute on an Invoice Transaction. Below is the sample API script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | SET serveroutput ON; --- --- DECLARE lv_return_status_txt VARCHAR2 (1000); lv_msg_count_num NUMBER; lv_msg_count_txt VARCHAR2 (10000); lv_cm_request_id VARCHAR2 (1000); lv_index_num NUMBER; lv_err_msg_stack_txt VARCHAR2 (4000); l_user_id NUMBER; l_responsibility_id NUMBER := 22941; -- collections agent lv_delinquency_id_num NUMBER; l_customer_trx_id NUMBER := 468415; l_line_id_1 NUMBER := 5266682; l_line_id_2 NUMBER; l_line_id_3 NUMBER; l_line_id_4 NUMBER; l_org_id NUMBER; l_dispute_lines BOOLEAN := TRUE; disp_header_rec iex_dispute_pub.disp_header_rec; disp_line_rec iex_dispute_pub.dispute_line_tbl; CURSOR c_user_id IS SELECT user_id FROM fnd_user WHERE user_name = UPPER ('STHALLAM'); CURSOR c_org_id IS SELECT org_id FROM ra_customer_trx_all WHERE customer_trx_id = l_customer_trx_id; BEGIN OPEN c_user_id; FETCH c_user_id INTO l_user_id; CLOSE c_user_id; OPEN c_org_id; FETCH c_org_id INTO l_org_id; CLOSE c_org_id; IF l_user_id IS NULL THEN DBMS_OUTPUT.put_line (' Please enter correct User Name '); END IF; IF l_org_id IS NULL THEN DBMS_OUTPUT.put_line ('Please enter correct Customer Trx Id '); END IF; mo_global.set_policy_context ('S', l_org_id); fnd_global.apps_initialize (l_user_id, l_responsibility_id, 695); arp_standard.enable_debug; disp_header_rec.cust_trx_id := l_customer_trx_id; disp_header_rec.line_amt := 1.00; disp_header_rec.tax_amt := 0.40; disp_header_rec.freight_amt := 0; disp_header_rec.cm_reason_code := 'A/R ERROR'; disp_header_rec.line_credit_flag := 'N'; disp_header_rec.delinquency_id := lv_delinquency_id_num; disp_header_rec.dispute_section := 'SPECIFIC_INV_LINES_TAX'; disp_header_rec.attribute1 := 'XYZ'; IF l_dispute_lines THEN disp_header_rec.line_credit_flag := 'Y'; disp_line_rec (1).customer_trx_line_id := l_line_id_1; disp_line_rec (1).extended_amount := 1.00; disp_line_rec (1).quantity_credited := 1; disp_line_rec (1).attribute1 := 'XYZ'; END IF; iex_dispute_pub.create_dispute (p_api_version => 1.0, p_init_msg_list => fnd_api.g_true, p_commit => fnd_api.g_false, p_disp_header_rec => disp_header_rec, p_disp_line_tbl => disp_line_rec, x_request_id => lv_cm_request_id, x_return_status => lv_return_status_txt, x_msg_count => lv_msg_count_num, x_msg_data => lv_msg_count_txt, p_skip_workflow_flag => 'N', p_batch_source_name => 'Trade Management' ); IF lv_return_status_txt = 'S' THEN DBMS_OUTPUT.put_line (' Dispute created successfully '); DBMS_OUTPUT.put_line (' Credit Memo Req id is ' || lv_cm_request_id); END IF; DBMS_OUTPUT.put_line ('x_return_status : ' || lv_return_status_txt); IF lv_return_status_txt != 'S' THEN DBMS_OUTPUT.put_line ( 'Error: ' || lv_return_status_txt || '; ' || lv_msg_count_txt ); FOR lv_index_num IN 1 .. lv_msg_count_num LOOP lv_err_msg_stack_txt := fnd_msg_pub.get (p_msg_index => lv_index_num, p_encoded => 'F'); DBMS_OUTPUT.put_line (lv_err_msg_stack_txt); END LOOP; END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ('Exception raised => ' || SQLERRM); END; / COMMIT ; |
Import Points to Note:
- Dispute information is stored in table IEX_DISPUTES
- One credit memo request record in stored in table RA_CM_REQUESTS_ALL
- Line level credit memo information is stored in table RA_CM_REQUEST_LINES_ALL
Parameter P_SKIP_WORKFLOW_FLAG of API:
Defaults to N. If this value is set to Y, the entire workflow(ARCMREQ) is skipped and Credit Memo is directly created with NO notification triggered for User Approval on Credit Memo.
Refer to Post Create Dispute for creating Dispute through API>