Showing posts with label OAF. Show all posts
Showing posts with label OAF. Show all posts

Sunday, 5 February 2017

Interface vs Data migration vs Data Conversion

Data Migration - is moving required and large volume of data from client's legacy/custom system to new system.

Data Conversion - is converting data from one structural form to another to suit the requirement of the system to which it is migrated.

Interface - are programs for connection between two systems in order to synchronize the data. These can be batch, real-time or manual. Used repeatedly so should be efficient. Can be triggered by an event to run as concurrent program or scheduled to run at certain time.

Standard Import Programs from Oracle - 
1. GL: Journal Import
2. AP: Payables Open Interface 
3. AR: Customer Interface
4. AR: Autoinvoice
5. INV: Item Import

Ways to interface data into Oracle Applications - 
Simple ways - 
1. From Screen manually
2. Oracle Open System Interface
3. Store in database directly
Complex ways - 
4. 3rd Party Softwares for direct DB update
5. Taviz (formerly SmartDB) which is a EAI tool. 
6. Crossroads
7. See beyond (formerly STC)
8. Vitria
9. Data Loader - They have macro enabled spreadsheet kind of tool.
10.More4Apps
11. EDI - Electronic Data Interchange

Most of these are used for master data migration.

Saturday, 4 February 2017

Relation Between Requisition and PO

Relation Between Requisition and PO


SELECT prha.segment1 "REQ NUM", pha.segment1 "PO NUM"
  FROM po_headers_all pha,
       po_distributions_all pda,
       po_req_distributions_all prda,
       po_requisition_lines_all prla,
       po_requisition_headers_all prha
 WHERE     pha.po_header_id = pda.po_header_id
       AND pda.req_distribution_id = prda.distribution_id
       AND prda.requisition_line_id = prla.requisition_line_id
       AND prla.requisition_header_id = prha.requisition_header_id;

Interface Tables of GL, AP, AR,FA,INV,PO,BOMS,WIP,OM

GL INTERFACE TABLES
GL_BUDGET_INTERFACE 
GL_DAILY_RATES_INTERFACE 
GL_IEA_INTERFACE 
GL_INTERFACE 
GL_INTERFACE_CONTROL 
GL_INTERFACE_HISTORY 

AP INTERFACE TABLES
AP_INTERFACE_CONTROLS
AP_INTERFACE_REJECTIONS
AP_INVOICES_INTERFACE
AP_INVOICE_LINES_INTERFACE

AR INTERFACE TABLES
AR_PAYMENTS_INTERFACE_ALL
AR_TAX_INTERFACE
HZ_DQM_SYNC_INTERFACE
HZ_PARTY_INTERFACE
HZ_PARTY_INTERFACE_ERRORS
RA_CUSTOMERS_INTERFACE_ALL
RA_INTERFACE_DISTRIBUTIONS_ALL
RA_INTERFACE_ERRORS_ALL
RA_INTERFACE_LINES_ALL
RA_INTERFACE_SALESCREDITS_ALL

FA INTERFACE TABLES
FA_BUDGET_INTERFACE 
FA_INV_INTERFACE 
FA_PRODUCTION_INTERFACE 
FA_TAX_INTERFACE 

INVENTORY INTERFACE TABLES
MTL_CC_ENTRIES_INTERFACE
MTL_CC_INTERFACE_ERRORS
MTL_CI_INTERFACE
MTL_CI_XREFS_INTERFACE
MTL_COPY_ORG_INTERFACE
MTL_CROSS_REFERENCES_INTERFACE
MTL_DEMAND_INTERFACE
MTL_DESC_ELEM_VAL_INTERFACE
MTL_EAM_ASSET_NUM_INTERFACE
MTL_EAM_ATTR_VAL_INTERFACE
MTL_INTERFACE_ERRORS
MTL_INTERFACE_PROC_CONTROLS
MTL_ITEM_CATEGORIES_INTERFACE
MTL_ITEM_CHILD_INFO_INTERFACE
MTL_ITEM_REVISIONS_INTERFACE
MTL_ITEM_SUB_INVS_INTERFACE
MTL_OBJECT_GENEALOGY_INTERFACE
MTL_RELATED_ITEMS_INTERFACE
MTL_RESERVATIONS_INTERFACE
MTL_RTG_ITEM_REVS_INTERFACE
MTL_SECONDARY_LOCS_INTERFACE
MTL_SERIAL_NUMBERS_INTERFACE
MTL_SO_RMA_INTERFACE
MTL_SYSTEM_ITEMS_INTERFACE
MTL_TRANSACTIONS_INTERFACE
MTL_TRANSACTION_LOTS_INTERFACE
MTL_TXN_COST_DET_INTERFACE

