Friday 30 December 2011

PLSQL Collections Examples

set serveroutput on;
DECLARE
   --TYPE list_of_names_t IS TABLE OF ap_invoices_all.invoice_num%TYPE
    TYPE list_of_names_t IS TABLE OF varchar2(16) INDEX BY PLS_INTEGER;

   happyfamily   list_of_names_t;
   l_row         PLS_INTEGER;
BEGIN
   happyfamily (2020202020) := 'Eli';
   happyfamily (-15070) := 'Steven';
   happyfamily (-90900) := 'Chris';
   happyfamily (88) := 'Veva';
   l_row := happyfamily.FIRST;

   WHILE (l_row IS NOT NULL)
   LOOP
      DBMS_OUTPUT.put_line (happyfamily (l_row));
      l_row := happyfamily.NEXT (l_row);
   END LOOP;
END;

Chris
Steven
Veva
Eli



--access values one by one

SET SERVEROUTPUT ON;

DECLARE
   CURSOR c_cname
   IS
      SELECT responsibility_key, responsibility_id
        FROM fnd_responsibility
       WHERE responsibility_key LIKE
                        (SELECT meaning
                           FROM fnd_lookup_values_vl
                          WHERE lookup_type = 'XX_EXP_DATE_PROGRAM_ACCESS');

   TYPE type_cname_tab IS TABLE OF VARCHAR2 (60)    --store responsibility_id
      INDEX BY BINARY_INTEGER;

   tab_cname             type_cname_tab;
   v_cname_counter       NUMBER         := 0;
   v_responsibility_id   NUMBER;
BEGIN
   FOR r_cname IN c_cname
   LOOP
      v_cname_counter := v_cname_counter + 1;
      tab_cname (v_cname_counter) := r_cname.responsibility_key;
   END LOOP;

   FOR i_cname IN 1 .. v_cname_counter
   LOOP
      SELECT responsibility_id
        INTO v_responsibility_id
        FROM fnd_responsibility
       WHERE responsibility_key = tab_cname (i_cname);

      DBMS_OUTPUT.put_line ('Responsibilty_key: ' || tab_cname (i_cname));
      DBMS_OUTPUT.put_line ('Responsibilty_id: ' || v_responsibility_id);
   END LOOP;
END;

Thursday 22 December 2011

SQL

SELECT *
  FROM fnd_request_groups
 WHERE request_group_id IN (
          SELECT DISTINCT request_group_id
                     FROM fnd_request_group_units
                    WHERE request_unit_id IN (
                             SELECT concurrent_program_id
                               FROM fnd_concurrent_programs_tl
                              WHERE user_concurrent_program_name LIKE
                                                     'program_name'))

-- FIND THE RESPONSIBILITY ASSIGNED TO REQUEST GROUP WITH ASSIGNED CONCURRENT PROGRAM
SELECT *
  FROM fnd_responsibility_tl
 WHERE responsibility_id IN (
          SELECT responsibility_id
            FROM fnd_responsibility
           WHERE request_group_id IN (
                    SELECT request_group_id
                      FROM fnd_request_groups
                     WHERE request_group_id IN (
                              SELECT DISTINCT request_group_id
                                         FROM fnd_request_group_units
                                        WHERE request_unit_id IN (
                                                 SELECT concurrent_program_id
                                                   FROM fnd_concurrent_programs_tl
                                                  WHERE user_concurrent_program_name LIKE
                                                           'program name'))))

Tuesday 20 December 2011

Java Conc Program

http://blogs.oracle.com/xmlpublisher/entry/howto_java_concurrent_programs
http://oracle.anilpassi.com/java-concurrent-programs-in-oracle.html


Class files must be deployed to DB tier under $JAVA_TOP/(PATH PROVIDED IN EXECUTABLE)

You can use the jdev to prepare the java class files.

ROOT PATH: $JAVA_TOP

com.oracle.apps.ap.customJavaProg

place the java class files in $JAVA_TOP/com/oracle/apps/ap/customJavaProg in db tier.

if class file name, which extends the java conc program class is UploadRates


Refer: https://oracleerphub.com/java-concurrent-program/

Wednesday 14 December 2011

PLSQL Sample Logging Code

CREATE OR REPLACE
PROCEDURE APPS.xx_CUSTOM_METCHANT_LOG(
    P_REPORT_HEADER_ID  IN NUMBER,
    P_REPORT_LINE_INDEX IN NUMBER,
    P_EXPENSE_TYPE      IN VARCHAR2,
    P_MERCHANT          IN VARCHAR2,
    P_MESSAGE           IN VARCHAR2 )
IS
  BEGIN
  INSERT
  INTO apps.xx_EXP_REP_MERCHANT_LOG2
    (
      report_header_id,
      REPORT_LINE_INDEX,
      expense_type,
      merchant,
      MESSAGE
    )
    VALUES
    (
     P_REPORT_HEADER_ID 
    ,P_REPORT_LINE_INDEX
    ,P_EXPENSE_TYPE     
    ,P_MERCHANT         
    ,P_MESSAGE         
    );
  COMMIT;
EXCEPTION
WHEN OTHERS THEN
  NULL;
  END;
--END;


BEGIN
APPS.CUSTOM_METCHANT_LOG(12345,1,'airfare','other','test');
end;


select * from apps.xx_EXP_REP_MERCHANT_LOG2;



CREATE TABLE xx_logging_table(seq_no NUMBER(15), MESSAGE VARCHAR2(500));

CREATE SEQUENCE apps.xx_logging_table_s
      INCREMENT BY 1
      START WITH 1
      MAXVALUE   1000000
      NOCACHE
      CYCLE;


CREATE OR REPLACE PROCEDURE apps.xx_logging_proc (p_message VARCHAR2)
AS
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   INSERT INTO xx_logging_table
        VALUES (apps.xx_logging_table_s.NEXTVAL, p_message);

   COMMIT;
END xx_logging_proc;

commit;


DECLARE
BEGIN
   FOR i IN 1 .. 10
   LOOP
      apps.xx_logging_proc('VALUE' || '-' || i);
   END LOOP;
END;


select * from xx_logging_table;

truncate table xx_logging_table;


Logging in Personalization:

         fnd_log.string (fnd_log.LEVEL_STATEMENT,
                         'XX_ENFORCE_EMAILADDR',  -- module
                         v_message  --message to be inserted in fnd_log_messages
                                    );

Monday 12 December 2011

