Oracle E-Business Suite OAF personalise wysiwyg workbench

In release 12.2.7 of Oracle E-Business suite a new feature has been added which is the wysiwyg version of personalising OAF pages.

The Oracle application framework was always able to personalise using the personalisation links. Now however an in-place editor has been added that lets you change things around in a workbench type viewable editor.

Use the following new profiles to set this up :

  • FND: Enable Personalization Workbench    (English)
  • FND: Personalisatieworkbench activeren     (Dutch)

Bear in mind that it is an Oracle v1.0 version so lots of stuff doesn’t quite work as expected

See the Oracle documentation for more information and images like the one below 

(c) Oracle

R12.1 (or earlier) upgrade to R12.2 leaves SLS Subledger Security with ORA-28113 Errors (policy predicate has error)

If you upgrade from R12.1 (or earlier) to R12.2 you will be thrown in the world of editionable objects for “Online Patching”.

If you have SLS (Subledger Security) enabled on some tables in your R12.1 environment you will find that after the upgrade these policies have been duplicated to the editionable objects.

For example if in R12.1 you have 2 policies defined on the following tables

  • PO_REQUISITION_HEADERS_ALL
  • PO_HEADERS_ALL

you will find that after performing the upgrade to R12.2 you will all of a sudden have 4 policies, specifically on :

  • PO_REQUISITION_HEADERS_ALL
  • PO_HEADERS_ALL
  • PO_REQUISITION_HEADERS_ALL#
  • PO_HEADERS_ALL#

and any selects or operations in screens on po_requisition_headers_all or po_headers_all will fail with an

ORA-028113 : policy predicate has error

this because the SLS generated functions ( something like IGI_SLS_1_FUN ) contains a reference to a rowid that does not exist.

To fix this problem just drop the incorrect policies.

for example :

BEGIN 
  DBMS_RLS.DROP_POLICY('PO', 'PO_REQUISITION_HEADERS_ALL#', 'IGI_SLS_21_POL'); 
  DBMS_RLS.DROP_POLICY('PO', 'PO_HEADERS_ALL#', 'IGI_SLS_1_POL'); 
END;

If you want you can rerun the SLS security concurrent program but it is not needed.

concurrent program : Subledger Security – Apply Security with parameter REFRESH run from under System administrator

All new SLS security rules made in R12.2 are by default not created on the editionable object.

Hope it helps !

Reuben

EBS R12.2.4 Single Instance Vision – Change IP address

If you have your own EBS R12.2 Single Instance of a Vision system running as a VM in VirtualBox it might happen that you are confronted with the situation that things “suddenly” stop working. In my case this was due to a factory reset of my router which leaded to a new IP address of my instance. First sign of this was that the DB startup gives a few warnings but still actually says it started up fine. Then starting the application services using startvisionapps.sh will fail giving an “instance not started” or “database user password invalid” error.

To fix this you simply just need to run one single file. It took me a while to find so it might help you speed your recovery from this situation.

  1. Shutdown your DB process.
  2. Run the script : /u01/install/scripts/configdhcp.sh
  3. Start the DB process: /u01/install/VISION/scripts/startvisiondb.sh
  4. Start the application services: /u01/install/VISION/scripts/startvisionapps.sh

And away you go !

How to Enable Personalization link for OAF Pages; Self service personaliseren met Nederlandse taal settings

If you are like me and you keep forgetting the dutch profile names for personalizing the self service screens, use this as a handy reference.

Als je net als ik altijd de nederlandse profiel namen vergeet om de self service schermen aan te passen dan zijn hier nog een keer de namen.

Personaliseren Engelse profiel opties

Profile Name                                    Value
FND: Personalization Region Link Enabled        Yes
Personalize Self-Service Defn                   Yes
Disable Self-Service Personal                   No

Personaliseren Nederlandse profiel opties

Profiel optie                                   Waarde
FND: Koppeling voor personalisatieregio actief  Ja
Selfservicedefinities personaliseren            Ja
Selfservicepersonalisatie deactiveren           Nee