PO INTERFACE TABLES
PO_DISTRIBUTIONS_INTERFACE
PO_HEADERS_INTERFACE
PO_INTERFACE_ERRORS
PO_LINES_INTERFACE
PO_REQUISITIONS_INTERFACE_ALL
PO_REQ_DIST_INTERFACE_ALL
PO_RESCHEDULE_INTERFACE
RCV_HEADERS_INTERFACE
RCV_LOTS_INTERFACE
RCV_SERIALS_INTERFACE
RCV_TRANSACTIONS_INTERFACE


BOM INTERFACE TABLES
BOM_BILL_OF_MTLS_INTERFACE
BOM_INTERFACE_DELETE_GROUPS
BOM_INVENTORY_COMPS_INTERFACE
BOM_OP_RESOURCES_INTERFACE
BOM_OP_ROUTINGS_INTERFACE
BOM_OP_SEQUENCES_INTERFACE
BOM_REF_DESGS_INTERFACE
BOM_SUB_COMPS_INTERFACE
CST_COMP_SNAP_INTERFACE
CST_INTERFACE_ERRORS
CST_ITEM_COSTS_INTERFACE
CST_ITEM_CST_DTLS_INTERFACE
CST_PC_COST_DET_INTERFACE
CST_PC_ITEM_COST_INTERFACE

WIP INTERFACE TABLES
WIP_COST_TXN_INTERFACE
WIP_INTERFACE_ERRORS
WIP_JOB_DTLS_INTERFACE
WIP_JOB_SCHEDULE_INTERFACE
WIP_MOVE_TXN_INTERFACE
WIP_SCHEDULING_INTERFACE
WIP_TXN_INTERFACE_ERRORS TABLE

ORDER MANAGEMENT INTERFACE TABLES
SO_CONFIGURATIONS_INTERFACE
SO_HEADERS_INTERFACE_ALL
SO_HEADER_ATTRIBUTES_INTERFACE
SO_LINES_INTERFACE_ALL
SO_LINE_ATTRIBUTES_INTERFACE
SO_LINE_DETAILS_INTERFACE
SO_PRICE_ADJUSTMENTS_INTERFACE
SO_SALES_CREDITS_INTERFACE

OAF - Useful Page Params

Useful Page Params - 

These APIs provide access to middle-tier objects associated with the current page state. 


OAApplicationModule am = pageContext.getApplicationModule(webBean);

getRootApplicationModule() 
releaseRootApplicationModule() 

OAViewObject vo = (OAViewObject)am.findViewObject("PageInfoVO");


String VOAttributeValue = (String)vo.getCurrentRow().getAttribute("VOAttribute");


Boolean istrue = pageContext.isLovEvent();


String event = pageContext.getParameter("event");


String source = pageContext.getParameter("source");


String event_param = pageContext.getParameter(EVENT_PARAM);


String varValue = pageContext.getSessionValue("VarName");


String varValue = pageContext.getParameter("VarName");


String varValue = pageContext.getTransientSessionValue("VarName");


Request Parameters: 

These methods provide access to the HTTP request parameters, and most of the relevent methods delegate to the equivilent API on the ServletRequest object. However unlike a ServletRequest object, these parameters are mutable. This allows a controller for a particular region to add parameters before another controller is invoked, effectively passing those parameters to the other region. 

getParameterNames() 

getParameter(String name) 
getParameterValues(String name) 
getParameterObject(String name) 
getDecryptedParameter(String paramName) 
putParameter(String name, Object value) 
removeParameter(String name) 
getHttpAgent() 

Form POST Context: 

These methods can be used to determine if the request object contains a form POST and the name of the form. 

isFormSubmission() 

getFormName() 