Dynamic VOs in AM

    //Dynamic VOs in AM
   
    public Boolean checkIfTravelerRecord(Number number)
    {
        OADBTransactionImpl oadbtransactionimpl = (OADBTransactionImpl)getOADBTransaction();
        String s1 = "select count(1) as counter from PA_RATE_OVERHEADS where trvlr_flag='Y' and metro_group_id= :1 ";
        oracle.jbo.ViewObject vo = findViewObject("tempTravelerVO");
        if (vo !=null)
         {
          vo.remove();
         }
        oracle.jbo.ViewObject viewobject = createViewObjectFromQueryStmt("tempTravelerVO", s1);
        viewobject.setWhereClauseParam(0, number);
        Object obj = null;
        viewobject.executeQuery();
        if(viewobject.hasNext())
        {
            oracle.jbo.Row row = viewobject.next();
            if(row.getAttribute(0) != null)
              {  //s = row.getAttribute(0).toString();
                try
                {
                int s2 = Integer.parseInt(row.getAttribute(0).toString());
                if( s2 >0 )
                {
                  return Boolean.TRUE;
                }
                }
                catch (Exception E2)
                {}
              }
        }
        viewobject.remove();
        return Boolean.FALSE;
    }

Calling Methods in AM from CO

PFR

//method 1
    OAApplicationModule am1 = (OAApplicationModule)pageContext.getApplicationModule(webBean);
    am1.invokeMethod("addNewOverride");
//method 2
    OverridesAMImpl am2 = (OverridesAMImpl)am1;
    am2.addNewOverride();
//method 3
    OverridesAMImpl am3 = (OverridesAMImpl)pageContext.getApplicationModule(webBean);
    am3.addNewOverride();

Ways VO can be called from CO
---------------------------------------
    OAApplicationModule am = (OAApplicationModule)pageContext.getApplicationModule(webBean);
    OAViewObject vo = (OAViewObject)am.findViewObject("OverridesFullVO1");
    if(vo!=null)
    {
     vo.clearCache();
     vo.executeQuery();
    }


Ways VO can be called from AM
----------------------------------------
    OAViewObject vo = (OAViewObject)getOverridesFullVO1();
    OAViewObject vo1 = getOverridesFullVO1();
    OAViewObject vo2 = getOverridesFullVO1();
    vo.setAssociationConsistent(); // standard method in vo

    //once you class cast into Impl, you would be able to invoke the custom methods in VOImpl directly
    OverridesFullVOImpl vo3 = (OverridesFullVOImpl)vo2;
    vo3.getCurrentMetroGroup();    // Custom Method in OverridesFullVOImpl   
   
    //another way is do not cast with OAViewObject
    getOverridesFullVO1().setTravelFlag();


Ways VO can be called from VO
----------------------------------------

// Call any getter/setter methods listed there

Sunday 11 December 2011

Workflow

WFLOAD apps/pwd 0 Y DOWNLOAD file.wft ITEMTYPE1

Use the following command:
WFLOAD <apps_user_name>/<password>@db 0 Y DOWNLOAD line.wft OEOL
WFLOAD <apps_user_name>/<password>@db 0 Y DOWNLOAD header.wft OEOH.


Upload workflow definition /d01/app/DEV/apdev/apps/apps_st/appl/fnd/12.0.0/bin/WFLOAD apps/$password@DEV 0 Y UPLOAD OEOL.wft

/d01/app/DEV/apdev/apps/apps_st/appl/fnd/12.0.0/bin=> $FND_TOP/bin

***Checked for relevance on 13-JUL-2010***

References

NOTE:113570.1 - OM-INV: Invoice/Crediting - FAQ
NOTE:113581.1 - Control - Workflow: FAQ
NOTE:121054.1 - How to generate a debug file in OM
NOTE:133464.1 - HTMOMSE Sales Order Diagnostic Script
NOTE:156860.1 - OMCHECK.SQL Oracle Order Management Diagnostic Tool
NOTE:170889.1 - Header Level Invoicing
NOTE:183643.1 - Workflow Scripts
NOTE:270765.1 - Obsolete Workflow Runtime Data Is Not Purging All Data
NOTE:353991.1 - OMSuiteDataChk.sql
NOTE:397548.1 - PATCH 5601698 DATA FIX CLOSES ELIGIBLE ORDER HEADERS & PURGE ASSOCIATED OMERROR & WFERROR & ORPHAN LINE WORKFLOWS


----------------------------------
Helpful Workflow Packages

CREATE OR REPLACE PACKAGE BODY apps.workflowPackage
AS
--workflow code for activity with one result -
   PROCEDURE wf_one_result (
      p_item_type   IN              VARCHAR2,
      p_item_key    IN              VARCHAR2,
      p_actid       IN              NUMBER,
      p_funmode     IN              VARCHAR2,
      p_result      OUT NOCOPY      VARCHAR2
   )
   IS

--declare variables

   BEGIN
      x_report_header_id := TO_NUMBER (p_item_key);


-- if else conditions
      p_result := wf_engine.eng_completed || ':' || 'SUCCESS';

   EXCEPTION
      WHEN OTHERS
      THEN
         wf_core.CONTEXT (pkg_name       => 'workflowPackage',
                          proc_name      => 'set_counter',
                          arg1           =>    'Error with item key '
                                            || p_item_key
                                            || ' ERROR :'
                                            || SUBSTR (SQLERRM, 1, 300),
                          arg2           => p_item_type,
                          arg3           => p_item_key
                         );
         RAISE;
   END set_counter;

--*******************************************************************
   PROCEDURE determineProcess (
      p_item_type   IN              VARCHAR2,
      p_item_key    IN              VARCHAR2,
      p_actid       IN              NUMBER,
      p_funmode     IN              VARCHAR2,
      p_result      OUT NOCOPY      VARCHAR2
   )
   IS
--declare variables

   BEGIN
      ap_web_utilities_pkg.logprocedure ('AP_WEB_EXPENSE_WF','start determineProcess');

      IF (p_funmode = 'RUN')
      THEN
         l_report_header_id :=   wf_engine.getitemattrnumber (
                                                                p_item_type,
                                                                p_item_key,
                                                                'EXPENSE_REPORT_ID'
                                                                                         );
         IF true
         THEN
            p_result := 'COMPLETE:Y';
         ELSE
            p_result := 'COMPLETE:N';
         END IF;

      ELSIF (p_funmode = 'CANCEL')
      THEN
         p_result := 'COMPLETE';
      END IF;

      ap_web_utilities_pkg.logprocedure ('AP_WEB_EXPENSE_WF',
                                         'end Process'
                                        );
   EXCEPTION
      WHEN OTHERS
      THEN
         ap_web_db_util_pkg.raiseexception ('determine Process');
         app_exception.raise_exception;
   END determineProcess;

END workflowPackage;
/

------------------------------------------

How To Send Notification To Multiple Users
https://sites.google.com/site/shareapps4u/learning-topic/workflow-tutorial/how-to-send-notification-to-multiple-user

Thursday 8 December 2011

seeded site level personalization off

