October 5th, 2011

Fusion Applications Final(ly) no more Beta version!

On 22 may 2011 Oracle released Oracle Fusion Applications R1 Beta version and was available for download from eDelivery. Yesterday (04 october 2011 ) at Oracle Open World 2011, Oracle announced general availibilty of Oracle Fusion Applications. This final version is now also available for download from eDelivery.

So what has changed from Beta to Final?

September 22nd, 2011

Peoplesoft: when will a databasechange be committed?

As a Peoplesoft developer (working with Peopletools-release 8.47.08), I have spent quite some time resolving issues caused by unexpected database-commits. As far a I know there’s no overall topic on this in Peoplebooks, therefore I will share my experience via this blog.

1) Database-updates via DML in a SQLExec-statement (e.g. INSERT INTO PS_TEST_TABLE VALUES(‘value_field_1′,’value_field_2′), triggered via an online component:
Peoplebooks states that DML in a SQLExec-statement is only allowed in FieldChange, SavePreChange, Workflow and SavePostChange events.
There’s a big difference in the outcome per event though; when this statement is put in a FieldChange-event, the DML is committed instantly, and this is something you probably don’t want!

2) Database-updates via DML in a SQLExec-statement (e.g. INSERT INTO PS_TEST_TABLE VALUES(‘value_field_1′,’value_field_2′), triggered via an Application Engine:
These updates are being committed according the AppEngine’s commit-settings.

2) Database-updates via a component interface, triggered via an online component (e.g. component A triggers component interface B_CI, triggering component B):
These updates are being committed as soon as the CI save-method is being invoked from the calling component (e.g. component A).

3) Database-updates via a component interface, triggered via an Application Engine (eg. AppEngine AE_1 triggers component interface B_CI, triggering component B):
These updates are being committed according the AppEngine’s commit-settings.
An exception to this rule I just recently encountered: the GetFile-statement leads to an immediate commit, even when used in an AppEngine-context!

September 20th, 2011

Fusion Applications: Extending the Domain with Oracle Access Manager

In my previous post I described the steps needed to configure Oracle Virtual Directory for virtualizing LDAP. In this post I will describe the steps that need to be taken to configure Oracle Access Manager and Webgate.

Oracle Access Manager allows users to seamlessly gain access to web applications and other IT resources across the enterprise deployments. It provides a centralized and automated single sign-on solution. It also contains an authorization engine, which grants or denies access to particular resources based on properties of the user requesting access as well as based on the environment from which the request is made.

Oracle Access Manager consists of various components including Access Server, Identity Server, WebPass, Policy Manager, WebGates, AccessGates, and Access SDK. The Access Server and Identity Server are the server components necessary to serve user requests for access to enterprise resources. WebGates are web server agents that act as the actual enforcement points for Oracle Access Manager.

September 12th, 2011

Fusion Applications: Extending the Domain with Oracle Virtual Directory

In my previous post, ODSM was configured to manage OID. In the post I will describe the steps you need to take to configure Oracle Virtual Directory (OVD) and create a connection in ODSM to manage OVD.

Oracle Virtual Directory is an LDAP version 3 enabled service that provides virtualized abstraction of one or more enterprise data sources into a single directory view. Oracle Virtual Directory provides the ability to integrate LDAP-aware applications into diverse directory environments while minimizing or eliminating the need to change either the infrastructure or the applications. Oracle Virtual Directory supports a diverse set of clients, such as Web Applications and portals, and it can connect to directories, databases and Web Services.

September 12th, 2011

PeopleSoft Quick-Tip: Find navigationpath of a component

Getting lost while searching for the correct navigation path of a (custom) page or component?
Here is a quick tip to get a a breadcrumbs description of the navigation path of a specific component:


DECLARE

CURSOR c_comp
(p_comp IN VARCHAR2)
IS
SELECT DISTINCT portal_prntobjname
FROM psprsmdefn
WHERE portal_uri_seg2 = p_comp
AND portal_cref_usgt = 'TARG';

CURSOR c_object
( p_comp IN VARCHAR2
, p_object IN VARCHAR2)
IS
SELECT portal_objname
FROM psprsmdefn
WHERE portal_uri_seg2 = p_comp
AND portal_cref_usgt = 'TARG'
AND portal_prntobjname = p_object
AND portal_objname <> 'PORTAL_ROOT_OBJECT';

g_pad VARCHAR2(20000);
g_lan ps_portal_obj_lng.LANGUAGE_CD%TYPE := 'DUT';
g_object psprsmdefn.portal_objname%TYPE := 'RC_CASE_HD_SS_RPT'; --Replace component name...

l_object psprsmdefn.portal_objname%TYPE;

FUNCTION find_portal_name(p_portal IN VARCHAR2)
RETURN VARCHAR2
IS
CURSOR c_object_name
(p_object IN VARCHAR2)
IS
SELECT *
FROM ps_portal_objects
WHERE portal_objname = p_object;
CURSOR c_object_name_lng
( p_object IN VARCHAR2
, p_lan IN VARCHAR2)
IS
SELECT *
FROM ps_portal_obj_lng
WHERE portal_objname = p_object
AND language_cd = p_lan;
l_portal_name ps_portal_objects.portal_label%TYPE;
BEGIN
FOR r_object_name_lng IN c_object_name_lng(p_portal, g_lan)
LOOP
l_portal_name := r_object_name_lng.portal_label;
END LOOP;

IF l_portal_name IS NULL THEN
FOR r_object_name IN c_object_name(p_portal)
LOOP
l_portal_name := r_object_name.portal_label;
END LOOP;
END IF;

RETURN(l_portal_name);
END;

PROCEDURE search_and_find
(p_object IN VARCHAR2)
IS
CURSOR c_object
(p_object IN VARCHAR2)
IS
SELECT DISTINCT portal_objname
, portal_prntobjname
FROM psprsmdefn
WHERE portal_objname = p_object
AND portal_objname <> 'PORTAL_ROOT_OBJECT';
BEGIN
FOR r_object IN c_object(p_object)
LOOP
IF g_pad IS NULL THEN
g_pad := find_portal_name(r_object.portal_objname);
ELSE
g_pad := find_portal_name(r_object.portal_objname) || ' - ' || g_pad;
END IF;

search_and_find(r_object.portal_prntobjname);
END LOOP;

END;
BEGIN

DBMS_OUTPUT.PUT_LINE('Path(s) found for component: ' || g_object || ', Language: ' || g_lan);

FOR r_comp IN c_comp(g_object)
LOOP
g_pad := NULL;

OPEN c_object(g_object, r_comp.portal_prntobjname);
FETCH c_object
INTO l_object;
CLOSE c_object;
search_and_find(l_object);
DBMS_OUTPUT.PUT_LINE('Root - ' || g_pad);
END LOOP;

END;

Just note the following line and replace it with the desired component name

g_object psprsmdefn.portal_objname%TYPE := 'RC_CASE_HD_SS_RPT'; --Replace component name...

Note: We’re using this code for PopelTools 8.47 and it’s working fine. For PeopleSoft 9.1 and above you can use the vanilla feature as described here: Path to in PeopleSoft 9.1 with tools 8.50 and higher