Named Data Objects 
DataObjects specify the interface that data sources used during rendering need to implement. Within the OA Framework, DataObjects are typically created around BC4J view objects. The APIs provide access to the DataObject dictionary maintained by the OA Framework. Additional DataObjects can be created for custom data sources. See DataBoundValue for additional information about binding custom data sources to UI beans. 

getNamedDataObject(String name) 

getDataObjectNames() 
putNamedDataObject(String name, DataObject dataObject) 
removeNamedDataObject(String name) 
getDataObjectDictionary() 

Personalization: 

These methods provide access to various aspects of personalizations and the OA personalization UI. 

getCustomizationHeaderTexts(OAWebBean webBean) 

getCustomizationHeaderTexts(String regionCode, String regionApplId) 
setCustomizationHeaderTexts(OAWebBean webBean, DataObject customizationHeaderTexts) 
setCustomizationHeaderTexts(String regionCode, String regionApplId, DataObject customizationHeaderTexts) 
getPortletCustomizationCriteria(OATableBean table) 
getPortletCustomizationNonViewAttrCriteria(OATableBean table) 
getPersonalizedDisplayedItems(OAWebBean parentBean, String viewId) 

OAMessageLovInputBean LovBean = 

(OAMessageLovInputBean)webBean.findChildRecursive("LovInputOnPage");
  
OADescriptiveFlexBean DFFBean = 
(OADescriptiveFlexBean)webBean.findChildRecursive("DFFObjectOnPage");
  
OAMessageTextInputBean inputbean = 
(OAMessageTextInputBean)webBean.findChildRecursive("TextInputOnPage"); 

OAImageBean imagebean =

(OAImageBean)webBean.findChildRecursive("ImageItemId");  

Setting Properties for Input Text Bean -


inputbean.setReadOnly(false);

inputbean.setValue(pageContext, null); 

OAF - Dynamic Event Setting

Dynamically Setting Event on Input Text Bean

Partial Action

if (inputbean != null) {
    
FireAction firePartialAction = new FirePartialAction("InputAction");
    buttonbean.setAttributeValue(PRIMARY_CLIENT_ACTION_ATTR,firePartialAction);

    oracle.cabo.ui.action.FireAction FireActionB = new oracle.cabo.ui.action.FireAction();
    FireActionB.setEvent("InputAction");
    FireActionB.setUnvalidated(true); // Disabling Validation on Page
    inputbean.setPrimaryClientAction(FireActionB);
}

Action with Validations disabled

if (inputbean != null) {

    oracle.cabo.ui.action.FireAction FireActionB = new oracle.cabo.ui.action.FireAction();
    FireActionB.setEvent("InputAction");
    FireActionB.setUnvalidated(true); // Disabling Validation on Page
    inputbean.setPrimaryClientAction(FireActionB);
}

Disbaling validation in LOV Bean -

LovBean.setUnvalidated(true);

Setting Properties for DFF Bean field -

DFFBean.processFlex(pageContext);
Enumeration enu = null;
for (enu = DFFBean.getChildNames(); enu.hasMoreElements(); )
{
 String aParamName = (String)enu.nextElement();
 pageContext.writeDiagnostics(this, "DFF Field : " +aParamName, 1);
 
 OAWebBean dffbeans = DFFBean.findChildRecursive(aParamName);
 if ((dffbeans != null) && 
 (dffbeans.getLocalName().equals("messageLovInput")) && 
 (dffbeans.getLabel().equals("FieldPrompt")))
 {
dffbeans.setRendered(false); //Set Properties Values
 }
}


Dynamically Setting Event on ImageBean -

Partial Action - No Submit and Validations

if (imagebean != null) {    

FireAction firePartialAction = new FirePartialAction("ImageAction");
imagebean.setAttributeValue(PRIMARY_CLIENT_ACTION_ATTR,firePartialAction);

}

Full Submit page with Validations on Image Bean

if (imagebean != null) {    

imagebean.setFireActionForSubmit("ImageAction",null,null,true);

}

OAF - Manipulating the Where Clause of of VO Object


v_ViewObjectImpl.getWhereClause();


v_StringBuffer = v_StringBuffer.append(v_ViewObjectImpl.getWhereClause());


Object[] bindParamList = localOAViewObjectImpl.getWhereClauseParams();


localOAViewObjectImpl.setWhereClauseParams(null);


for (int i = 0, j = bindParamList.length; i < j - 1; i++)