--Disable seeded site level personalization off
-------------------------------------------------------
FND: Personalization Seeding Mode = set to Yes

Oracle FNDLOAD Scripts

------------------------------------------------------------------------------------------


##To FNDLOAD Request groups
FNDLOAD apps/$CLIENT_APPS_PWD O Y DOWNLOAD $FND_TOP/patch/115/import/afcpreqg.lct XX_MY_REPORT_GROUP_NAME.ldt REQUEST_GROUP REQUEST_GROUP_NAME="XX_MY_REPORT_GROUP_NAME" APPLICATION_SHORT_NAME="XXGMS"
##Note that
##---------
## <> will be your Application Shortname where request group is registered
## XX_MY_REPORT_GROUP_NAME
Will be the name of your request group
## ##To upload this Request Group in other environment after having transferred the ldt file

FNDLOAD apps/$CLIENT_APPS_PWD O Y UPLOAD $FND_TOP/patch/115/import/afcpreqg.lct


------------------------------------------------------------------------------------------


##To FNDLOAD Concurrent Programs
FNDLOAD apps/$CLIENT_APPS_PWD O Y DOWNLOAD $FND_TOP/patch/115/import/afcpprog.lct XX_CUSTOM_ORACLE_INTERFACE_PROG.ldt PROGRAM APPLICATION_SHORT_NAME="XXGMS" CONCURRENT_PROGRAM_NAME="XX_CUSTOM_ORACLE_INTERFACE_PROG"
##Note that
##---------
## XXGMS will be your custom GMS Application Shortname where concurrent program is registered
## XX_CUSTOM_ORACLE_INTERFACE_PROG
Will be the name of your request group
## XX_CUSTOM_ORACLE_INTERFACE_PROG.ldt is the file where concurrent program definition will be extracted
## ##To upload
FNDLOAD apps/$CLIENT_APPS_PWD O Y UPLOAD $FND_TOP/patch/115/import/afcpprog.lct XX_CUSTOM_ORACLE_INTERFACE_PROG.ldt


------------------------------------------------------------------------------------------


##To FNDLOAD Oracle Descriptive Flexfields
$FND_TOP/bin/FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/afffload.lct XX_PO_REQ_HEADERS_DFF.ldt DESC_FLEX APPLICATION_SHORT_NAME=PO DESCRIPTIVE_FLEXFIELD_NAME='PO_REQUISITION_HEADERS'
##Note that
##---------
## PO is the Application Shortname against which descriptive flexfield against PO Headers is registered
## PO_REQUISITION_HEADERS
is the name of Descriptive Flexfield against PO Requisition Headers
## Use the SQL below to find the name of DFF, rather than logging into the screen (ooops via jinitiator)
########----->SELECT
########----->application_id, DESCRIPTIVE_FLEXFIELD_NAME, application_table_name
########----->FROM
########-----> fnd_descriptive_flexs_vl
########----->WHERE
########-----> APPLICATION_TABLE_NAME like '%' || upper('&tab_name') || '%'
########----->ORDER BY APPLICATION_TABLE_NAME
########----->/
## To upload into another environment
$FND_TOP/bin/FNDLOAD apps/$CLIENT_APPS_PWD 0 Y UPLOAD $FND_TOP/patch/115/import/afffload.lct XX_PO_REQ_HEADERS_DFF.ldt

## OK another example for DFF against FND_LOOKUPS
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/afffload.lct XX_FND_COMMON_LOOKUPS_DFF.ldt DESC_FLEX APPLICATION_SHORT_NAME=FND DESCRIPTIVE_FLEXFIELD_NAME='FND_COMMON_LOOKUPS'
## OK another example for DFF against Project Accounting Expenditure Types
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/afffload.lct XX_PA_EXPENDITURE_TYPES_DESC_FLEX_DFF.ldt DESC_FLEX APPLICATION_SHORT_NAME=PA DESCRIPTIVE_FLEXFIELD_NAME='PA_EXPENDITURE_TYPES_DESC_FLEX'



------------------------------------------------------------------------------------------


##To FNDLOAD Oracle Menus
$FND_TOP/bin/FNDLOAD apps/$CLIENT_APPS_PWD O Y DOWNLOAD $FND_TOP/patch/115/import/afsload.lct ICX_POR_SSP_HOME.ldt MENU MENU_NAME="ICX_POR_SSP_HOME"
##Note that
##---------
## Oracle Menus are not attached to applications. Hence no need to include application short name
## ICX_POR_SSP_HOME is the menu name. This can be validated via below SQL
## select user_menu_name from fnd_menus_vl where menu_name = 'ICX_POR_SSP_HOME' ;
## Also note that we do not pass in the User_menu_name in this example
## OK, now to upload this file
$FND_TOP/bin/FNDLOAD apps/$CLIENT_APPS_PWD O Y UPLOAD $FND_TOP/patch/115/import/afsload.lct ICX_POR_SSP_HOME.ldt


----------------------------------------------------------------------------------------------------------------------------

## Well, now for FND Messages to download a single message
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/afmdmsg.lct \
XX_ICX_POR_LIFECYCLE_PAY_TIP.ldt FND_NEW_MESSAGES APPLICATION_SHORT_NAME='ICX' MESSAGE_NAME=XX_ICX_POR_LIFECYCLE_PAY_TIP

## Or you may as well download all the messages within an application
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/afmdmsg.lct \
XX_ALL_GMS_MESSAGES_00.ldt FND_NEW_MESSAGES APPLICATION_SHORT_NAME='XXGMS'

## now to upload using FNDLOAD
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y UPLOAD $FND_TOP/patch/115/import/afmdmsg.lct XX_ICX_POR_LIFECYCLE_PAY_TIP.ldt


----------------------------------------------------------------------------------------------------------------------------


## Now it's the turn of Lookup values. Again, its not a rocket science
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD aflvmlu.lct XX_TRX_BATCH_STATUS.ldt FND_LOOKUP_TYPE APPLICATION_SHORT_NAME ='XXGMS' LOOKUP_TYPE="XX_TRX_BATCH_STATUS"
## Note that
## XX_TRX_BATCH_STATUS is the name of FND Lookup Type in this example
## This will download all the lookup codes within the defined lookup
## To upload
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y UPLOAD aflvmlu.lct XX_TRX_BATCH_STATUS.ldt

----------------------------------------------------------------------------------------------------------------------------