R12 Core Development and Extension Cookbook

I just found the book I helped to create by reviewing all contents for validity and correctness  on Google Books. I guess you can read it for free now ! Great stuff if you are starting in this field, lots of information and useful exercises.

[blockquote text=’Oracle E-Business Suite R12 Core Development and Extension Cookbook’ text_color=’#de8181′ width=’80’ line_height=’undefined’ background_color=” border_color=” show_quote_icon=’no’ quote_icon_color=”][4842EN_Oracle E-Business Suite R12 Core Developement and Extension Cookbook_FrontCover]1 Find the book here Google Books Buy the the paper version here

Troubleshooting Service Invocation

1. Before usage of a Oracle E-Business Suite (EBS) Integrated SOA Gateway (ISG) service, it should be generated and deployed.
2.
Common errors in SOA Gateway Service Invocations are:-

Fault from server : Missing wsse:Security in SOAP Header. Cause: This error is thrown by server if SOAP request does not contain a Web Service Security Header in SOAPHeader section of SOAPEnvelope. Resolution: Pass a valid Web Service Security Header, containing valid Username token, in SOAPHeader.

Fault from server : Policy requires authentication token. Cause: This error is thrown by server when either Web Service Security Username Token in Security header is missing or is invalid. Resolution: Pass a valid Web Service Security Username Token in Security header.

Fault from server : The security token could not be authenticated or authorized Cause: This error is thrown by server when username or(/and) password in Web Service Security Username Token is invalid. Resolution: Pass valid oracle applications username and password in Web Service Security Username Token.

Fault from server : User not authorized to execute service Cause: This error is thrown by server when user given in Web Service Security Username Token is not authorized to execute the Web Service function being invoked in SOAP Request. Resolution: Create grant at user, role or global level from Integration Repository UI to authorize the the user to execute Web Service function. Clear cache from Functional Administrator Responsibility.

Fault from server : Responsibility key is not valid Cause: This error is thrown by server when Responsibility Key passed in Responsibility Header in SOAHeader is invalid. Resolution: Server expects a valid Responsibility Key in Responsibility Header in SOAHeader. Use this query to find valid Responsibility Keys for a particular user:- Select resp.RESPONSIBILITY_KEY, grp.SECURITY_GROUP_KEY, APP.APPLICATION_SHORT_NAME From FND_USER_RESP_GROUPS furg, FND_USER usr, fnd_responsibility_vl resp,FND_SECURITY_GROUPS grp,FND_APPLICATION APP where furg.user_id=usr.user_id and furg.RESPONSIBILITY_ID=resp.RESPONSIBILITY_ID and furg.SECURITY_GROUP_ID=grp.SECURITY_GROUP_ID and furg.RESPONSIBILITY_APPLICATION_ID=APP.APPLICATION_ID and usr.user_name=

Fault from server: Responsibility Application Short name is not valid. Cause: This error is thrown by server when Application Short name in RespApplication Header in SOAHeader is invalid. Resolution: Server expects a valid Application short name in RespApplication Header in SOAHeader. Use query given above to find a valid Application short name.

Fault from server: Security Group Key is not valid. Cause: This error is thrown by server when Security Group Key in SecurityGroup Header in SOAHeader is invalid. Resolution: Server expects a valid Security Group Key in SecurityGroup Header in SOAHeader. Use query given above to find a valid Security Group Key.

Fault from server: NLS Language is not valid. Cause: This error is thrown by server when NLS Language in NLSLanguage Header in SOAHeader is invalid. Resolution: Server expects a valid NLSLanguage value in NLSLanguage Header in SOAHeader. Use the following query to find a valid NLSLanguage: SELECT NLS_LANGUAGE FROM   FND_LANGUAGES WHERE  INSTALLED_FLAG in (‘B’,’I’);

Fault from server: Service is not deployed. Cause: This error is thrown by server when invoked service is generated but not deployed. Resolution: Deploy this service from Integration Repository UI.

Fault from server: Error occured while service was processing. Cause: This error is thrown by server when a internal error happens in Service Provider. Resolution: View SOAP Response via SOA Monitor UI. It has a error trace of the error happened in server. This should give a fair idea of what went wrong.    

Get a file list from unix system

Follow these steps to make a procedure that reads all files on disk. Handy if you need the concurrent manager to process all files in a certain folder

GRANT JAVAUSERPRIV to apps;

create global temporary table DIR_LIST
( filename varchar2(255) )
on commit delete rows
/

create or replace and compile java source named "DirList"
as
import java.io.*;
import java.sql.*;
public class DirList
{
  public static void getList(String directory)
  throws SQLException
{
File path = new File( directory );
String[] list = path.list();
String element;
for(int i = 0; i < list.length; i++)
{
element = list[i];
#sql { INSERT INTO DIR_LIST (FILENAME)
VALUES (:element) };
} } }
/