{
bindParamName = bindParamList[i];
v_ViewObjectImpl.setWhereClauseParam(i, bindParamList[i]);
}

OAF - Page Forwarding in OAF

Client and server side redirects/forwards: 
These APIs can be used to be forward requests to other servlets to JSPs on the server side. 

pageContext.forwardImmediatelyToCurrentPage(HashMap params, boolean retainAM, String addBreadCrumb);;


Get URL to Current Page with All Params


String currentURL = pageContext.getCurrentUrl(); 


Use Above URL to Revisit the Above page in previous state if AM was retained


pageContext.sendRedirect(currentURL);


getCurrentUrlForRedirect(); 


getForwardURL(); 


forwardImmediately(String functionName, byte menuContextAction, String menuName, HashMap params, boolean retainAM, String addBreadCrumb);



setForwardURL(String url, String functionName, byte menuContextAction, String menuName, HashMap parameters, boolean retainAM, String addBreadCrumb, byte messagingLevel) 


setForwardURL(String functionName, byte menuContextAction, String menuName, HashMap parameters, boolean retainAM, String addBreadCrumb, byte messagingLevel) 


setForwardURLToCurrentPage(HashMap params, boolean retainAM, String addBreadCrumb, byte messagingLevel) 


setRedirectUrlAfterPrintable(String refreshUrl); 

OAF - Prepared and Callable Statement

CALLABLE STATEMENT

OADBTransaction txn = am.getOADBTransaction();  

                
CallableStatement callableStatement =  
txn.createCallableStatement("begin package_name.procedure_name(:1, :2, :3); end;",OADBTransaction.DEFAULT);  

try {  

callableStatement.setInt(1, param_id);
callableStatement.registerOutParameter(2,OracleTypes.VARCHAR); 
callableStatement.registerOutParameter(3,OracleTypes.ARRAY,"APPS.CUSTTYPEOBJECT");

callableStatement.execute();  


String v_result = callableStatement.getString(2); 

ARRAY arr = ((OracleCallableStatement)callableStatement).getARRAY(3);
String[] recievedArray = (String[])(arr.getArray());
              
for(int i=0;i<recievedArray.length;i++)
System.out.println("element" + i + ":" + recievedArray[i] + "\n");
              
ArrayList  errMsg = new ArrayList(recievedArray.length);

for(int i=0;i<recievedArray.length;i++)
errMsg.add(new OAException(recievedArray[i], OAException.INFORMATION));

if (errMsg.size() > 0)

{
OAException.raiseBundledOAException(errMsg);
}

callableStatement.close();  

} catch (SQLException sqle) {  
  if (pageContext.isLoggingEnabled(2)) {
 pageContext.writeDiagnostics((Object)this, "Exception Occcured", 2);
  } 
}

PREPARED STATEMENT


String Query = 

"SELECT NVL2(FFVT.DESCRIPTION,FFVT.DESCRIPTION||'-'||to_char(sysdate,'yyyy'),FFVT.DESCRIPTION) CUSTOM_VAL\n" + 
"FROM FND_FLEX_VALUE_SETS FFVS ,\n" + 
"  FND_FLEX_VALUES FFV,FND_FLEX_VALUES_TL FFVT\n" + 
"WHERE FFVS.FLEX_VALUE_SET_ID          = FFV.FLEX_VALUE_SET_ID\n" + 
"AND FFV.FLEX_VALUE_ID = FFVT.FLEX_VALUE_ID\n" + 
"AND FFVT.LANGUAGE        = 'US'\n" + 
"AND FFV.ENABLED_FLAG                  = 'Y'\n" + 
"AND NVL(FFV.END_DATE_ACTIVE,SYSDATE) >=SYSDATE\n" + 
"AND FFVS.FLEX_VALUE_SET_NAME          = 'CUST_VALUE_SET'\n" + 
"AND FFV.FLEX_VALUE=:1";

try

{
conn = am.getOADBTransaction().getJdbcConnection();
ps = conn.prepareStatement(Query);
ps.setString(1, ParamVal);
for (rs = ps.executeQuery(); rs.next(); pageContext.writeDiagnostics(this, "Message", 2))
{
invoicePrifixVal = rs.getString("CUSTOM_VAL");
}
rs.close();
ps.close();
} catch (Exception e)
{
throw new OAException(e.getMessage());
}

