Nederlandse profiel optie namen self service personalisatie

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 nameValue

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

SLS enabled in R12.1.3 to R12.2 Upgrade

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

Vision in your VM stopping

If you have your own EBS R12 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 !

WSIWYG Personalisations in R12.2

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

Common errors in SOA Gateway Service Invocation

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.

Read all files

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 )';
/

Signon password customization

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;</code>

/**

* 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&lt;this.errorMessages.size() &amp;&amp; i&lt;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&lt;password.length();i++)

{

//get character at position.

char c = password.charAt(i);

if(!Character.isLetterOrDigit(c))

{

if(!containsNonAlphaNumeric)

{

containsNonAlphaNumeric = true;

}

}

else

{

if(!containsUpperCase &amp;&amp; Character.isUpperCase(c))

{

containsUpperCase = true;

}

else if(!containsLowerCase &amp;&amp; Character.isLowerCase(c))

{

containsLowerCase = true;

}

else if(!containsNumeric &amp;&amp; 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 &amp;&amp; containsLowerCase &amp;&amp; containsNumeric &amp;&amp; containsNonAlphaNumeric)

{

result = true;

}

return result;

}

}

/

EXIT