## You can also move the User definitions from FND_USER
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/afscursp.lct ./XX_FND_USER_PASSI.ldt FND_USER USER_NAME='ANILPASSI'
#Do not worry about your password being extracted, it will be encrypted as below in ldt file
#BEGIN FND_USER "ANILPASSI"
#  OWNER = "PASSIA"
#  LAST_UPDATE_DATE = "2005/10/19"
#  ENCRYPTED_USER_PASSWORD = "ZGE45A8A9BE5CF4339596C625B99CAEDF136C34FEA244DC7A"
#  SESSION_NUMBER = "0"
To upload the FND_USER using FNDLOAD command use
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y UPLOAD $FND_TOP/patch/115/import/afscursp.lct ./XX_FND_USER_PASSI.ldt
Notes for using FNDLOAD against FND_USER:-
1. After uploading using FNDLOAD, user will be promoted to change their password again during their next signon attempt.
2. All the responsibilities will be extracted by FNDLOAD alongwith User Definition in FND_USER
3. In the Target Environment , make sure that you have done FNDLOAD for new responsibilities prior to running FNDLOAD on users.

----------------------------------------------------------------------------------------------------------------------------


## Now lets have a look at the profile option using oracle's FNDLOAD
FNDLOAD apps/$CLIENT_APPS_PWD O Y DOWNLOAD $FND_TOP/patch/115/import/afscprof.lct POR_ENABLE_REQ_HEADER_CUST.ldt PROFILE PROFILE_NAME="POR_ENABLE_REQ_HEADER_CUST" APPLICATION_SHORT_NAME="ICX"
## Note that
## POR_ENABLE_REQ_HEADER_CUST is the short name of profile option
## We aren't passing the user profile option name in this case. Validate using ...
########----->select application_id, PROFILE_OPTION_NAME || '==>' || profile_option_id || '==>' ||
########----->USER_PROFILE_OPTION_NAME
########----->from FND_PROFILE_OPTIONS_VL
########----->where PROFILE_OPTION_NAME like '%' || upper('&profile_option_name') || '%'
########----->order by PROFILE_OPTION_NAME
########----->/
## Now to upload
FNDLOAD apps/$CLIENT_APPS_PWD O Y UPLOAD $FND_TOP/patch/115/import/afscprof.lct POR_ENABLE_REQ_HEADER_CUST.ldt


----------------------------------------------------------------------------------------------------------------------------


## Now for the request sets that contain the stages and links for underlying concurrent programs
## For this you will be firstly required to download the request set definition.
## Next you will be required to download the Sets Linkage definition
## Well, lets be clear here, the above sequence is more important while uploading
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcprset.lct XX_GL_MY_INTERFACE_SET.ldt REQ_SET REQUEST_SET_NAME="FNDRSSUB4610101_Will_look_like_this"
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcprset.lct XX_GL_MY_INTERFACE_SET_LINK.ldt REQ_SET_LINKS REQUEST_SET_NAME="FNDRSSUB4610101_Will_look_like_this"
## Note that FNDRSSUB4610101 can be found by doing an examine on the
########----->select request_set_name from fnd_request_sets_vl
########----->where user_request_set_name = 'User visible name for the request set here'
## Now for uploading the request set, execute the below commands
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y UPLOAD $FND_TOP/patch/115/import/afcprset.lct XX_GL_MY_INTERFACE_SET.ldt
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y UPLOAD $FND_TOP/patch/115/import/afcprset.lct XX_GL_MY_INTERFACE_SET_LINK.ldt


----------------------------------------------------------------------------------------------------------------------------


## Now for the responsibility
FNDLOAD apps/$CLIENT_APPS_PWD O Y DOWNLOAD $FND_TOP/patch/115/import/afscursp.lct XX_PERSON_RESPY.ldt FND_RESPONSIBILITY RESP_KEY="XX_PERSON_RESPY"
## note that XX_PERSON_RESPY is the responsibility key
## Now to upload
FNDLOAD apps/$CLIENT_APPS_PWD O Y UPLOAD $FND_TOP/patch/115/import/afscursp.lct XX_PERSON_RESPY.ldt


----------------------------------------------------------------------------------------------------------------------------
## OK, now for the forms personalizations
## For the forms personalizations, I have given three examples as below.
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_PERWSHRG.ldt FND_FORM_CUSTOM_RULES function_name="PERWSHRG-404"
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_HZ_ARXCUDCI_STD.ldt FND_FORM_CUSTOM_RULES function_name="HZ_ARXCUDCI_STD"
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_AP_APXVDMVD.ldt FND_FORM_CUSTOM_RULES function_name="AP_APXVDMVD"
## Note that the function name above is the function short name as seen in the Function Definition Screen
## Now to upload the forms personalizations that are defined against these forms functions....
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y UPLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_PERWSHRG.ldt
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y UPLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_HZ_ARXCUDCI_STD.ldt
FNDLOAD apps/$CLIENT_APPS_PWD 0 Y UPLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_AP_APXVDMVD.ldt


----------------------------------------------------------------------------------------------------------------------------

To FNDLOAD Web ADI, visit the link Web ADI FNDLOAD

Use FNDLOAD for transferring value set definitions.
-->Please note that when transferring Key Flex Fields and Descriptive flex fields the respective value sets against each segment will be extracted and loaded automatically.

Also, FNDLOAD can be used to migrate Key FlexFields, Descriptive Flexfields, Responsibilities and almost every other FND entity.

Please note that the text written down here could get wrapped in the browser.
Hence you may have to use \ to continue the single line command on Unix, in case you find the lines wrapping
In my case I am ensuring that $CLIENT_APPS_PWD has the apps password before running the scripts

-- Scripts to DOWNLOAD Value Set
Value Sets
FNDLOAD apps/apps@seed115 O Y DOWNLOAD $FND_TOP/patch/115/import/afffload.lct file_name.ldt VALUE_SET FLEX_VALUE_SET_NAME="value set name"


http://www.oracleappshub.com/aol/its-all-about-fndload/

--------------------------------------------------------------------------------------------

10. Data Definition and Associated Template
--- ---------------------------------------------------------- 

FNDLOAD apps/$CLIENT_APPS_PWD O Y DOWNLOAD  $XDO_TOP/patch/115/import/xdotmpl.lct XX_CUSTOM_DD.ldt XDO_DS_DEFINITIONS APPLICATION_SHORT_NAME='XXCUST' DATA_SOURCE_CODE='XX_SOURCE_CODE' TMPL_APP_SHORT_NAME='XXCUST' TEMPLATE_CODE='XX_SOURCE_CODE'

FNDLOAD apps/$CLIENT_APPS_PWD O Y UPLOAD $XDO_TOP/patch/115/import/xdotmpl.lct XX_CUSTOM_DD.ldt

11. DATA_TEMPLATE (Data Source .xml file)
--- ---------------------------------------------------------- 

java oracle.apps.xdo.oa.util.XDOLoader DOWNLOAD -DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XX_HOST_NAME)(PORT=XX_PORT_NUMBER))(CONNECT_DATA=(SERVICE_NAME=XX_SERVICE_NAME)))' -LOB_TYPE DATA_TEMPLATE -LOB_CODE XX_TEMPLATE -APPS_SHORT_NAME XXCUST -LANGUAGE en -lct_FILE $XDO_TOP/patch/115/import/xdotmpl.lct -LOG_FILE $LOG_FILE_NAME