OAF - Useful Profiles - Daily purpose

Personalize Self-Service Defn - To enable the personalization link on every page

FND: Personalization Region Link Enabled - To enable the personalization link on every region

FND: Diagnostics - To enable diagnostics on OAF page

FND: Personalization Seeding Mode - To allow edition of custom personalization

Disable Self-Service Personal - For disabling all personalization's

OAF - Throwing Individual or Multiple Messages

OAException message = new OAException("APP_CODE", "XXCUST_ORACLE_MESSAGE", null ,OAException.ERROR, null);
throw message;

OAF - Deleting record in Advance Table using Row Reference

if("deleteInvDist".equals(string))  //EVENT is deleteInvDist
{           
String rowRef = pageContext.getParameter(OAWebBeanConstants.EVENT_SOURCE_ROW_REFERENCE);
OARow row = (OARow)am.findRowByRef(rowRef);
row.remove();
am.invokeMethod("commit"); // Perform commit in AM Impl
}

Oracle Apps - Technical Interview Questions

Question: What is the difference between Organization_id and Org_id ?
Answer: Oraganization_id comes under Inventory whereas org_id comes under Operating Unit Level.

Question: What is a FlexField ? What are Descriptive and Key Flexfields ?
Answer: A flexfield is made up of sub-fields or segments.. A flexfield appears on our form as a pop-up window that contains a prompt for each segment.Each segment has a name and a set of valid values..

Two types of Flex field:

Key Flexfield: Key flexfield are flexible enough to let any organization use the code scheme they want without programming. Key flexfield can be used to represent codes that is made up of meaningful segment to identify GL a/c Part no. and other business entities.Oracle app store these codes in key flexfields.

Descriptive Flexfield: They provide customizable "expansion space" on ur forms. You can use desc flexfields to tract additional information important and unique to ur business that would not otherwise be captured by the form.

Question: What are _ALL tables in Oracle Apps?
Answer: _ALL tables in oracle applications gives the info about Multiple organizations info about these tables

Question: What Credit memo / Debit Memo?
Answer: If the original transactions are posted into GL, then the transactions can not be modified in the respective sub-ledgers. If you want to modify the account balances for some reasons, then you have to enter the debit memo or credit memo to adjust the account balances previously entered.

Friday, 10 June 2016

OAF - Topics for competency building

Below is the list of topics which can be covered to build strong competency in OAF –

1.                   Result page with jump ahead LOV (like 20 of 200 records)
2.                   Advance table
3.                   Show/Hide function
4.                   Select All - checkbox  --
5.                   Different ways of passing Parameters
6.                   PPR functionality
7.                   Navigator search - type ahead search
8.                   Handling Single or Multiple Exceptions
9.                   Displaying error messages in Popup windows --
10.               Tree Table --
11.               Drop-down Menu --
12.               External LOVs
13.               Poplist
14.               Attachments
15.               Inline add or view attachment Window
16.               Print Attachment dialog window
17.               Export Result table
18.               Print Result table
19.               Emailing
20.               Embedded OBIEE Report
21.               Personalization, Extension, Substitutions
22.               New VO Creation through personalization
23.               Entity - Defaulting Primary Key
24.               VO – Initializing Query
25.               Implement FTP page for BCT
26.               OAF Page Internationalization
27.               Web ADI Customization
28.               Java Concurrent program for upload file from Application server to Database server.
29.               View Object and Controller extension.
30.               Dependent list of values.
31.               Multi select list of value.
32.               Use Bound values.
33.               OAF Integration with XML publisher
34.               Prepare OAF component installation script.
35.               Create printable page in OAF.
36.               Generate flat files from application and upload flat file through OAF pages.
37.               Master detail insert page.
38.               Master detail search page.
39.               Attach custom CSS with OAF beans
40.               OAF page debugging.
41.               Create processing page.
42.               ** Range based list of values.
43.               ** Implement Bilingual OAF pages
44.               ** Calling SRS window through OAF Page
45.               ** Switcher functionality
46.               ** Navigator tree
47.               **Inline Popup Windows  -- http://oracleanil.blogspot.in/2010/09/popup-in-oaf-r1212-part-ii.html
48.               **Call forms from OAF pages.
49.               **Dynamically creation of Application module and View Object inside controller.
50.               **Add dynamic attribute in view object.

