Monday, 12 May 2014

Generation of Lot number and associating with an Inventory item and organization

Generation of Lot number and associating with an Inventory item and organization involves two steps
·      Generation of Next Lot Number using the api  INV_LOT_API_PUB.AUTO_GEN_LOT 
·      Association/Insertion of the Lot Number to a inventory item and organization (For 

Script:


DECLARE

  v_object_id NUMBER;
  v_return_status             VARCHAR2(1)      := NULL;
  v_msg_count                 NUMBER           := 0;
  v_msg_data                  VARCHAR2 (2000);
  v_lot_number                VARCHAR2 (50);
  v_expire_date               DATE             := SYSDATE+180;
  v_organization_id           NUMBER           :=124;
  v_inventory_item_id         NUMBER           :=27839;
 
  FUNCTION set_context( i_user_name    IN  VARCHAR2
                       ,i_resp_name    IN  VARCHAR2
                       ,i_org_id       IN  NUMBER)
  RETURN VARCHAR2
  IS
    /* Inorder to reduce the content of the post I moved the implementation part of this function to another post and it is available here */

  END set_context;


BEGIN
-- Setting the context ----
v_context := set_context('&V_USER_NAME','&V_RESPONSIBILITY',82);
IF v_context = 'F'
THEN
  DBMS_OUTPUT.PUT_LINE('Error while setting the context');       
END IF;

dbms_output.put_line ('Calling API to Create Lot Number');
v_lot_number := inv_lot_api_pub.auto_gen_lot (
                    p_org_id            => v_organization_id,
                    p_inventory_item_id => v_inventory_item_id,
                    p_parent_lot_number => NULL,
                    p_subinventory_code => NULL,
                    p_locator_id        => NULL,
                    p_api_version       => 1.0,
                    p_init_msg_list     => fnd_api.g_true,
                    p_commit            => fnd_api.g_false,
                    p_validation_level  => fnd_api.g_valid_level_full,
                    x_return_status     => v_return_status,
                    x_msg_count         => v_msg_count,
                    x_msg_data          => v_msg_data
                                           );
IF v_return_status = fnd_api.g_ret_sts_success THEN
   COMMIT;
   DBMS_OUTPUT.put_line ('The Auto generation of Lot Number is Sucessful: '||v_lot_number);
ELSE
   DBMS_OUTPUT.put_line ('The Auto generation of Lot Number Failed');
   ROLLBACK;
   FOR i IN 1 .. v_msg_count
   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;

IF v_lot_number IS NOT NULL THEN

dbms_output.put_line ('Calling API to Create/Insert a Lot Numbers');

inv_lot_api_pub.insertlot
                   (
                    p_api_version       => 1,
                    p_init_msg_list     => fnd_api.g_false,
                    p_commit            => fnd_api.g_false,
                    p_validation_level  => fnd_api.g_valid_level_full,
                    p_inventory_item_id => v_inventory_item_id,
                    p_organization_id   => v_organization_id,
                    p_lot_number        => v_lot_number,
                    p_expiration_date   => v_expire_date,
                    x_object_id         => v_object_id,
                    x_return_status     => v_return_status,
                    x_msg_count         => v_msg_count,
                    x_msg_data          => v_msg_data
                   );

IF v_return_status = fnd_api.g_ret_sts_success THEN
   COMMIT;
   DBMS_OUTPUT.put_line ('The Creation of Lot Number is Sucessful: '||v_object_id);
ELSE
   DBMS_OUTPUT.put_line ('The Creation of Lot Number Failed');
   ROLLBACK;
   FOR i IN 1 .. v_msg_count
   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 IF;
END;





Ref : http://www.shareoracleapps.com/2010/10/generation-of-lot-number-for-inventory.html

Wednesday, 7 May 2014

Raise Exception in OAF

Requirement – How to raise and handle exceptions in OAF pages. 

Solution – There are 3 types of exceptions can be thrown on OAF pages (java).
a)      Warning  – This will display as warning and show custom message  
b)      Information  - This will display as information and show custom message
c)       Error – This will display your custom message as error and stop the flow.

In java (OAF) we use try catch block to handle exceptions.
Try Block – All logic should be kept in a try block to handle exceptions 
Catch Block – Once control find any exception in try block, it goes to catch block. Catch block will be used to handle the raised exception.

Example -
try{ 
                                custom code{
……………;
…………….;
}   
  
throw new OAException("Sandeep");     // Raise Exception Manually     

                      }catch(Exception e) 
                     {

                 throw new OAException("Exception " +e,  OAException.WARNING);         
                // For Warning Message
                 throw new OAException("Exception " +e,  OAException.INFORMATION);   
                // For Information Message   
                 throw new OAException("Exception " +e,  OAException.ERROR);             
               // For Error Message 
     }

If exception occurs in custom code, control will come to catch block and it will print the relative exception message on the screen.
If there is no exception in custom code, control will read last line. Which is to throw exception manually and send control to catch block.
Error message in this case will be as “Exception oracle.apps.fnd.framework.OAException: Sandeep”