java oracle.apps.xdo.oa.util.XDOLoader UPLOAD -DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XX_HOST_NAME)(PORT=XX_PORT_NUMBER))(CONNECT_DATA=(SERVICE_NAME=XX_SERVICE_NAME)))' -LOB_TYPE DATA_TEMPLATE -LOB_CODE XX_TEMPLATE -XDO_FILE_TYPE XML -FILE_NAME $DATA_FILE_PATH/$DATA_FILE_NAME.xml -APPS_SHORT_NAME XXCUST -NLS_LANG en -TERRITORY US -LOG_FILE $LOG_FILE_NAME

12. RTF TEMPLATE (Report Layout .rtf file)
--- ------------------------------------------------------- 

java oracle.apps.xdo.oa.util.XDOLoader DOWNLOAD -DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XX_HOST_NAME)(PORT=XX_PORT_NUMBER))(CONNECT_DATA=(SERVICE_NAME=XX_SERVICE_NAME)))' -LOB_TYPE TEMPLATE -LOB_CODE XX_TEMPLATE -APPS_SHORT_NAME XXCUST -LANGUAGE en -TERRITORY US -lct_FILE $XDO_TOP/patch/115/import/xdotmpl.lct -LOG_FILE $LOG_FILE_NAME

java oracle.apps.xdo.oa.util.XDOLoader UPLOAD -DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XX_HOST_NAME)(PORT=XX_PORT_NUMBER))(CONNECT_DATA=(SERVICE_NAME=SERVICE_NAME)))' -LOB_TYPE TEMPLATE -LOB_CODE XX_TEMPLATE -XDO_FILE_TYPE RTF -FILE_NAME $RTF_FILE_PATH/$RTF_FILE_NAME.rtf -APPS_SHORT_NAME XXCUST -NLS_LANG en -TERRITORY US -LOG_FILE $LOG_FILE_NAME

source: https://blogs.oracle.com/prajkumar/entry/oracle_fndload_scripts

Wednesday 7 December 2011

jpximport

jpximport
-------------------------------------------------------
java oracle.jrad.tools.xml.importer.JPXImporter
$JAVA_TOP/abhi/oracle/apps/ap/oie/custom_proj.jpx  \
-username apps \
-password $password \
-dbconnection "(DESCRIPTION =(ADDRESS = (PROTOCOL = tcp)(HOST = <>)(PORT = <>))(CONNECT_DATA=(SID = <>)))" \


Imported document : /oracle/apps/ap/oie/server/customizations/site/0/ReceiptBasedLinesVO
 Import completed successfully


----------------printdocument------------
set serveroutput on;
DECLARE
BEGIN
jdr_utils.printdocument
(p_document => '/oracle/apps/ap/oie/server/customizations/site/0/ReceiptBasedLinesVO');
END;


<?xml version='1.0' encoding='UTF-8'?>
<customization xmlns="http://xmlns.oracle.com/jrad" xmlns:ui="http://xmlns.oracle.com/uix/ui" xmlns:oa="http://xmlns.oracle.com/oa" xmlns:user="http://xmlns.oracle.com/user" version="9.0.3.8.13_1570" xml:lang="en-US"
               customizes="/oracle/apps/ap/oie/server/ReceiptBasedLinesVO">
   <replace with="/abhi/oracle/apps/ap/oie/server/abhiReceiptBasedLinesVO"/>
</customization>
PL/SQL procedure successfully completed.


-------------------------------deletedocument----------------------------

set serveroutput on;
DECLARE
BEGIN
jdr_utils.deletedocument
(p_document => '/oracle/apps/ap/oie/server/customizations/site/0/ReceiptBasedLinesVO');
END;
commit;

Successfully deleted document /oracle/apps/ap/oie/server/customizations/site/0/ReceiptBasedLinesVO.
PL/SQL procedure successfully completed.

Import Pages XMLImporter

Use the below command after running the source *.env
java oracle.jrad.tools.xml.importer.XMLImporter \
$JAVA_TOP/abhi/oracle/apps/projects/webui/MyPagePG.xml \
-username apps \
-password <password> \
-rootdir $JAVA_TOP \
-dbconnection "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=<>)(PORT=<>))(CONNECT_DATA=(SID=<>)))"


Making Rows Read Only



Create a transient attribute in VO

Assign into page

${oa.current.saveEnable}







public void readOnlyTable(OAPageContext pageContext, OAWebBean webBean)
 { 
    //making rows readonly which are saved
    OAApplicationModule am = (OAApplicationModule)pageContext.getApplicationModule(webBean);
    OAViewObject vo = (OAViewObject)am.findViewObject("OverridesFullVO1");
    if(vo!=null)
    {
      for(Row row = (Row)vo.first();row!=null;row = (Row)vo.next())
      {
        if("SAVED".equals((String)row.getAttribute("Attribute1")))
        {
          row.setAttribute("saveEnable",Boolean.TRUE);
        }
      }
    }
 }

formatting Number in 0.00 format

import oracle.cabo.ui.validate.Formatter;

public void formatFields(OAPageContext pageContext, OAWebBean webBean)
{
        OAPageLayoutBean pageBean = (OAPageLayoutBean)pageContext.getPageLayoutBean();
        Formatter formatter =         new OADecimalValidater("#,##0.00;#,##0.00","#,##0.00;#,##0.00");
        OAMessageTextInputBean sbean2 = (OAMessageTextInputBean)pageBean.findIndexedChildRecursive("OverrideAmount");
        sbean2.setAttributeValue(ON_SUBMIT_VALIDATER_ATTR, formatter);
}

Friday 2 December 2011

ADF Architecture

ADF has 4 main components


1. Business Components -- EO/ VO and AM with VO instances
2. Model -- New in ADF ie Data Control and binding Layers, offer services for binding in BC and Faces
3. Controller-- Like OAF Controller
4. Faces -- Pages that run

Online Resources

http://www.youtube.com/user/ADFInsiderEssentials?feature=mhum#g/a
http://www.oracle.com/technetwork/developer-tools/adf/learnmore/adfinsider-093342.html

Creating Search Insert Update Delete On Same Page in OAF

I would provide an example of Creating Search Insert Update Delete On Same Page in OAF

Outline of the Development Steps

A. Create DB Components
-------------------------------------------

1. We have custom table : PA_RATES_OVERRIDES

2. Create a synonym

3. Create a Unique Index

4. Create a db package ABHI_PA_RATES_OVERRIDES

5. Create procedures

B. Create EO/ VOs/ AM

C. Create Page Design

D. Create Controller

E. Deploy Page