Sunday, 5 June 2016

OAF - GL Diistribution DFF field on OAF page

This post will details the steps required for enabling the functionality of GL DFF as below - 



First step, create a field on OAF page with item type as 'Flex' in a table or region. Attributes of this Flex item needs to be set as below - 




Segment List property value need to setup as below - 



** Here ACCOUNTING_FLEXFIELD is the name of the accounting flexfield defined for GL and can be obtained using below query - 

select id_flex_structure_code, id_flex_code from fnd_id_flex_structures where id_flex_code = 'GL#';

Above field is created in a Advanced table. If you are using a normal OAF table then you will need to populate the VO Instance name of the flex item as well.


Second step, which needs to be performed is adding following code in the processRequest method of the Controller java file - 

OAApplicationModule am = pageContext.getApplicationModule(webBean);

OAKeyFlexBean kffId = (OAKeyFlexBean)webBean.findIndexedChildRecursive("AccountCol");

// Set the code combination lov
kffId.useCodeCombinationLOV(true);

// Set the structure code for the item key flex
kffId.setStructureCode("ACCOUNTING_FLEXFIELD");

// Set the attribute name to the item
kffId.setCCIDAttributeName("DistCodeCombinationId");

Performing the above mentioned steps will help meet the requirement of creating and displaying the GL DFF field on an OAF page.

Tuesday, 8 March 2016

OAF - Redirecting to a sub tab

Redirecting to a sub tab in OAF page by passing the SubTab id in hashmap:

HashMap hashmap = new HashMap(2); hashmap.put("porMode", "display"); 

hashmap.put("OA_SubTabIdx", 1); 

pageContext.forwardImmediately("ICX_POR_CHECKOUT_LINES", (byte)0, null, hashmap, true, null); 

OAF - How to Display multiple errors?

Sometimes you have to show all the error messages at one shot,instead of showing the error messages one by one. In that case, we have to use bundled exception to show multiple error message. Below are the steps:

1. Add the import statements:

import com.sun.java.util.collections.ArrayList;
import oracle.apps.fnd.framework.OAException;
import oracle.apps.fnd.common.MessageToken;

2. Declare an array list.

ArrayList errorMsg= new ArrayList();
3. Raise OAException.
for (int i=0; i< hMember.size(); i++)
{
MessageToken[] token = {
new MessageToken("USER", getOADBTransaction().getUserName()),
new MessageToken("NUM",hMember.getChildNumber())
};
errorMsg.add(new OAException((String)(getOADBTransaction().getMessage("XXCH","XXCH_NO_ACCESS",token))));
}
OAException.raiseBundledOAException(errorMsg);

OAF - Dynamically assigning VO and VO attributes

Below code sample search the component on a page. Replaces the default VO with new/custom VO. Then maps the VO attribute to the identified component.

OAMessageStyledTextBean oamessagestyledtextbean = (OAMessageStyledTextBean)oawebbean.findIndexedChildRecursive("ProjectNum");

oamessagestyledtextbean.setViewUsageName("VOInstanceName");

oaformvaluebean4.setViewAttributeName("XXProjectNum");

OAF - Copying or Duplicating a records within a VO

Below code copies the row from AssignEOVO with primary id as AssignId and EmpId and creates a new record as duplicate: 

try
{
AssignEOVOImpl VO1 = (AssignEOVOImpl)getAssignEOVO1();  
VO1.initQuery(AssignId,EmpId);   //Query the record which needs to be duplicated.
Row[] currentRow = VO1.getFilteredRows("AssignId", AssignId); //Get Queried records in a Array of Row
//System.out.println("currentRow.length" + currentRow.length);
AssignEOVORowImpl copyRow = (AssignEOVORowImpl)currentRow[0];
//System.out.println("copyRow.getEmpId" + copyRow.getEmpId());
//System.out.println("copyRow.getEmpNumber()" + copyRow.getEmpNumber());
AssignEOVOImpl VO= getAssignEOVO1();            
if(!VO.isPreparedForExecution()) 
{
VO.executeQuery();
}            
AssignEOVORowImpl row = (AssignEOVORowImpl)VO.createRow();
VO.insertRow(row);
row.setEmpId(copyRow.getEmpId());
row.setEmpNumber(copyRow.getEmpNumber());
}catch(Exception jbo)
{  
throw new OAException("Exception.." + jbo,OAException.ERROR);
}