create or replace
procedure get_dir_list( p_directory in varchar2 )
as language java
name 'DirList.getList( java.lang.String )';
/

Change password validation

This is and example file on how you can implement (Signon Password Custom) Profile Option in Oracle E-Business Suite (using note 393552.1)

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "AppsPasswordValidationCUS" AS
package xxx;
import oracle.apps.fnd.security.PasswordValidation;

/**
* Custom password validation.
*/
public class AppsPasswordValidationCUS implements PasswordValidation
{
/**
* toString.
* @return String classname@hashcode.
*/
public String toString()
{
return getClass().toString()+”@”+hashCode();
}
private java.util.ArrayList errorMessages = new java.util.ArrayList();
/**
* Constructor.
*/
public AppsPasswordValidationCUS()
{
}
/**
* getErrorStackApplicationName.
* @return String “FND”.
*/
public String getErrorStackApplicationName()
{
return “FND”;
}
/**
* getErrorStackMessageName.
* @return String Contains all error messages.
*/
public String getErrorStackMessageName()
{
StringBuffer sb = new StringBuffer();
for(int i=0;(i<this.errorMessages.size() && i<1);i++)
{
sb.append((String) errorMessages.get(i));
sb.append(“;”);
}
return sb.toString();
}
/**
* main.
* @param args String[] arguments.
*/
public static void main(String[] args)
{
args.toString();
AppsPasswordValidationCUS validator = new AppsPasswordValidationCUS();
System.out.println(validator.validate(“USERNAME”, “Password0!”));
System.out.println(validator.getErrorStackMessageName());
}

/**
* validate.
* @param username String username.
* @param password String password.
* @return boolean True if password matches criteria. False otherwise.
*/
public boolean validate(String username, String password)
{
username.toString();
errorMessages = new java.util.ArrayList();
boolean result = false;
boolean containsUpperCase = false;
boolean containsLowerCase = false;
boolean containsNumeric = false;
boolean containsNonAlphaNumeric = false;
//check all characters of the string.
for(int i=0;i<password.length();i++)
{
//get character at position.
char c = password.charAt(i);
if(!Character.isLetterOrDigit(c))
{
if(!containsNonAlphaNumeric)
{
containsNonAlphaNumeric = true;
}
}
else
{
if(!containsUpperCase && Character.isUpperCase(c))
{
containsUpperCase = true;
}
else if(!containsLowerCase && Character.isLowerCase(c))
{
containsLowerCase = true;
}
else if(!containsNumeric && Character.isDigit(c))
{
containsNumeric = true;
}
}
}
if(!containsUpperCase)
{
this.errorMessages.add(“PASSWORD-MISSING-UPPERCASE”);
}
if(!containsLowerCase)
{
this.errorMessages.add(“PASSWORD-MISSING-LOWERCASE”);
}
if(!containsNumeric)
{
this.errorMessages.add(“PASSWORD-MISSING-NUMERIC”);
}
if(!containsNonAlphaNumeric)
{
this.errorMessages.add(“MISSING-NON-ALPHANUMERIC”);
}
if(containsUpperCase && containsLowerCase && containsNumeric && containsNonAlphaNumeric)
{
result = true;
}
return result;
}
}
/
EXIT