================================================================
ADD ROWS


  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
  {
    super.processFormRequest(pageContext, webBean);
    OverridesAMImpl adjmodinterface = (OverridesAMImpl)pageContext.getApplicationModule(webBean);
    if ("addRows".equals(pageContext.getParameter("event")))
    {
        adjmodinterface.addNewOverride();
    }
}


public void addNewOverride()
  {
    System.out.println("addNewOverride> Starts");
    int i = 0;
    int m = 0;
    OAViewObject localVOImpl = (OAViewObject)getOverridesFullVO1();
     if (!localVOImpl.isPreparedForExecution())
          {
            localVOImpl.executeQuery();
          }

    localVOImpl.last();
    localVOImpl.next();
    Row row = localVOImpl.createRow(); //create your row
    System.out.println("addNewOverride> createRow");
    localVOImpl.insertRow(row); //insert it
    System.out.println("addNewOverride> insertRow");
    row.setNewRowState(Row.STATUS_INITIALIZED);
    //CALL method in VO to select the flag for new row
    row.setAttribute("SelectFlag","Y");

    System.out.println(" addNewOverride finished");
   
  }

set the add rows pragmatically to N on page xml.

=============================================================

Query All Rows on Page

//Query the existing data on page
  public void queryAllRows(OAPageContext pageContext, OAWebBean webBean)
  {
    OAApplicationModule am = pageContext.getApplicationModule(webBean);
    Boolean executeQuery = BooleanUtils.getBoolean(false);
    Serializable[] parameters =  { executeQuery };
    Class[] paramTypes = { Boolean.class };
    am.invokeMethod("initTableQuery", parameters, paramTypes);
    OAAdvancedTableBean table =
      (OAAdvancedTableBean)webBean.findChildRecursive("OverrideAdvTbl");

    if (table == null)
    {
      MessageToken[] tokens = { new MessageToken("OBJECT_NAME", "OverrideAdvTbl") };
      throw new OAException("PA", "OBJECT_NOT_FOUND", tokens);
    }

    table.queryData(pageContext, true);
  }


  public void initTableQuery(Boolean executeQuery)
  {
    System.out.println("initTableQuery is invoked");
   OverridesFullVOImpl vo = getOverridesFullVO1();
   vo.initQuery(executeQuery);
  }

  =================================================================

Save Data

else if (pageContext.getParameter("SaveDraft") != null )
      {
          if (Boolean.TRUE.equals(adjmodinterface.anyRowSelected()))
          {
          System.out.println("SaveDraft is clicked");
          dialogPageforSaveDraft(pageContext, webBean);
          }
        else
          {
        throw new OAException("PA", "NO_OVR_ROWS_SELECTED"); 
       
          }
      }

    else if (pageContext.getParameter("SaveYesButton") != null)
    {
            String a = adjmodinterface.saveDraft();
            System.out.println("SaveDraft is clicked"+a); 

            if (a.length() >2)
            {
           
            reExecuteVO(pageContext, webBean); 
            readOnlyTable(pageContext, webBean); 
           
            a = a.substring(2,a.length());
            MessageToken[] tokens = { new MessageToken("OVERRIDE_ID", a)};
            OAException message = new OAException("PA", "OVR_DIALOG_CNF_ERR", tokens, OAException.WARNING, null);
            pageContext.putDialogMessage(message);
           
            }
            else
            {
            reExecuteVO(pageContext, webBean); 
            readOnlyTable(pageContext, webBean); 
            OAException message = new OAException("PA", "OVR_SAVE_DIALOG_CNF", null, OAException.CONFIRMATION, null);
            pageContext.putDialogMessage(message);
            }
    }

public void dialogPageforSaveDraft(OAPageContext pageContext, OAWebBean webBean)
  {
      OAException mainMessage = new OAException("PA", "OVER_SAVE_DIALOG");
      OADialogPage dialogPage = new OADialogPage(OAException.INFORMATION,
        mainMessage, null, "", "");
      String yes = pageContext.getMessage("AK", "FWK_TBX_T_YES", null);
      String no = pageContext.getMessage("AK", "FWK_TBX_T_NO", null);
      dialogPage.setOkButtonItemName("SaveYesButton");
      dialogPage.setNoButtonItemName("SaveNoButton");
      dialogPage.setOkButtonToPost(true);
      dialogPage.setNoButtonToPost(true);
      dialogPage.setPostToCallingPage(true);
      dialogPage.setOkButtonLabel(yes);
      dialogPage.setNoButtonLabel(no);
      System.out.println(String.valueOf("Before calling Dialog page").concat(String.valueOf(dialogPage.getOkButtonItemName())));
      pageContext.redirectToDialogPage(dialogPage);
  }


----code in am----

public Boolean anyRowSelected()
{
    System.out.println("anyRowSelected is invoked");
    OAViewObject vo = getOverridesFullVO1();
    int fetchedRowCount = vo.getFetchedRowCount(); 
    if ( vo.findRowSetIterator("selectIter4") !=null)
    {
      RowSetIterator selectIter4 = vo.findRowSetIterator("selectIter4");
      selectIter4.closeRowSetIterator();
    }
   
    RowSetIterator selectIter4 = vo.createRowSetIterator("selectIter4"); 

    if (fetchedRowCount > 0) 
    { 
    System.out.println("anyRowSelected fetchedRowCount >0 ");
     selectIter4.setRangeStart(0); 
     selectIter4.setRangeSize(fetchedRowCount); 
        for (int i = 0; i < fetchedRowCount; i++) 
        { 
        System.out.println("anyRowSelected fetchedRowCount > for loop ");
        OverridesFullVORowImpl rowi = (OverridesFullVORowImpl)selectIter4.getRowAtRangeIndex(i); 
        String selectBox = rowi.getSelectFlag()+"";
             if("Y".equals(selectBox)) 
              { 
                  return Boolean.TRUE;
              } 
        } 
    } 
    selectIter4.closeRowSetIterator();
    System.out.println("anyRowSelected is finished");
    return Boolean.FALSE;
}

public String saveDraft()
  {
    //invoke method to retrieve the Metro Group ID, Metro ID and Job ID
    System.out.println("save draft is invoked");
    System.out.println("save draft started Called");
    String a = saveDraftSelected()+"";
    System.out.println("saveDraft return value: "+a);
    return a;
  }

