Wednesday 10 September 2014

Purchase order (PO) document through API PO_DOCUMENT_CONTROL_PUB.CONTROL_DOCUMENT

SET serveroutput ON;
DECLARE

 v_return_status   VARCHAR2 (10);
 v_msg_data        VARCHAR2(1000);

 v_po_header_id    NUMBER        := 20000006;
 v_doc_subtype     VARCHAR2(10)  := 'STANDARD';
 v_doc_type        VARCHAR2(10)  := 'PO';
 v_org_id          NUMBER;       := 83;
 v_action          VARCHAR2(10)  := 'CANCEL';
 v_action_date     DATE          := SYSDATE;

v_context := fnd_global.APPS_INITIALIZE('&user', '&responsibility', 2038);

IF v_context = 'F'
   THEN
   DBMS_OUTPUT.PUT_LINE ('Error while setting the context');
END IF;

MO_GLOBAL.INIT ('PO');

--- context done ------------

DBMS_OUTPUT.PUT_LINE ('Calling API For Cancelling Documents');

PO_DOCUMENT_CONTROL_PUB.CONTROL_DOCUMENT
   ( p_api_version      => 1.0,
     p_init_msg_list    => fnd_api.g_true,
     p_commit           => fnd_api.g_false,
     x_return_status    => v_return_status,
     p_doc_type         => v_doc_type,
     p_doc_subtype      => v_doc_subtype,
     p_doc_id           => v_po_header_id,
     p_doc_num          => NULL,
     p_release_id       => NULL,
     p_release_num      => NULL,
     p_doc_line_id      => NULL,
     p_doc_line_num     => NULL,
     p_doc_line_loc_id  => NULL,
     p_doc_shipment_num => NULL,
     p_action           => v_action,
     p_action_date      => v_action_date,
     p_cancel_reason    => NULL,
     p_cancel_reqs_flag => 'N',
     p_print_flag       => NULL,
     p_note_to_vendor   => NULL,
     p_use_gldate       => NULL,
     p_org_id           => v_org_id
);

COMMIT;

DBMS_OUTPUT.PUT_LINE('The Return Status of the API : '|| v_return_status);

IF v_return_status = fnd_api.g_ret_sts_success THEN
   COMMIT;
   DBMS_OUTPUT.PUT_LINE ('Cancellation of PO is Sucessfull : '||v_po_header_id);
ELSE
   DBMS_OUTPUT.PUT_LINE ('Cancellation of PO Failed ');
   ROLLBACK;
   FOR i IN 1 .. FND_MSG_PUB.COUNT_MSG
   LOOP
      v_msg_data := FND_MSG_PUB.GET( p_msg_index => i, p_encoded => 'F');
      DBMS_OUTPUT.PUT_LINE( i|| ') '|| v_msg_data);
   END LOOP;
END IF;
END;