Sunday, 6 December 2015

OAF Interview Questions

Question: In which method of Controller will you hide that bean/field/button/region programmatically?   1.      processRequest
   2.      processFormRequest
   3.      Both processRequest and processFormRequest
Answer: processRequest


Question: On any given OA Framework page, what is the sequence in which these methods will fire in a Controller?
    processFormData
    processRequest
    processFormRequest
Answer: processRequest
processFormData
processFormRequest


Question: What are the steps to embed a custom region into a standard OA Framework page?
Answer: 1. Choose personalize link on the page that needs to embed the OA custom region.
2. Search for Region where you want to extend.
3. Create an item of type region and label it to extend the Custom Page.

Question: What are different methodologies that you can consider to default value into a field?
Answer: 1. You could provide default values on the page/ region that you have developed.
2. You could default a value on the ViewObject definition for the attribute. You would do this if you wish to provide some value that is specific to a VO and not to an EO.
3. You could default a value on the Entity Object definition for the attribute if this is common to all VO's that are based on it.
4. You could modify the default value by applying personalization.


Question: What is the sequence of Personalizations override?
Responsibility Level
Site Level
Function Level
Organization Level
User Level
Answer:
Function Level
Site Level
Organizat ion Level
Responsib ility Level
User Level

That is if a personalization is done at Function Level and User Level. User Level personalization will take effect on the screen.


Question: In Oracle OA Framework, is the MDS page/document definition stored in database or in the file system?
Answer: The MDS document details are loaded into database, in the following sets of tables.
JDR_ATTRIBUTES
JDR_ATTRIBUTES_TRANS
JDR_COMPONENTS
JDR_PATHS
The Document is loaded via XMLImporter. 


Question: What is SPEL?
Answer: Simplest Possible Expression Language
It is an expression that will either return TRUE or FALSE.

Question: Properties that can be modified at run time using personalizations ( via SPEL) are :-
Answer: Rendered - To conditionally make a field in OA Framework hidden/displayed
Read Only - To conditionally make a enterable or non-enterable
Required - To make a field mandatory or non-mandatory
Enabled - To conditionally enable or disable that field


Question: What is the syntax of SPEL?
Answer:
${oa.FunctionSecurity.VARIABLE}


Question: What are the different methods for passing parameters?
Answer: 1. Tokens - e.g. vname={@AttributeName}
2. Hash Maps - e.g. HashMap variablename=new HashMap();
variablename.add("ParameterName",ParameterValue);
3. ThroughSession - e.g. pageContext.putSessionvalue("ParameterName",ParameterValue);


Question: What are the different token types used to pass parameter values?

Answer: {!Param} – encrypts the values while leaving {!} in URL. OAPageContext.getParameter is used to return the decrypted value.
{@Param} – encodes the attribute value while leaving {@} in URL. . OAPageContext.getParameter is used to return the decoded value.
{$Param} – plain token substitution (no encoding or encrytion). You must ensure that a substituted  value does not break the URL.

Question:
What is the property to set for an AM so that the transaction state is maintained across pages?
Answer: RETENTION_LEVEL property is set to value MANAGE_STATE of AM. 


Question: What is the purpose of retainAM flag in OAPageContext forwarding? What is the default behaviour?

Answer: retainAM=N releases all AMs held for the user during OAPageContext forwarding. While retainAM=Y tells framework to maintain all AMs for the user.

retainAM=N is the default behaviour.

Question: How do you move personalization from one machine to another?
Answer: Using the functional administrator responsibilty the xml file can be downloaded, this file contains the required personalizations done on a particular page. The same can be uploaded in different instance using XML importer utility.


Question: Can you de-activate Personalization’s against individual page selectively?

Answer: You can de-activate personalization s against individual pages selectively by clicking on button "Manage Personalization" in Functional Administrator responsibility.

Question: In OA Framework Self-Service screen, you wish to disable a tab. How will you do it?
Answer: The tabs on an OA Framework page are just like Sub-Menus. By entering menu exclusion against the responsibility, you can remove the tab from self-service page.