public String saveDraftSelected()
{
    System.out.println("saveDraftSelected is invoked");
    OAViewObject vo = getOverridesFullVO1();
    int fetchedRowCount = vo.getFetchedRowCount(); 

    String DuplicateAdjustmentId="";


    if ( vo.findRowSetIterator("selectIter3") !=null)
    {
      RowSetIterator selectIter3 = vo.findRowSetIterator("selectIter3");
      selectIter3.closeRowSetIterator();
    }

    RowSetIterator selectIter3 = vo.createRowSetIterator("selectIter3"); 

    if (fetchedRowCount > 0) 
    { 
    System.out.println("saveDraftSelected fetchedRowCount >0 ");
    // Save the original range size and range start. 
     selectIter3.setRangeStart(0); 
     selectIter3.setRangeSize(fetchedRowCount); 
        //Creates a Transient Attribute of "String" type. 
        for (int i = 0; i < fetchedRowCount; i++) 
        { 
        System.out.println("saveDraftSelected fetchedRowCount > for loop ");
        OverridesFullVORowImpl rowi = (OverridesFullVORowImpl)selectIter3.getRowAtRangeIndex(i); 
        String selectBox = rowi.getSelectFlag()+"";
        //    String selectFlag = rowi.getSelectFlag()+"";  
            if ((!"null".equals(selectBox)) || (!"".equals(selectBox)))
             if("Y".equals(selectBox)) 
              { 
             //  Getting selected row. 
             System.out.println("saveDraftSelected fetchedRowCount > selectBox "+selectBox);
             //pass the below value in the VOImpl method to retrieve the Metro Group ID
              try
              {
             System.out.println("saveDraftSelected fetchedRowCount > selectBox in try");
             if (Boolean.FALSE.equals(checkIfRecordExist(rowi.getOverrideId())))
              {
                if (rowi.insertRow() != null)
                {
                  DuplicateAdjustmentId = DuplicateAdjustmentId +", "+rowi.getOverrideId();
                }
              }
             else
                if (rowi.updateRow() != null)
                  {
                    DuplicateAdjustmentId = DuplicateAdjustmentId +", "+rowi.getOverrideId();
                  }

             System.out.println("saveDraftSelected > setting metro group id"+selectBox);
              }
              catch(Exception e1)
              {
             System.out.println("saveDraftSelected fetchedRowCount > selectBox in catch");
              }
             
            } 
        } 
    } 
     selectIter3.closeRowSetIterator();
    System.out.println("approveSelected is finished");

   return DuplicateAdjustmentId;
}

