In this webinar there will be a brief discussion on what is personalization, customization and extension. Lastly, we will be talking about the role of ADF, which is going to supersede OA Framework in fusion applications.
We are going to talk about OAF. Idea of this webinar is not to cover any particular topic in OAF in depth but to try & cover all aspects involved in OAF programming.
It has become bread & butter for EBS application developers, which earlier was Forms and Reports Runs on Oracle Application Server (Oracle HTTP Server [modified apache] + OC4J [OracleAS Container for J2EE]) - Many applications in E-BS are now completely based on OAF pages. Historical Perfective PL/SQL code would generate HTML tags and eventually HTML page, package named htp was used for this Problems with PL/SQL toolkit Even to do a small label change, you need to change PL/SQL code UI, navigation and business logic resided in PL/SQL code AK Developer Introduced metadata concept, the structure of the page is stored in AK_REGIONS and AK_REGION_ITEMS tables. Metadata in these tables can be configured using AK Developer responsibility screens Different modules started using AK Developer metadata differently HRMS Pages driven by PL/SQL cartridges, but AK metadata used to render the structure iProcurement Pages driven by Java and XML, but XML regions map to AK regions iStore JSP pages internally use AK regions metadata AK Developer Problems Loss of customer applied customizations when oracle patches with new versions of AK_REGIONS were applied OA Framework with AK Developer MVC, with view layer using AK Developer as metadata repository Personalization kept in tables AK_CUSTOMIZATIONS, AK_CUSTOM_REGIONS, AK_CUSTOM_REGION_ITEMS PROBLEMS AK Developer and JDeveloper were not integrated AK Developer supported only few properties Current technology OAF with MDS Metadata defined in JDeveloper in XML files and stored in MDS tables which start with JDR_% AK_% tables data is migrated to JDR_% tables, modules that were migrated from AK to MDS, will have profile option “FND: Migrated To JRAD” set to Y at Application Level Profile option setting (Site, Application, Responsibility, User) Oracle is still good at producing HTML in PL/SQL code, which is evident from HTML DB, now APEX
Let us see what happens when a user, say OPERATIONS, brings up EBS login page, in a browser EBS Server generates a new session, which is not yet stored in the database, and encrypted version of the session id passed back to the browser in a cookie with key-name JSESSIONID For all further communication with EBS server browser uses the JSESSIONID User is queried in FND_USER Entry is made in FND_LOGINS, which has START_TIME Entry is made in ICX_SESSIONS table 'ICX:Session Timeout' profile option determines the length of time (in minutes) of inactivity in a user's session before the session is disabled. Note that disabled does not mean terminated or killed. The user is provided the opportunity to re-authenticate and re-enable their timed-out session. If the re-authentication is successful, the disabled session is re-enabled and no work is lost. Otherwise, the session is terminated without saving pending work. 'ICX: Limit Time' profile option defines the maximum connection time (in hours) for a connection regardless of user activity. If 'ICX:Session Timeout' is set to NULL, then the session will last only as long as 'ICX: Limit Time', regardless of user activity. On our R12.1.1 installation these two profile options had values 30 and 999 respectively. Recommended value are 30 minutes and 4 hours respectively. Table ICX_SESSION has two columns TIME_OUT and LIMIT_TIME where these values are stored for every session.
BC4J (business components for Java) basically meshes SQL database concepts like views, tables and transactions into the java world via View Objects (VOs), Entity Objects (EOs) and Application modules (AMs) AOL/J provides a number of E-Business suite specific services, especially security, so OA Framework pages implement same security model as that of E-Business suite
All BC4J components have XML definition files and backing Java implementation files Every OA Framework page accessed through Oracle applications must have an application module attached to its top-level region This application module is called as root application module Transaction context, JDBC database connection Has business logic It is not advisable to extend AM. You can probably get away with it until seeded page doesn’t have LOV fields, in which case rootAM extension causes session timeout runtime errors One can use nested AMs
View Objects are used to query data from the database Can be a SQL statement or based on Entity Object If region is read-only or LOV regions VOs are contained within AMs and added declaratively to an AM For custom VOs you can 3 options extend rootAM and add to that declaratively instantiate VO in the controller of a page create a nested AM and add to it declaratively Entity Object are responsible for doing insert/update/deletion Should have WHO attributes Set automatically during creation/modification Uses optimistic locking with Object Version Number (create column called ObjectVersionNumber and check “change indicator”)
Every page has a controller and every region underneath can also potentially have a controller Region is nothing but logical grouping of components Convention is to have PG.xml in the end for pages and RN.xml in the end for regions Advantage of creating a region is re-use, we will see one such example when we discuss workflow Make sure, when you extend a controller of the page and override the page, you call base class method View object can be based on EO or on a SQL query, view attributes are mapped to UI elements When adding custom UI elements of the page, it is always a good idea to bind them to existing VO attributes or extended VO attributes, basically doing it in a declarative way When user click “submit” button processFormData() is called PFD transfers values from the screen fields to the view object cache/entity object cache setAttribute() method of all VO rows gets called All these methods are passed 2 parameters, OAPageContext and OAWebBean OAPageContext User’s session related details such as profile options, responsibilities page parameters session parameters APIs to do page navigation Get handle to root AM OAWebBean (type is PageLayoutBean, handle to any java bean on the page)
OA Framework pages and regions are physically stored in MDS repository, even personalizations are stored in MDS repository Changes done by personalization are not wiped out when new patches are applied and so survive patching and upgrades Personalization does not involve any programming Two types of personalizations User level (create custom views on top of the standard results region) available only if Oracle’s product team has enabled this feature Admin/implementer level Personalize Self-Service Defn Should be set to Yes for personalizations to be performed If set to Yes at site level anyone can do personalizations, so in production system it is not set at site-level Disable Self-Service Personal Yes at site level, not only personalizations but extensions will also be disabled
FND: Document Root Path
Controller extension is done by extending controller java class and added via personalization This information again goes in MDS repository
Showing additional information Added column via personalization
Showing additional information Added column via personalization
Implemented using IFrame and not AJAX By using Partial Page Rendering, the entire page is not refreshed. Only the changed portion of the web page will be redrawn. This reduces the network traffic and enhances the user experience. Can be done declaratively or even programmatically SPEL Simplest possible expression language (returns only Boolean values) Self Service personalization, there are two ways to change properties like Rendered or Read Only or Required. Either you hardcode a value of True/False during personalization or you attach a SPEL syntax to these properties via personalization Other use of SPEL is to show/hide some function (enabled via a button) based on user grant The Syntax is ${oa.FunctionSecurity.<FunctionName>} The test will return False if <FunctionName> is granted to the current user/responsibility; otherwise True. In this example, we would set the Read Only property to: ${oa.FunctionSecurity.SUPPLIER_READ_ONLY} If the user is logged in to the BUYER responsibility and has been granted access to this function, OA Framework returns False in the function security test. Read more in Dev Guide & search old thread. It is really unfortunate, it only supports Boolean values
It is a very common use-case to invoke a workflow from OAF page You can write PL/SQL procedure for that which in turn invokes wf_engine package APIs or there are JAVA APIs exposed
OAF is a model-view-controller technology stack that is fully oriented towards E-Business Suite application development. It comprises of underlying technologies like UIX and BC4J, that respectively form core of view and model layers.
Important attributes are ENTITY_NAME and PK1_VALUE Attachment at the line level (Auction Id and Auction Line Number)
Combines best attributes of various ERP product lines into next generation suite with build-in BI & collaboration capabilities
Development Tool OAF JDeveloper with OA Extensions ADF JDeveloper