----insert or update method in VORowImpl---------


    public String insertRow()
    {
        System.out.println("PLSQL insert row is called");

        try
        {
        OAApplicationModuleImpl oaapplicationmoduleimpl = (OAApplicationModuleImpl)getApplicationModule();
        OverridesAMImpl overheadsam = (OverridesAMImpl)oaapplicationmoduleimpl.getRootApplicationModule();
        OADBTransactionImpl oadbtransactionimpl = (OADBTransactionImpl)overheadsam.getOADBTransaction();

            String s = "begin PA_RATES_PKG_OVR.override_create_row( "
                       + "   v_OVERRIDE_ID        => :1  ,   "
                       + "   v_METRO_GROUP_ID    => :2   ,    "
                       + "   v_METRO_ID          => :3   ,    "
                       + "   v_JOB_ID            => :4   ,    "
                       + "   v_CURRENCY_CODE     => :5   ,    "
                       + "   v_TRVLR_FLAG        => :6   ,    "
                       + "   v_AMOUNT_OVERRIDE   => :7   ,    "
                       + "   v_COMMENTS          => :8   ,    "
                       + "   v_ENABLED_FLAG      => :9   ,    "
                       + "   v_MESSAGE_OUT       => :10       "
                       + " ); end; ";
            OracleCallableStatement oraclecallablestatement = (OracleCallableStatement)oadbtransactionimpl.createCallableStatement(s, -1);
            oraclecallablestatement.setNUMBER(1, getOverrideId());
            oraclecallablestatement.setNUMBER(2, getMetroGroupId());
            oraclecallablestatement.setNUMBER(3, getMetroId());
            oraclecallablestatement.setNUMBER(4, getJobId());
            oraclecallablestatement.setString(5, getCurrencyCode());
            oraclecallablestatement.setString(6, getTrvlrFlag());
            oraclecallablestatement.setNUMBER(7, getAmountOverride());
            oraclecallablestatement.setString(8, getComments());
            oraclecallablestatement.setString(9, getEnabledFlag());
            oraclecallablestatement.registerOutParameter(10, Types.VARCHAR);

            System.out.println("PLSQL insert row > 1"+getAmountOverride());
                System.out.println("PLSQL insert row > 2"+getOverrideId());
            System.out.println("PLSQL insert row > 3"+getMetroGroupId());
            System.out.println("PLSQL insert row > 4"+getMetroId());
            System.out.println("PLSQL insert row > 5"+getJobId());
            System.out.println("PLSQL insert row > 6"+getCurrencyCode());
            System.out.println("PLSQL insert row > 7"+getTrvlrFlag());
            System.out.println("PLSQL insert row > 7"+getEnabledFlag());
            System.out.println("PLSQL insert row > 10"+getComments());

            oraclecallablestatement.execute();
            String messageout = null;
            messageout = oraclecallablestatement.getString(10);
            System.out.println("PLSQL insert row > error"+messageout);
            return messageout;
        }
        catch(SQLException sqlexception)
        {
            System.out.println("PLSQL insert row > 1"+sqlexception.getMessage());
        }
        catch(Exception exception)
        {
           // throw OAException.wrapperException(exception);
        }

      return null;

    }


    public String deleteRow()
    {
        System.out.println("PLSQL deleteRow is called");
          //String messageout = "";
        try
        {
        System.out.println("PLSQL deleteRow is called >2");
        OAApplicationModuleImpl oaapplicationmoduleimpl = (OAApplicationModuleImpl)getApplicationModule();
        OverridesAMImpl overheadsam = (OverridesAMImpl)oaapplicationmoduleimpl.getRootApplicationModule();
        OADBTransactionImpl oadbtransactionimpl = (OADBTransactionImpl)overheadsam.getOADBTransaction();
        System.out.println("PLSQL deleteRow is called >3");

            System.out.println("PLSQL deleteRow > Override ID: "+getOverrideId());
            System.out.println("PLSQL deleteRow > getAmountOverride: "+getAmountOverride());
            System.out.println("PLSQL deleteRow > getEnabledFlag: "+getEnabledFlag());
            System.out.println("PLSQL deleteRow > getComments: "+getComments());
            System.out.println("PLSQL deleteRow > getMetroGroupId: "+getMetroGroupId());
            System.out.println("PLSQL deleteRow > getMetroId: "     +getMetroId());
            System.out.println("PLSQL deleteRow > getJobId: "       +getJobId());
            System.out.println("PLSQL deleteRow > getTrvlrFlag: "   +getTrvlrFlag());

       if (getOverrideId() == null)
       {
          System.out.println("PLSQL deleteRow > NPE Override ID: "+getOverrideId());
       }
       else
       {
           
        String s = "begin PA_RATES_PKG_OVR.override_delete_row( "
                      + "  v_OVERRIDE_ID           =>  :1     ,  "
                      + "     v_MESSAGE_OUT           =>  :2        "
                      + "    ); end; ";                     
            OracleCallableStatement oraclecallablestatement = (OracleCallableStatement)oadbtransactionimpl.createCallableStatement(s, 1);
            oraclecallablestatement.setNUMBER(1, getOverrideId());
            ((OracleCallableStatement)oraclecallablestatement).registerOutParameter(2, Types.VARCHAR);

            //oraclecallablestatement.executeUpdate();
            oraclecallablestatement.execute();

            String messageout = null;

            messageout = oraclecallablestatement.getString(2);

            System.out.println("PLSQL deleteRow > Executed Query: "+s);
            System.out.println("PLSQL deleteRow > v_MESSAGE_OUT :  "+messageout);

            //if ("DUPLICATE".equalsIgnoreCase(messageout) || "INVALID_TRX".equalsIgnoreCase(messageout))
            //{
            //   return messageout;
            //}
            OAExceptionUtils.checkErrors (oadbtransactionimpl);
       }

        }
        catch(SQLException sqlexception)
        {
            System.out.println("PLSQL deleteRow is called >3"+sqlexception.getMessage());
            //throw OAException.wrapperException(sqlexception);
        }
        catch(Exception exception)
        {
            System.out.println("PLSQL deleteRow is called > catch"+exception.getMessage());
        }
      return null;

    }







    public String updateRow()
    {
        System.out.println("PLSQL updateRow is called");
          //String messageout = "";
        try
        {
        System.out.println("PLSQL updateRow is called >2");
        OAApplicationModuleImpl oaapplicationmoduleimpl = (OAApplicationModuleImpl)getApplicationModule();
        OverridesAMImpl overheadsam = (OverridesAMImpl)oaapplicationmoduleimpl.getRootApplicationModule();
        OADBTransactionImpl oadbtransactionimpl = (OADBTransactionImpl)overheadsam.getOADBTransaction();
        System.out.println("PLSQL updateRow is called >3");

            System.out.println("PLSQL updateRow > Override ID: "+getOverrideId());
            System.out.println("PLSQL updateRow > getAmountOverride: "+getAmountOverride());
            System.out.println("PLSQL updateRow > getEnabledFlag: "+getEnabledFlag());
            System.out.println("PLSQL updateRow > getComments: "+getComments());
            System.out.println("PLSQL updateRow > getMetroGroupId: "+getMetroGroupId());
            System.out.println("PLSQL updateRow > getMetroId: "     +getMetroId());
            System.out.println("PLSQL updateRow > getJobId: "       +getJobId());
            System.out.println("PLSQL updateRow > getTrvlrFlag: "   +getTrvlrFlag());

       if (getOverrideId() == null)
       {
          System.out.println("PLSQL updateRow > NPE Override ID: "+getOverrideId());
       }
       else
       {
           
           
        String s = "begin PA_RATES_PKG_OVR.override_update_row( "
                      + "  v_OVERRIDE_ID           =>  :1     ,  "
                      + "  v_METRO_GROUP_ID    =>  :2  ,  "
                      + "  v_METRO_ID          =>  :3  ,  "
                      + "  v_JOB_ID            =>  :4  ,  "
                      + "  v_TRVLR_FLAG        =>  :5  ,  "
                      + "     v_AMOUNT_OVERRIDE     =>  :6     ,  "   
                      + "     v_COMMENTS                 =>  :7     ,    "
                      + "     v_ENABLED_FLAG             =>  :8     ,    "
                      + "     v_MESSAGE_OUT           =>  :9        "
                      + "    ); end; ";                     
            OracleCallableStatement oraclecallablestatement = (OracleCallableStatement)oadbtransactionimpl.createCallableStatement(s, 1);
            oraclecallablestatement.setNUMBER(1, getOverrideId());
            oraclecallablestatement.setNUMBER(2, getMetroGroupId());
            oraclecallablestatement.setNUMBER(3, getMetroId());
            oraclecallablestatement.setNUMBER(4, getJobId());
            oraclecallablestatement.setString(5, getTrvlrFlag());
            oraclecallablestatement.setNUMBER(6, getAmountOverride());
            oraclecallablestatement.setString(7, getComments());
            oraclecallablestatement.setString(8, getEnabledFlag());
            ((OracleCallableStatement)oraclecallablestatement).registerOutParameter(9, Types.VARCHAR);

            //oraclecallablestatement.executeUpdate();
            oraclecallablestatement.execute();

            String messageout = null;

            messageout = oraclecallablestatement.getString(9);

            System.out.println("PLSQL updateRow > Executed Query: "+s);
            System.out.println("PLSQL updateRow > v_MESSAGE_OUT :  "+messageout);

            if ("DUPLICATE".equalsIgnoreCase(messageout) || "INVALID_TRX".equalsIgnoreCase(messageout))
            {
               return messageout;
            }
            OAExceptionUtils.checkErrors (oadbtransactionimpl);
       }

        }
        catch(SQLException sqlexception)
        {
            System.out.println("PLSQL updateRow is called >3"+sqlexception.getMessage());
            //throw OAException.wrapperException(sqlexception);
        }
        catch(Exception exception)
        {
            System.out.println("PLSQL updateRow is called > catch"+exception.getMessage());
        }
      return null;

    }


------------------------------
method in am

    public Boolean checkIfRecordExist(Number number)
    {
        System.out.println(" checkIfRecordExist is invoked");
        OADBTransactionImpl oadbtransactionimpl = (OADBTransactionImpl)getOADBTransaction();
        //String s = null;
        String s1 = "select count(1) as counter from PA_LABOR_RATE_OVERRIDES where OVERRIDE_ID= :1 ";
       
        oracle.jbo.ViewObject vo = findViewObject("tempAdjVO");

        if (vo !=null)
         {
          vo.remove();
         }
       
        oracle.jbo.ViewObject viewobject = createViewObjectFromQueryStmt("tempAdjVO", s1);
        viewobject.setWhereClauseParam(0, number);
        Object obj = null;
        viewobject.executeQuery();
        if(viewobject.hasNext())
        {
            System.out.println(" checkIfRecordExist >viewobject.hasNext");
            oracle.jbo.Row row = viewobject.next();
            if(row.getAttribute(0) != null)
              {  //s = row.getAttribute(0).toString();
                try
                {
                int s2 = Integer.parseInt(row.getAttribute(0).toString());
                System.out.println(" checkIfRecordExist >S2"+s2);
                if( s2 >0 )
                {
                  return Boolean.TRUE;
                }
                }
                catch (Exception E2)
                {}
              }
        }
        viewobject.remove();
        return Boolean.FALSE;
    }