Quantcast
Channel: Oracle Maniacs' Notes » Abhijit Ray
Viewing all 128 articles
Browse latest View live

Custom Form error after upgrading to Oracle r12

$
0
0

After upgrading an Oracle Apps 11i instance to Oracle Apps r12 I tried to access a custom form. On clicking on the form function I got an error, Function not available to this responsibility. Change responsibilities or contact your System Administrator.

This error only occurs on custom forms whereas it does not throw any error for standard forms.

I checked the form related AOL objects as below.

Responsibility: Order Management Super User

Menu: ONT_SUPER_USER

Function: *** Notebook

Form: **** Notebook

The AOL objects seem to be absolutely ok.

What is the reason for this error?

The reason for this issue is that and entry is missing for the CUSTOM_TOP in default.env file. In R12 the CUSTOM_TOP should be defined in default.env located at $INST_TOP/ora/10.1.2/forms/server directory.

Solution

1. Login to Linux server with APPLMGR manager user access.

2. Modify default.env file.

Ensure that your CUSTOM_TOP’s are registered in the default.env file.

This means there should be an entry for environment variable CUSTOM_TOP (which contains physical path to your custom directory). default.env file is present at,

$INST_TOP/ora/10.1.2/forms/server directory, in Unix.

For Example:

APPL_TOP=/home/applmgr/PROD/apps/apps_st/appl

CUSTOM_TOP=/home/applmgr/PROD/apps/apps_st/custom

3. Restart the middle tier services.

4. Retest the issue.

The solution is illustrated below

Step 1: Modify default.env

Go to the following directory, $INST_TOP/ora/10.1.2/forms/server. Check for the file named, default.env.

Open the file, default.env

Search for the corresponding custom top. In our case we need to find the entry for the custom top, FCA_TOP.

We got the message that there is no entry for FCA_TOP. Scroll down to the bottom of the file where all the top directories are mapped to the physical directories

Now we shall add the entry for FCA_TOP at the end

The entry should be like the following,

CUSTOM_TOP=/home/applmgr/PROD/apps/apps_st/custom

Save the file.

Step 2: Bounce Apps server

Bounce the apps web server as given in the following article.


Step 3: Retest the issue

Now try to open the custom form from the front end.

The custom form opens successfully. Problem is solved.

Cheers!



Error on Supplier OAF page – APP-FND-02902: Multi-Org profile option is required

$
0
0

We got an error on trying to access the Supplier entry OAF page in Oracle from the home page,

Whenever we clicked on the page we got the following error,

If you check the exception details,

In text format the error was,

## Detail 0 ##

JBO-30003: The application pool (dev3.na.fellowes.comdev31533oracle.apps.pos.supplier.server.SuppSummAM) failed to checkout an application module due to the following exception:

oracle.jbo.JboException: JBO-29000: Unexpected exception caught: oracle.apps.fnd.framework.OAException, msg=Application: FND, Message Name: FND_GENERIC_MESSAGE. Tokens: MESSAGE = java.sql.SQLException: ORA-20001: SQL_PLSQL_ERROR: N, ROUTINE, MO_GLOBAL.INIT, N, ERRNO, -20001, N, REASON, ORA-20001: APP-FND-02902: Multi-Org profile option is required. Please set either MO: Security Profile or MO: Operating Unit profile option.

ORA-06512: at "APPS.FND_MESSAGE", line 509

ORA-06512: at "APPS.MO_GLOBAL", line 36

ORA-06512: at "APPS.MO_GLOBAL", line 757

ORA-06512: at "APPS.MO_GLOBAL", line 700

ORA-06512: at line 1

;

As per the error either MO: Operating Unit or MO: Security Profile options have to be set. When I checked the profile option values I found the following,

Responsibility: DON AP Manager

MO: Security Profile

MO: Operating Unit

We see that the value of both profile options are set for this responsibility. Then why does this error occur? This is because the value of the profile option, MO: Operating Unit is not set on the Site level.

I set a value at site level.

Then I tried to open the page once again.

Yeah, it worked! Ideally it should have worked at the beginning but certain seeded packages need a value at the site level as well and so we have to set it else for this responsibility OAF pages will be affected but not Oracle Forms! Strange, but true!

Cheers!


How set an override address for Workflow mailer

$
0
0

When we test workflow notification emails in a development or test environment we need to be cautious that the emails do not go to the recipients. Yet we need to test and see that the notification mails are sent successfully. What do we do in such a case?

We need to override the recipients’ email address so that the emails are automatically redirected to controlled mailbox. For development or testing purposes we can log in to the mailbox and view the notifications.

Here are the steps to set it.

Responsibility: System Administrator

Navigation: System Administration > Oracle Applications Manager > Workflow

Click on Site Map on the top left

On clicking the next window opens

Click on Notification Mailer in the Workflow section

On clicking you will get

Now click on the link, Workflow Mailer Service, under Name section.

On clicking the details of the service is displayed

Now click on Set Override Address button on the top right.

On clicking a new window opens

As you can see an override address is already set. You can enter a new override address here and press on Submit button as shown below.

If you want to reset the override address you can press Clear Override Address button.
If the override address has not been set previously then the form will show the Current Override Address as NONE.

Enter email

Press Submit button

Now log in to the mailbox of the Override address mail id and you will find a notification mail with the verification code. The email is shown below.

The verification code is 371347685. Enter this value back on the Override Address OAF form.

Press Apply button and the Override address will be set. You may need to bounce the Workflow Notification Mailer service for the change to take place.


Set the email address from the back end:
Execute the following SQL statement to select the override address from the back end

SELECT fscpv.parameter_value
  FROM fnd_svc_comp_params_tl fscpt, fnd_svc_comp_param_vals fscpv
 WHERE fscpt.display_name = 'Test Address'
   AND fscpt.parameter_id = fscpv.parameter_id

Now we want to change the email address to oracledev4user@****.com. Execute the following SQL

UPDATE fnd_svc_comp_param_vals fscpv
   SET fscpv.parameter_value = '&&email_address'
 WHERE fscpv.parameter_id IN (SELECT fscpt.parameter_id
                                FROM fnd_svc_comp_params_tl fscpt
                               WHERE fscpt.display_name = 'Test Address')

Enter the email address when prompted. The SQL will update 1 row. Commit the change.

A better way to set the mail address is to use an API, e.g.

BEGIN
   fnd_svc_comp_param_vals_pkg.load_row
                         (x_component_name             => 'Workflow Notification Mailer',
                          x_parameter_name             => 'TEST_ADDRESS',
                          x_parameter_value            => 'oracledev4@******.com',
                          x_customization_level        => 'L',
                          x_object_version_number      => -1,
                          x_owner                      => 'ORACLE'
                         );
END;

COMMIT the session. Now query the previous SQL to view the Override address.

Now bounce the Workflow Notification Mailer service, i.e. stop and start. If you check the Override address form from the front end you will see the following.

This shows that the override email address has been set.

SQL to retrieve the reply-to email address

SELECT fscpv.parameter_value smtp_server_name, fscpt.display_name
  FROM fnd_svc_comp_params_vl fscpt,
       fnd_svc_comp_param_vals fscpv,
       fnd_svc_components fsc
WHERE fscpt.parameter_id = fscpv.parameter_id
   AND fscpv.component_id = fsc.component_id
AND fscpt.display_name = 'Reply-to Address'
   AND fsc.component_name = 'Workflow Notification Mailer';

Cheers!


Tips for multi language program development in Oracle

$
0
0

(MLS) is a feature in Oracle E-Business (EBS) Suite of applications that enables users to run their applications in many different languages. MLS has opened the doors for global rollout of Oracle EBS with users in different countries able to use the application in their own language at the same time.

Difference between NLS and MLS

National Language Support (NLS) refers to the ability of Oracle EBS to run in any one of the supported languages other than American English. However, MLS refers to the ability in which the instance can be run in as many as languages as are supported at the same time.

Once MLS patches have been applied in Oracle by the DBAs the developers have to keep a few more points in mind while developing custom components.

  • FND_LANGUAGES table shows which languages are installed, and which is the base language and which are non-base languages (Installed Languages)

    Query to identify which language(s) have been installed

SELECT LANGUAGE_CODE, INSTALLED_FLAG FROM FND_LANGUAGES

If the value of INSTALLED_FLAG is I then that language has been installed. If the value of INSTALLED_FLAG is B then it is the base language. By default, language_code is US is the base language.

Example

Execute the following query,

SELECT * FROM FND_LANGUAGES where installed_flag IN (‘I’, ‘B’)

  • The Translated tables (*_TL) contain one record for each language i.e the translated string for each language.
  • Translated views (*_VL) have been introduced for the “_TL” tables, which allow concurrent programs to select data based on the session language without running the risk of returning more rows than expected using a condition within the view query like, t.LANGUAGE= USERENV(‘LANG’)

Hence the view FND_CONCURRENT_PROGRAMS_VL will return rows as per the session language settings.

Note:
If queries are executed from SQL*Plus on the _VL views without setting the session language then no rows will be returned. This is explained in this article.

Example

If we query for concurrent_program_id, 20125, i.e. the program named Trial Balance, from the table FND_CONCURRENT_PROGRAMS_TL we get the program name in all installed languages.

Querying the same concurrent_program_id from the corresponding _VL view, FND_CONCURRENT_PROGRAMS_VL gives us only 1 record.

MLS development guidelines

A list of general guidelines has been drawn up for developing technical components which will be display more than 1 language.

User messages

  • All user message (labels/pop ups) are to be derived from translation tables or from fnd message.

User message from the following,

  • Form item labels
  • Report item labels
  • Pop up messages
  • Concurrent program output
  • Workflow notifications
  • Form personalizations

Example

After the MLS patches have been applied open the Messages form.

Responsibility: Application Developer

Navigation: Application > Messages

Query for the seeded message named, ABORT.

Notice that the same message has been ported into as many messages as there are installed languages. The value has also been translated. Thus if a piece of code picks up the message text from a message it will only have pick up the message text based on the language and the code need not be changed at all.

SQL Queries

  • SQL queries should access data from _TL tables or _VL tables and have the following WHERE clause

    t.LANGUAGE= USERENV(‘LANG’)

An example of this incorrect usage is demonstrated here.


XML Publisher reports

  • There are 2 ways to develop XML Publisher report templates
  1. Each report will have as many templates as the number of languages it is expected to run on.
  2. Single template across all languages where the labels will also be derived from fnd messages or translation tables
    Single template Multiple template
    Advantage
    • 1 single file to be maintained
    • Modification/Addition of business logic or layout is simple
    • No business logic required to display template associate with language. It is configured in Oracle.
    Disadvantage
    • Modification/Addition of business logic or layout in the template is difficult
    • Business logic required to display the template associated with the language
    • Multiple files to be maintained

Example

Single template example

The developer is allowed to upload as many translatable files as there are installed languages in Oracle.

In this example there are 6 different language translations for a single template.

Multiple template example

You can also have multiple templates for a single report based on a language

In this case there is no need to have a separate translation file. An example of developing this kind of report is given here in detail.


SQL Loader

Application File System

  • Once the MLS patches have been applied to Oracle a set of directories are created in Unix under reports, forms, etc directories with the 2 character language code.
    • For instance, if patch for Spanish has been applied in Oracle a new set of folders will be created, like $GL_TOP/reports/ES, $AP_TOP/forms/ES
    • The point to keep in mind here is that any custom component created with specific changes for a language must be dropped to the language specific directory.
    • All translatable files reside in a subdirectory which has the language code incorporated in the name (e.g. $AP_TOP/reports/EL, $GL_TOP/forms/F etc.) .

    - Forms, Reports, Messages & Seeded data are translated

Example

If you check $AU_TOP/forms directory in Unix you will find several directories

Now there is 1 directory to keep the same form in a different language. It is the same in all the seeded top directories, e.g. GL_TOP, AP_TOP, etc.

NLS parameters in functions

Many Oracle functions have MLS versions. The versions are listed below.

  • TO_DATE
    • NLS_DATE_LANGUAGE
    • NLS_CALENDAR
  • TO_NUMBER
    • NLS_NUMERIC_CHARACTERS
    • NLS_CURRENCY
    • NLS_DUAL_CURRENCY
    • NLS_ISO_CURRENCY
  • TO_CHAR
    • NLS_DATE_LANGUAGE
    • NLS_NUMERIC_CHARACTERS
    • NLS_CURRENCY
    • NLS_ISO_CURRENCY
    • NLS_DUAL_CURRENCY
    • NLS_CALENDAR
  • TO_NCHAR
    • NLS_DATE_LANGUAGE
    • NLS_NUMERIC_CHARACTERS
    • NLS_CURRENCY
    • NLS_ISO_CURRENCY
    • NLS_DUAL_CURRENCY
    • NLS_CALENDAR
  • NLS_UPPER
    • NLS_SORT
  • NLS_LOWER
    • NLS_SORT
  • NLS_INITCAP
    • NLS_SORT
  • NLSSORT
    • NLS_SORT

Example of usage

TO_NUMBER (’13.000,00′, ’99G999D99″,’nls_numeric_characters = ”,.”’)

Where:

’99G999D99″ –The format mask for the number

‘nls_numeric_characters = ”,.”” –The thousands and decimal separator to be used

The query

select TO_NUMBER (’13.000,00′, ’99G999D99′,’nls_numeric_characters = ”,.”’) Num from dual

will return

13000


Example of error message after applying MLS patches

Once the MLS patches were applied on a particular Oracle instance a DFF value started throwing errors. The error is displayed below.

The error message is the following,

The value ROW for value set Fellowes OE Shipment Priority occurs in more than one row in column LOOKUP_CODE of table FND_LOOKUP_VALUES and duplicate values are not allowed. Please choose a different value or contact your system administrator.

The reason for this error is,

  • The LOV associated with the DFF segment has not been correctly coded with regards to translations.

If we look into the value set definition for the DFF segment we find that the LOV is based on the table, FND_LOOKUP_VALUES.

As the Oracle instance now has MLS patches the table FND_LOOKUP_VALUES now can contain the same values across languages. We have 2 options to overcome the error faced by the user.

  1. We can add LANGUAGE= USERENV(‘LANG’) in the Where/Order By region to pick up the value based on the user’s language
  2. We can change the table name to FND_LOOKUP_VALUES_VL instead of FND_LOOKUP_VALUES

Cheers!


How to get concurrent program output in Multiple Languages

$
0
0

A concurrent program can provide output in a language if the language is installed in Oracle. To find out which languages are installed in Oracle you can check this article. Generally seeded programs provide output of a program based on the user preferred language. In this example we have illustrated how to override user preference and provide the output of a concurrent program and give multi lingual output based on a certain rule/condition.


Step 1: Create Multi language function in the database

We created a multi language packaged function named, XX_MLS_LANG.GET_LANG. The function expects an input from a concurrent program. This input will come from a concurrent program parameter named, Language. In this example the user will enter a language name and this name will be converted into the language code by the function. For example, if the users enter GERMAN the language function will return D, that is the code in Oracle for German.

The code for this function is given below.

CREATE OR REPLACE PACKAGE APPS.xx_mls_lang AUTHID CURRENT_USER
AS
   FUNCTION get_lang
      RETURN VARCHAR2;
END xx_mls_lang;
/

CREATE OR REPLACE PACKAGE BODY apps.xx_mls_lang
AS
   FUNCTION get_lang
      RETURN VARCHAR2
   IS
      p_lingo              VARCHAR2 (40)   := NULL;
      l_select_statement   VARCHAR2 (4000);
      source_cursor        INTEGER;
      lang_string          VARCHAR2 (240)  := NULL;
      l_lang               VARCHAR2 (30);
      l_lang_str           VARCHAR2 (500)  := NULL;
      l_base_lang          VARCHAR2 (30);
      l_dummy              INTEGER;
      ret_val              NUMBER          := NULL;
      parm_number          NUMBER;
      l_trns_lang_check    NUMBER;
   BEGIN
      -- Parameter Entry
      ret_val := fnd_request_info.get_param_number ('Language', parm_number);

      IF (ret_val = -1)
      THEN
         p_lingo := NULL;
      ELSE
         p_lingo := fnd_request_info.get_parameter (parm_number);
      END IF;

      -- Get Base Language
      SELECT language_code
        INTO l_base_lang
        FROM fnd_languages
       WHERE installed_flag = 'B';

      -- If the user has entered a language/value for the parameter then
      -- extract it the value
      IF p_lingo IS NOT NULL
      THEN
         -- Open the cursor
         source_cursor := DBMS_SQL.open_cursor;

         -- Create a query string to get languages based on parameters.
         l_select_statement :=
            'SELECT language_code FROM fnd_languages where nls_language = UPPER(:p_language)';
         DBMS_SQL.parse (source_cursor, l_select_statement, DBMS_SQL.v7);
         DBMS_SQL.bind_variable (source_cursor, ':p_language', p_lingo);

         -- Execute the cursor
         DBMS_SQL.define_column (source_cursor, 1, l_lang, 30);
         l_dummy := DBMS_SQL.EXECUTE (source_cursor);

         -- If the cursor has returned more than 1 row then
         -- get the output of the cursor into respective variables
         IF DBMS_SQL.fetch_rows (source_cursor) <> 0
         THEN
            DBMS_SQL.COLUMN_VALUE (source_cursor, 1, l_lang);
            l_lang_str := l_lang;
         ELSE
            -- If the cursor returned 0 rows then return the base language
            l_lang_str := l_base_lang;
         END IF;

         -- Close the cursor
         DBMS_SQL.close_cursor (source_cursor);
      ELSE
         -- If the user has not entered any value then return the base language
         l_lang_str := l_base_lang;
      END IF;

      fnd_file.put_line
         (fnd_file.LOG,
          'Checking to see if the derived language has a translated layout or not'
         );

      BEGIN
         -- Check if the language entered by the user is associated to a translated template or not
         SELECT 1
           INTO l_trns_lang_check
           FROM xdo_lobs xl
          WHERE xl.lob_type = 'MLS_TEMPLATE'
            AND xl.trans_complete = 'Y'
            AND xl.LANGUAGE = l_lang_str
            AND xl.lob_code =
                   ( -- Get the actual program name from the MLS request
                    SELECT argument2  -- Prog name
                      FROM fnd_run_req_pp_actions
                     WHERE parent_request_id = fnd_global.conc_request_id -- Request id of the MLS function
                       AND action_type = 6)             -- Template Code
                                                 ;
      EXCEPTION
         WHEN OTHERS
         THEN
            -- If the chosen language does not have an associated template the SQL will fail
            -- and therefore return the default language
            fnd_file.put_line (fnd_file.LOG,
                                  'There is no layout for language: '
                               || l_lang_str
                              );
            fnd_file.put_line
               (fnd_file.LOG,
                   'Therefore we are using the default template for language: '
                || l_base_lang
               );
            l_lang_str := l_base_lang;
      END;

      RETURN (l_lang_str);
   EXCEPTION
      WHEN OTHERS
      THEN
         DBMS_SQL.close_cursor (source_cursor);
         RAISE;
   END get_lang;
END xx_mls_lang;
/


Step 2: Create an executable for Multi Language

When the multi language packs are installed in Oracle a new type of concurrent executable is created, Multi Language Function. We shall create a concurrent executable of this type for the database function we have created.


Step 3: Add the parameter to the concurrent program (Optional)

In this step we are going to modify the seeded program, Active Users, to provide the output in multi language. Since this program does not take any parameters we are going to add a parameter to this program to accept a language name as a user entry (as explained in Step 1).


Step 4: Attach the multi language executable

Now we shall attach the multi language executable to the concurrent program, Active Users, so that the output language is taken from the MLS function.

Once the language packs are installed a field named, MLS function, is enabled on concurrent program form. Enter the MLS executable here.

Note: MLS function field has a LOV attached to it. The LOV has the list of executables that are of type Multi Language Function, i.e. executables defined as in Step 2.


Test the concurrent program

Now we shall execute the concurrent program to check the output. Open the SRS form

Now select the program as Active Users.

We get a prompt for the parameter we had created, i.e. Language. Enter a language, say Spanish.

Press OK and submit the program.

Notice that 2 concurrent programs are executed by Oracle instead of 1.

  1. Active Users (Multiple Languages)
  2. ES-ES: (Active Users)

This is because the first request is for the MLS language function and the second request is for the concurrent program.

When the concurrent programs complete check the log and output of both the requests.

  • Output of request, Active Users (Multiple Languages)

There is no output of the request that is kicked off for the MLS function.

  • Log of request, Active Users (Multiple Languages)
+---------------------------------------------------------------------------+
Application Object Library: Version : 12.0.0

Copyright (c) 1979, 1999, Oracle Corporation. All rights reserved.

FNDMLSUB module: Multiple Languages
+---------------------------------------------------------------------------+

Current system time is 15-AUG-2013 08:35:59

+---------------------------------------------------------------------------+

**Starts**15-AUG-2013 08:35:59
**Ends**15-AUG-2013 08:35:59
+---------------------------------------------------------------------------+
Start of log messages from FND_FILE
+---------------------------------------------------------------------------+
+---------------------------------------------------------------------------+
Calling language function xx_mls_lang.get_lang  : 15-AUG-2013 08:35:59
Language function returned the following languages : E .  : 15-AUG-2013 08:35:59
+---------------------------------------------------------------------------+
The following are the details of submitted requests:
Request ID Language
------------------------------------------
     57613357       SPANISH
+---------------------------------------------------------------------------+
End of log messages from FND_FILE
+---------------------------------------------------------------------------+

+---------------------------------------------------------------------------+
Current system time is 15-AUG-2013 08:35:59

+---------------------------------------------------------------------------+
Request restarted at :15-AUG-2013 08:36:06
**Starts**15-AUG-2013 08:36:06
**Ends**15-AUG-2013 08:36:06
MLS Request completed normally with outcome Success
+---------------------------------------------------------------------------+
Start of log messages from FND_FILE
+---------------------------------------------------------------------------+
Status of the completed requests:
Request ID Status
-----------------------
     57613357       Success
+---------------------------------------------------------------------------+
End of log messages from FND_FILE
+---------------------------------------------------------------------------+

+---------------------------------------------------------------------------+
No completion options were requested.

Output file size:
0

+---------------------------------------------------------------------------+
Concurrent request completed successfully
Current system time is 15-AUG-2013 08:36:06

+---------------------------------------------------------------------------+

Note that the MLS function has derived the language and has spawned the actual concurrent program.

  • Output of request, Active Users (Multiple Languages)
15-AGO-2013 08:36
                                                                                                                                1

Usuarios y Responsabilidades Activos

Usuario                   Grupo de Seguridad        Aplicación                 Responsabilidad           Inicio      Finalizaci

 ------------------------  ------------------------  -------------------------  ------------------------  ----------- -----------
AAGUIRRE                  Estándar                  Advanced Supply Chain      APS: Lanzamiento          03-FEB-2013
                                                     Planning

                                                     Custom            ITA Supply Chain          29-MAR-2006
Application                Mgrs/Dir

                                                     Human Resources            USA Manager Self-Service  03-MAY-2010

AARENDS                   Estándar                  Fellowes Custom            ITA Cost Inquiry          03-ENE-2011
                                                     Application

............
............
Usuarios y Responsabilidades Activos

Usuario                   Grupo de Seguridad        Aplicación                 Responsabilidad           Inicio      Finalizaci

 ------------------------  ------------------------  -------------------------  ------------------------  ----------- -----------
ZMINEO                    Estándar                  Advanced Supply Chain      APS: Lanzamiento          03-FEB-2013
                                                     Planning

                                                     Custom            AUS Inventory Inquiry     13-SEP-2011
                                                     Application

Important: When a concurrent request gives output in multiple languages it is the header or the data labels that are changed into different languages. The data remains in the same language as it is stored in the database.

  • Log of request, Active Users (Multiple Languages)
                                                                                                                                1
+---------------------------------------------------------------------------+
Application Object Library: Version : 12.0.0

Copyright (c) 1979, 1999, Oracle Corporation. All rights reserved.

FNDSCURS module: Usuarios Activos
+---------------------------------------------------------------------------+

Hora actual del sistema: 15-AGO-2013 08:35:59

+---------------------------------------------------------------------------+

+-----------------------------
| Iniciando la ejecución del programa simultáneo...
+-----------------------------

Argumentos
------------
Language='Spanish'
------------

APPLLCSP Environment Variable set to :

 Current NLS_LANG and NLS_NUMERIC_CHARACTERS Environment Variables are :
SPANISH_SPAIN.UTF8

' '

Introduzca la Contraseña:
REP-0092: Advertencia: Argumento LANGUAGE versión 1.1 no soportado. Use en su lugar la variable de entorno de Idioma Nacional de ORACLE.
REP-0092: Advertencia: Argumento LANGUAGE versión 1.1 no soportado. Use en su lugar la variable de entorno de Idioma Nacional de ORACLE.

Report Builder: Release 10.1.2.3.0 - Production on Jue Ago 15 08:36:02 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

+---------------------------------------------------------------------------+
Inicio del log de mensajes de FND_FILE
+---------------------------------------------------------------------------+
+---------------------------------------------------------------------------+
Fin del log de mensajes de FND_FILE
+---------------------------------------------------------------------------+

+---------------------------------------------------------------------------+
Se están ejecutando las opciones de finalización de solicitud...

Output file size:
1055709

+------------- 1) PRINT   -------------+

Se está imprimiendo el fichero de salida.
Id Solicitud : 57613357
Número de copias : 0
Impresora : noprint

+--------------------------------------+

La ejecución de las opciones de finalización de solicitud ha finalizado.

+---------------------------------------------------------------------------+
Solicitud simultánea finalizada correctamente
Hora actual del sistema: 15-AGO-2013 08:36:05

+---------------------------------------------------------------------------+

Note that the log file has now changed to Spanish. This means that MLS affects data labels, headers and log files but not data.

Appendix:

Now if we were to take off the MLS function from Step 4 and executed Active Users concurrent program then Oracle would have executed only 1 request.

The language would have been the default installed language. Here is part of the output below.

15-AUG-2013 08:47
                                                                                                                                1

                                           Active Users and Their Active Responsibilities

 User                      Security Group            Application                Responsibility            Start       End

 ------------------------  ------------------------  -------------------------  ------------------------  ----------- -----------
AAGUIRRE                  Standard                  Advanced Supply Chain      APS Release               03-FEB-2013

In the example we have used a seeded program. This method will work for custom programs also. For custom programs we need to ensure that the text within the program changes along with the session language. In this article we have discussed how to develop programs for multi language.

Cheers!


Template location for XML Bursting

$
0
0

In the previous article we had discussed that the template file for XML bursting is dropped on the file server. This file is referred to at this location by the XML bursting control file.

Disadvantage of this method:

  1. The file location is hard coded into the bursting control file
  2. Modification of layout will mean that the template is also dropped into the file server for bursting

An alternate and better method is to pick up the location of the file from the database instead of deploying the physical file in the file server of the App server.

The location mentioned in the bursting control file just has to be changed keeping the rest of the control file intact. The syntax for getting the template location from XML Publisher in EBS is: location=”xdo://APPCODE.TEMPLATE_CODE.lang.TERR”

Example: xdo://SQLAP.APXT7F99P.en.US

The following SQL query will assemble the location name for you (assuming you have previously run a XMLP request with this data definition):

Query to get

SELECT    lt.application_short_name
       || '.'
       || lt.template_code
       || '.'
       || lt.default_language
       || '.'
       || lt.default_territory AS burst_template_xdo_location
  FROM xdo_templates_b lt
WHERE lt.template_code = 'XXEMPDET' -- Template Code

After running it you will get the result as the following

This same data on the template screen will be as shown below,

Notice the values for Default File and Default File Language on the screen.

As you can see the bursting template location is shown as AMW.XXEMPDET.en.00. Once this is added into the template as the following

Now the template can be accessed as

<xapi:template type=”rtf” location=”xdo://AMW.XXEMPDET.en.00?getSource=true” />

Instead of transferring the file to a Unix directory as we had in the previous example, i.e.

<xapi:template type=”rtf” location=”/usr/tmp/XXEMPDET.rtf” />


Multi language translated Templates

If you have translated templates for a base template then the location of the layout templates will not be found with previous SQL.

By executing the following SQL you can find all the files associated to the report.

select * from xdo_lobs where lob_code = 'XXEMPDET'    -- Template Code

You can derive the location of the translated templates from this table using the following query

select xl.application_short_name
       || '.'
       || xl.lob_code
       || '.'
       || xl.language
       || '.'
       || xl.territory AS burst_template_xdo_location
       from xdo_lobs xl
where xl.lob_type = 'MLS_TEMPLATE'
and xl.TRANS_COMPLETE = 'Y'
and xl.lob_code = 'XXEMPDET'    -- Template Code

If you add a condition on the language on this query you will get the translated template location for bursting.

Cheers!


Switch off all personalizations on OAF pages

$
0
0

We can turn off all personalizations on OAF pages by setting a profile option. Here is an example.

Seeded Supplier creation OAF page

Personalize the page

The personalization is to make the field, Supplier Type, read-only.

Now we shall switch off all personalizations on OAF pages

Responsibility: System Administrator

Navigation: Profile > System

Search for profile option, Disable Self-Service Personal.

This profile option only takes in value at the site level. The default value is set to No. Once the value is set to Yes all OAF personalizations will be reverted. Set the value of this personalization to Yes.

Save and close the form.

Now go back to the Supplier creation OAF page

Notice that a warning message, Personalization is currently disabled. Your application might not work as expected, is displayed. Also note that the personalization on Supplier Type is not working. If we set the profile option, Disable Self-Service Personal, to No the personalization will again start taking effect.

Cheers!


How to create a multilingual report in Oracle using XLIFF

$
0
0

XLIFF stands for XML Localization Interchange File Format. It is an XML-based format that enables translators to concentrate on just the text to be translated.  We shall use the program, XX Employee Detail, used in this article, to generate the layout in multiple languages. For this example we shall add a parameter named Language on the report to be used and the MLS function, XX_MLS_LANG (refer to this article for the code), to the concurrent program.

Click on Parameters

Now if you execute the program from SRS form you will be prompted

You can enter any language name. Let’s say French.

After the programs (First for MLS and the next for the actual report) completes,

Check the output of the concurrent program.

The labels are still in English, i.e. the base language. We can change the labels based on language using XLIFF.


Developing translations for the report

There are two options for adding translated templates to your report definition:

  • Create a separate RTF template that is translated (a localized template)

    This process has been demonstrated in this article. This option is useful if the translated template requires a different layout for each language.

  • Generate an XLIFF file from the original template (at runtime the original template is applied for the layout and the XLIFF file is applied for the translation)

If the layout of the report is same for all languages and if you only require translation of the text strings of the template layout, use the XLIFF option.

Step 1: Install XML Publisher plug in for MS Word

Once the plug in is installed you will see a new menu item on MS Word named, BI Publisher.


Step 2: Open the existing template in MS Word

The existing layout template, XXEMPDET, is opened in MS Word.


Step 3: Create the translation file

Click on Translation > Extract Text

You will get a dialog box asking you to save the translated XLIFF (*.xlf) file

Save the file.


Step 4: Review the XLIFF file

Now open the XLIFF file in an editor. The file is given below.

<?xml version = '1.0' encoding = 'UTF-8'?>
<xliff version="1.0">
   <file source-language="en" target-language="en-US" datatype="biprtf" original="n/a" product-version="11.1.1.7.0" product-name="Oracle BI Publisher">
      <header>
         <skl>
            <internal-file>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</internal-file>
         </skl>
         <prop-group name="ora_reconstruction">
            <prop prop-type="extractorVersion">11.1.1.7.0_1.2</prop>
         </prop-group>
      </header>
      <body>
         <trans-unit id="5ba99ef6">
            <source>RTF Template</source>
            <target>RTF Template</target>
            <prop-group name="ora_reconstruction">
               <prop prop-type="e1">VGVtcA==</prop>
            </prop-group>
            <note>Text located: body</note>
         </trans-unit>
         <trans-unit id="d8deaeb9">
            <source>Template Table 1</source>
            <target>Template Table 1</target>
            <prop-group name="ora_reconstruction">
               <prop prop-type="e1">bGF0ZSBUYWI=</prop>
            </prop-group>
            <note>Text located: table</note>
         </trans-unit>
         <trans-unit id="ab063ae6">
            <source>Employee Report</source>
            <target>Employee Report</target>
            <note>Text located: body</note>
         </trans-unit>
         <trans-unit id="53c24eba">
            <source>Employee Information</source>
            <target>Employee Information</target>
            <note>Text located: body/table</note>
         </trans-unit>
         <trans-unit id="24eeab">
            <source>Name</source>
            <target>Name</target>
            <note>Text located: body/table</note>
         </trans-unit>
         <trans-unit id="a512c0fb">
            <source>Employee Number</source>
            <target>Employee Number</target>
            <note>Text located: body/table</note>
         </trans-unit>
         <trans-unit id="306cfd49">
            <source>Position</source>
            <target>Position</target>
            <note>Text located: body/table</note>
         </trans-unit>
         <trans-unit id="d48fef30">
            <source>Email Address</source>
            <target>Email Address</target>
            <note>Text located: body/table</note>
         </trans-unit>
      </body>
   </file>
</xliff>

Step 5: Get the translations and modify <target> tags

We shall now get the translations for the <source> tags, i.e. the field labels.

I am going to translate the base source tags into 2 languages, French and Spanish. So that when I run the report for French and Spanish the report will be translated as per the language. The assumpstion is that these language packs are already installed in Oracle. If the report I have listed the translations of the tags in the table below.

<source> (English) <target> (French) <target> (Spanish)
RTF Template RTF Template Plantilla RTF
Template Table 1 Tableau 1 Modèle Tabla 1 Plantilla
Employee Report Rapport de l’employé Informe del Empleado
Employee Information Renseignements sur l’employé Información del empleado
Name Nom Nombre
Employee Number Nombre d’employés Número de empleado
Position Position Posición
Email Address Adresse Email Dirección de correo electrónico

I have used Google Translator at http://translate.google.com to translate English to French and Spanish.


Step 6: Modify the XLIFF file to get 1 XLIFF file for each language

Now we shall create 1 XLIFF file for each language by replacing the corresponding <target> tag with the translated value. Therefore we shall have 2 XLIFF files in this example, 1 for French and 1 for Spanish.

The following changes have to be made on the generated XLIFF file

  1. Remove the <skl> tags and the information within the tags as well.
  2. Change the target-language from target-language=”en-US”
    1. Change to target-language=”es” for Spanish
    2. Change to target-language=”fr” for French
  3. Modify the text within the <target> tags the files should look like the following,

The files will look like the following:

French translation:

<?xml version = '1.0' encoding = 'UTF-8'?>
<xliff version="1.0">
 <file source-language="en" target-language="fr" datatype="biprtf" original="n/a" product-version="11.1.1.7.0" product-name="Oracle BI Publisher">
 <header>
 <prop-group name="ora_reconstruction">
 <prop prop-type="extractorVersion">11.1.1.7.0_1.2</prop>
 </prop-group>
 </header>
 <body>
 <trans-unit id="5ba99ef6">
 <source>RTF Template</source>
 <target>RTF Template</target>
 <prop-group name="ora_reconstruction">
 <prop prop-type="e1">VGVtcA==</prop>
 </prop-group>
 <note>Text located: body</note>
 </trans-unit>
 <trans-unit id="d8deaeb9">
 <source>Template Table 1</source>
 <target>Tableau 1 Modèle</target>
 <prop-group name="ora_reconstruction">
 <prop prop-type="e1">bGF0ZSBUYWI=</prop>
 </prop-group>
 <note>Text located: table</note>
 </trans-unit>
 <trans-unit id="ab063ae6">
 <source>Employee Report</source>
 <target>Rapport de l'employé</target>
 <note>Text located: body</note>
 </trans-unit>
 <trans-unit id="53c24eba">
 <source>Employee Information</source>
 <target>Renseignements sur l'employé</target>
 <note>Text located: body/table</note>
 </trans-unit>
 <trans-unit id="24eeab">
 <source>Name</source>
 <target>Nom</target>
 <note>Text located: body/table</note>
 </trans-unit>
 <trans-unit id="a512c0fb">
 <source>Employee Number</source>
 <target>Nombre d'employés</target>
 <note>Text located: body/table</note>
 </trans-unit>
 <trans-unit id="306cfd49">
 <source>Position</source>
 <target>Position</target>
 <note>Text located: body/table</note>
 </trans-unit>
 <trans-unit id="d48fef30">
 <source>Email Address</source>
 <target>Adresse Email</target>
 <note>Text located: body/table</note>
 </trans-unit>
 </body>
 </file>
</xliff>

Spanish file:

<?xml version = '1.0' encoding = 'UTF-8'?>
<xliff version="1.0">
   <file source-language="en" target-language="es" datatype="biprtf" original="n/a" product-version="11.1.1.7.0" product-name="Oracle BI Publisher">
      <header>
         <prop-group name="ora_reconstruction">
            <prop prop-type="extractorVersion">11.1.1.7.0_1.2</prop>
         </prop-group>
      </header>
      <body>
         <trans-unit id="5ba99ef6">
            <source>RTF Template</source>
            <target>Plantilla RTF</target>
            <prop-group name="ora_reconstruction">
               <prop prop-type="e1">VGVtcA==</prop>
            </prop-group>
            <note>Text located: body</note>
         </trans-unit>
         <trans-unit id="d8deaeb9">
            <source>Template Table 1</source>
            <target>Tabla 1 Plantilla</target>
            <prop-group name="ora_reconstruction">
               <prop prop-type="e1">bGF0ZSBUYWI=</prop>
            </prop-group>
            <note>Text located: table</note>
         </trans-unit>
         <trans-unit id="ab063ae6">
            <source>Employee Report</source>
            <target>Informe del Empleado</target>
            <note>Text located: body</note>
         </trans-unit>
         <trans-unit id="53c24eba">
            <source>Employee Information</source>
            <target>Información del empleado</target>
            <note>Text located: body/table</note>
         </trans-unit>
         <trans-unit id="24eeab">
            <source>Name</source>
            <target>Nombre</target>
            <note>Text located: body/table</note>
         </trans-unit>
         <trans-unit id="a512c0fb">
            <source>Employee Number</source>
            <target>Número de empleado</target>
            <note>Text located: body/table</note>
         </trans-unit>
         <trans-unit id="306cfd49">
            <source>Position</source>
            <target>Posición</target>
            <note>Text located: body/table</note>
         </trans-unit>
         <trans-unit id="d48fef30">
            <source>Email Address</source>
            <target>Dirección de correo electrónico</target>
            <note>Text located: body/table</note>
         </trans-unit>
      </body>
   </file>
</xliff>

Important: The XLIFF and RTF files must be named according to the following standard:

TemplateName_<language code>_<TERRITORY CODE>.xlf or .rtf

or

TemplateName_<language code>.xlf or .rtf

where TemplateName is the original template name

language code is the two-letter ISO language code (in lower case)

TERRITORY CODE is the two-letter ISO country code (must be in upper case)

We have named the XLIFF files as XXEMPDET_FR.xlf and XXEMPDET_ES.xlf respectively.


Step 7: Upload the XLIFF files to the template

Log in to Apps

Responsibility: XML Publisher Administrator

Navigation: Templates

Search for the template of the report, i.e. XX Employee Detail

Check the details of the template

We see that the English layout is attached to this template but we need to make the template translatable so that the translations can be attached to this template.

Click on Add File button.

Upload the template and ensure that Translatable checkbox is checked.

Click on Apply button and the translatable template will be saved.

Notice the new section for Translatable template


Step 8: Upload the XLIFF files to the translatable template

Now the translatable template is in English. We shall upload the translations for French and Spanish to this template.

Click on Upload Translations button

Now select the translation XLIFF file by clicking on Browse button

Click on Apply button and the XLIFF file will be added to the translatable template as shown below

Note that a territory has not been added for the translation

This is because the territory is not mentioned in the target language tag in the XLIFF file.

E.g. target-language=”es”

If the value for this tag was “es-ES” then ES is specifying the territory, i.e. Spain and it would have reflected on the form

Now add the French translation file as well in the same way. Once both XLIFF files are uploaded it will look like the following,

Now all the translations are uploaded and you are all set to execute the report for English, French and Spanish.


Test the report

Execute the report (shown above) and enter language as French

Check the output of the report

You can see the report has now been translated into French.

Now execute the report again and enter Spanish for Language.

Check the output of the report

Now the report output has changed to Spanish.

Let us run the report for a language for which we have not provided a translation, say German.

Check the output

As German has not been translated the output of the report comes out in the default language, i.e. English.

Cheers!



How to upload XML Publisher files with a script

$
0
0

Normally data definition and layout templates are created from the front end manually. This process can be automated for code migration process.

Load Definitions and Template

First the data definition and template is uploaded using a FNDLOAD script. We are assuming the file named XXEMPDET_DD.ldt contains the data definition and template details. We shall execute the following to load both data definition and template as shown in this article.

FNDLOAD apps/$CLIENT_APPS_PWD O Y UPLOAD $XDO_TOP/patch/115/import/xdotmpl.lct XXEMPDET_DD.ldt


Attach Data Template

A utility named, adjava, is invoked to attach the data template to the data definition. We shall keep the data template xml file within a unix directory and call the following script from the same directory.


Loading data loader:

adjava oracle.apps.xdo.oa.util.XDOLoader UPLOAD \
-DB_USERNAME apps \
-DB_PASSWORD $apps_pwd \
-JDBC_CONNECTION $DbServer:$DbServerPort:$DbServerSID \
-LOB_TYPE DATA_TEMPLATE  \
-APPS_SHORT_NAME "$APP_NAME" \
-LOB_CODE "$DATA_DEFINITION_SHORT_NAME" \
-LANGUAGE en \
-XDO_FILE_TYPE XML \
-FILE_CONTENT_TYPE 'text/html' \
-FILE_NAME  "$DIR/<DATA_TEMPLATE.xml>" \
-CUSTOM_MODE FORCE

The usage is shown below

Hit enter

The message tells that the xml file has been uploaded successfully, i.e. the data definition has been loaded successfully.


Loading template:

The following is a sample script for loading templates.

adjava oracle.apps.xdo.oa.util.XDOLoader UPLOAD \
-DB_USERNAME apps \
-DB_PASSWORD $apps_pwd \
-JDBC_CONNECTION $DbServer:$DbServerPort:$DbServerSID \
-LOB_TYPE TEMPLATE \
-APPS_SHORT_NAME "$APP_NAME" \
-LOB_CODE "$TEMPLATE_SHORT_NAME" \
-LANGUAGE en \
-XDO_FILE_TYPE RTF \
-FILE_CONTENT_TYPE 'text/html' \
-FILE_NAME  "$DIR/<TEMPLATE.rtf>" \
-CUSTOM_MODE FORCE

The usage is shown below

Hit Enter

Now both the data template and layout template are uploaded in Oracle.

Cheers!


AR Customer Balance Statement Letter setup and usage

$
0
0

For a European rollout across most countries in Europe we had applied 7 language packs in Oracle r12. I had executed Customer Statement Print report for UK operating unit after the language packs were applied. I was surprised to see the results as I did not match to what I knew in this article. Here is why.

Executing the statement print

Navigation: Print Documents > Statements

Submit the program

Notice multiple request ids in the box, Request Id. Now check the requests in SRS form.

The Statement Generation Program is executed 7 times because there are 7 languages installed in this Oracle instance. Also notice that the Statement Generation Program executes AR Customer Balance Statement Letter instead of Customer Statement Print program.


This is because of the language pack installation.

Concurrent program definition

AR Customer Balance Statement Letter (AR Customer Balance Statement Letter)

Setup for this report

Checking the template of this report.

Responsibility: XML Publisher Administrator

Navigation: Template

Code: CLE_F_ARCUSBALSL

Scroll down

Notice that the translations have been added automatically by the language patches. To know about translated templates check this article.

Check the lookup AR_EMEA_COUNTRIES

Responsibility: Receivables Manager

Navigation: Setup > System > QuickCodes > Receivables

Query for lookup type, AR_EMEA_COUNTRIES

Search for Meaning = United Kingdom

This is a seeded lookup from Oracle that lists all the EMEA countries. The countries enabled here determine which responsibility will execute AR Customer Balance Letter. If the country is not enabled here then the corresponding responsibility will execute Customer Statement Print report.

If a particular EMEA country does not want to execute AR Customer Balance Letter then it can be disabled by unchecking the Enabled box. Then Customer Statement Print report will be automatically enabled for that country. Also, if a non EMA country wants to use the AR Customer Balance Letter then the country can be added in this lookup.

The check for the country is done from the country associated with the operating unit that is associated with the responsibility from which Statements are being printed. The operating unit in turn comes from the profile option MO: Operating Unit. See below,

In our example the address associated with the operating unit UK OPERATIONS determines whether Customer Balance Letter is called or not. Check the address of the operating unit.

Responsibility: Receivables Super User

Navigation: Setup > System > System Options

Click on Miscellaneous tab

Notice the Default Country is United Kingdom. (In the database this data resides in the table AR_SYSTEM_PARAMETERS_ALL).

We have seen that this country exists in the lookup AR_EMEA_COUNTRIES earlier. Hence the AR Customer Balance Letter is kicked off from this operating unit instead of Customer Statement Report.

Cheers!


How to set context in a SQL session in Oracle Apps

$
0
0

As Oracle SQL Developer doesn’t require an Oracle client, it doesn’t look at the Oracle registry settings to get your default NLS settings (where TOAD looks). It picks up defaults from the OS (i.e. Regional and Language Settings on Windows).

To fix this (i.e.to make the Oracle function, USERENV (‘lang’), and return language as US, change your SQL Developer NLS settings (Tools > Preferences > Database > NLS Parameters) to have Language = AMERICAN and Territory = AMERICA

For Toad you need to go to -> Access NLS Parameters, from the Database menu, select Administer|NLS Parameters

Setting the organization/profile on the SQL session in a Multi Org instance

There some times org specific tables for that you need to setup org_id, you can use any of the following

Oracle 11i script to set the profile for a responsibility associated to a user

BEGIN
   fnd_global.apps_initialize (user_id           => 101,
                               resp_id           => 123,
                               resp_appl_id      => 234
                              );
END;

OR

Oracle 11i script to set the operating unit

BEGIN
   fnd_client_info.set_org_context (CONTEXT => '779'); -- org_id
END;

Oracle r12 equivalent

BEGIN
   mo_global.set_policy_context (p_access_mode => 'S', p_org_id => '779');
END;

OR

BEGIN
   DBMS_APPLICATION_INFO.set_client_info (client_info => '779');  -- org_id
END;

Tables that contain Multiple Organizations data can be identified by the suffix “_ALL” in the table name. These tables include a column called ORG_ID, which partitions Multiple Organizations data by organization.

Every Multiple Organizations table has a corresponding view that partitions the table’s data by operating unit. Multiple Organizations views partition data by including a DECODE on the internal variable CLIENT_INFO. This variable is set by the security system to the operating unit designated for the responsibility. It operates is a similar way to the LANGUAGE variable, which returns the language of the current session.

Note: If accessing data from a Multiple Organizations partitioned object when CLIENT.INFO has not been set (for example, from SQL*Plus), you must use the _ALL table, not the view.

SO_HEADERS_ALL, with its corresponding view SO_HEADERS, is an example of a Multiple Organizations partitioned object.


Multi Language context

In Oracle E-Business, the tables that end with _TL or views that end with _VL are multi language enabled. By default the language that is set is US English denoted as US within the tables. These tables have an entry for each language.

E.g. if you query for the concurrent program, Analyze All Index Column Statistics, you will find as many entries in the table, fnd_concurrent_programs_tl, as there are languages installed in the instance.

SELECT *
  FROM fnd_concurrent_programs_tl
 WHERE user_concurrent_program_name = 'Analyze All Index Column Statistics'

You can see there are 6 additional languages installed in this Oracle instance and hence there are 7 records for a single program on the table.

When MLS/NLS is installed the views affected by language do not show data. We would either need to query multi org setup views or set the language for the session.

We are trying to query an Oracle seeded view in the database

SELECT *
  FROM hrfv_business_groups

When we run the query we do not get any data

If you check the definition of the view,

CREATE OR REPLACE FORCE VIEW apps.hrfv_business_groups (business_group_name,
                                                        date_from,
....
....
....
     FROM hr_all_organization_units_tl ot,
          hr_all_organization_units o,
          fnd_id_flex_structures_tl f1,
          fnd_id_flex_structures_tl f2,
          fnd_id_flex_structures_tl f3,
          fnd_id_flex_structures_tl f4,
          fnd_id_flex_structures_tl f5,
          fnd_id_flex_structures_tl f6,
          hr_organization_information o2,
          hr_organization_information o3,
          hr_organization_information o4
    WHERE o.organization_id = ot.organization_id
      AND ot.LANGUAGE = USERENV ('LANG')
....
....
      AND f1.LANGUAGE = USERENV ('LANG')
....
....
      AND f3.LANGUAGE = USERENV ('LANG')
....
....
      AND f6.LANGUAGE = USERENV ('LANG')
          WITH READ ONLY;

I have only displayed the relevant lines from the view.

Now If I check the default language set on the Oracle session using,

SELECT USERENV ('LANGUAGE') "Language"
  FROM DUAL;

We shall now change the session language using

ALTER SESSION SET nls_language='AMERICAN'

After executing that you will get the message .

Now let us check the session language

Note that the language has been changed to AMERICAN

Now let us query the view once more

SELECT * FROM hrfv_business_groups

Now the view returns data as the language context has been set.

Cheers!


Migrating translations using FNDLOAD

$
0
0

Certain AOL objects can have translations of their names in different languages other than English, provided the languages are installed on Oracle.

The menu has translations in 7 languages

If we try to execute FNDLOAD then the file generated will have the information in English only.

$ FNDLOAD apps/apps_dev6 O Y DOWNLOAD $FND_TOP/patch/115/import/afsload.lct FCA_HR_ESS_TOP_AU.ldt MENU MENU_NAME="FCA_HR_ESS_TOP_AU"

The AOL object, FCA_HR_ESS_TOP_AU menu, will be downloaded from Oracle.

Check the file

$ view FCA_HR_ESS_TOP_AU.ldt

All the menu prompts are in English. This means none of the menu translations have been downloaded.

Check language of the unix session

$ env | grep NLS_LANG

Notice the value of the environment variable, NLS_LANG. it is American_America.UTF8

The value for the variable is set as NLS_LANG=<Language>_<Territory>.<Character set>

If you check for the installed languages in the database,

select * from fnd_languages where installed_flag in ('I', 'B')

You can see the values of NLS_LANGUAGE and NLS_TERRITORY and NLS_CODESET for each installed language. The environment variables values correspond to these values.

We shall now change the language of the session to French. Execute the following,

$ NLS_LANG=French_France.WE8ISO8859P1

$ export NLS_LANG

011514_1652_1.png

Now execute the FNDLOAD script

$ FNDLOAD apps/apps_dev6 O Y DOWNLOAD $FND_TOP/patch/115/import/afsload.lct FCA_HR_ESS_TOP_AU_fr.ldt MENU MENU_NAME="FCA_HR_ESS_TOP_AU"

Notice the messages are now in French. Open the log file L7788667.log.

Open the ldt file, FCA_HR_ESS_TOP_AU_fr.ldt. if you scroll down you will find the French translations on the prompts.


UPLOAD translations

To upload translations we need to upload English language first, else the AOL object in other installed languages will not be accepted by Oracle. The following command will upload the translations to the menu

$ FNDLOAD apps/apps_dev6 O Y UPLOAD $FND_TOP/patch/115/import/afsload.lct FCA_HR_ESS_TOP_AU_fr.ldt UPLOAD_MODE=NLS

The FNDLOAD command is the same except for the switch, UPLOAD_MODE=NLS. If this switch is not used the French translation will be set for all the installed languages.

Take care not to use the following switches

UPLOAD_MODE=REPLACE

CUSTOM_MODE=FORCE

If you use the switches for loading translations as given below the base language will be replaced. Execute the upload script

$ FNDLOAD apps/apps_dev6 O Y UPLOAD $FND_TOP/patch/115/import/afsload.lct FCA_HR_ESS_TOP_AU_fr.ldt UPLOAD_MODE=REPLACE CUSTOM_MODE=FORCE

Now view the menu from the front end

See that the base prompt has been changed to French from English. Now click on Translations button.

You can see that all languages have been changed to French.

Note: If you would like to change the language to Dutch the location is denoted as The Netherlands in the database.

This is different because the NLS_TERRITORY value is 2 words with a space in between. Therefore to set language to Dutch in Unix, use the following script.

$ NLS_LANG="Dutch_The Netherlands.WE8ISO8859P1"

Cheers!


How to migrate XLIFF files

$
0
0

XLIFF files can be migrated between Oracle instances using scripts. This is shown below.

Download XLIFF translations

To download the XLIFF files the script will be in the structure as below.

java oracle.apps.xdo.oa.util.XLIFFLoader DOWNLOAD \
-DB_USERNAME <db_username> \
-DB_PASSWORD <db_password> \
-JDBC_CONNECTION <jdbc_con_string> \
-APPS_SHORT_NAME <application_short_name> \
-DS_CODE <ds_code> \
-TEMPLATE_CODE <lob_code> \
-FILES_DIR <directory> \
-SUMMARY_FILE <summary_file>

Working sample

java oracle.apps.xdo.oa.util.XLIFFLoader DOWNLOAD \
-DB_USERNAME apps \
-DB_PASSWORD apps_dev6 \
-JDBC_CONNECTION dev6.na.******.com:1531:DEV6 \
-APPS_SHORT_NAME AMW \
-TEMPLATE_CODE XXEMPDET

The script has downloaded 2 XLIFF files. If you pick up the SQL script from the screen you will get, 

SELECT   l.application_short_name, lob_code, LANGUAGE, territory
    FROM xdo_lobs l,
         (SELECT application_short_name, template_code
            FROM xdo_templates_b
           WHERE mls_language IS NOT NULL
             AND application_short_name = :apps_short_name
             AND template_code = :template_code) b
   WHERE lob_type = 'MLS_TEMPLATE'
     AND l.application_short_name = b.application_short_name
     AND l.lob_code = b.template_code
ORDER BY l.application_short_name, l.lob_code

Executing the script in the database gives us 2 records for 2 translations

If we check for the translations on the template in XML Publisher Administrator responsibility we see that there are 2 active translations.

We see the XLIFF download script has functioned properly.


Upload XLIFF translations

Once  the XLIFF translations are downloaded the files can be uploaded to the target Oracle instance using the script below.

java oracle.apps.xdo.oa.util.XLIFFLoader UPLOAD \
-DB_USERNAME <db_username> \
-DB_PASSWORD <db_password> \
-JDBC_CONNECTION <jdbc_con_string> \
-APPS_SHORT_NAME <application_short_name> \
-TEMPLATE_CODE <template_code> \
-OWNER <owner> \
-CUSTOM_MODE [FORCE|NOFORCE] \
-FILE_NAME <file_name>

Working sample

java oracle.apps.xdo.oa.util.XLIFFLoader UPLOAD \
-DB_USERNAME apps \
-DB_PASSWORD apps_dev6 \
-JDBC_CONNECTION dev6.na.*****.com:1531:DEV6 \
-APPS_SHORT_NAME AMW \
-TEMPLATE_CODE XXEMPDET \
-FILE_NAME AMW_XXEMPDET_es_00.xlf

The translation will be loaded to the template in the target instance.

Cheers!


Provide Shipping Grants to selected users

$
0
0

All Oracle users do not have privileges to all functionalities of Order Management even though they might have Order Management responsibility. The super user allows which functionality individual users get. Here is how the users get access.

Create/View a Role

Responsibility: Order Management Super User

Navigation: Setup > Shipping > Grants and Role Definitions > Grants

Query on this form.

Notice that each role has access to certain functionalities.


Grant Role to a user

Responsibility: Order Management Super User

Navigation: Setup > Shipping > Grants and Role Definitions > Grants

Add a user, say ARAY.

Now check all the values for Role

Once the user is assigned a role he/she will get the privileges as setup for the role.

Cheers!


Bursting control file examples and delivery configuration

$
0
0

In the original article on XML bursting I had discussed how a concurrent program output can be split and mailed to multiple recipients. Here I have given examples of other delivery mode via bursting, FTP, Print, fax etc.

Here are some sample bursting control files for different delivery options.

Fax

<?<span class="hiddenSpellError">xml version="1.0" encoding="UTF-8"?>
<xapi:requestset xmlns:xapi="http://xmlns.oracle.com/oxp/xapi" type="bursting">
<xapi:globalData location="stream" />
<xapi:request select="/XXEMPDET/LIST_G_EMP/G_EMP">
<xapi:delivery>
<xapi:fax server="ipp://itprinters.*******-na.com/Printers/ITMIS1" port="631">
<xapi:number id="FAX1">01302836867
xapi:fax>
xapi:delivery>
<xapi:document output-type="pdf" delivery="FAX1">
<xapi:template type="rtf" location="/usr/tmp/XXEMPDET.rtf" />
xapi:document>
xapi:request>
xapi:requestset>



FTP

<?<span class="hiddenSpellError">xml version="1.0" encoding="UTF-8"?>
<xapi:requestset xmlns:xapi="http://xmlns.oracle.com/oxp/xapi" type="bursting">
<xapi:globalData location="stream" />
<xapi:request select="/XXEMPDET/LIST_G_EMP/G_EMP">
<xapi:delivery>
<xapi:ftp id="ftp1" server="uxitcl1b.na.com" user="user1" password="p@ssw0rd" remote-directory="/home/aray/migrate" remote-file="${EMPNO}.pdf" copies="1" />
xapi:delivery>
<xapi:document output-type="pdf" delivery="ftp1">
<xapi:template type="rtf" location="xdo://AMW.XXEMPDET.en.00?getSource=true" />
xapi:document>
xapi:request>
xapi:requestset>


Execute the program followed by the XML Publisher Bursting program. Check the directory

All files have been dropped in the directory


Print

<?xml version="1.0" encoding="UTF-8"?>
<xapi:requestset xmlns:xapi="http://xmlns.oracle.com/oxp/xapi" type="bursting">
<xapi:globalData location="stream" />
<xapi:request select="/XXEMPDET/LIST_G_EMP/G_EMP">
<xapi:delivery>
<xapi:print id="printer1" printer="http://lndcds02.eu.com:631/printers/DO_IT_LEX_T650" copies="1" />
xapi:delivery>
<xapi:document output-type="pdf" delivery="printer1">
<xapi:template type="rtf" location="xdo://AMW.XXEMPDET.en.00?getSource=true" />
      </xapi:document>
   </xapi:request>
</xapi:requestset>

Setup for printers

For printing via XML bursting the printer has to be set up as a CUPS printer. The setup of the CUPS printer is shown below as an example

CUPS server

The printer(s) has/have to be setup on a CUPS server.

Once the printer is setup it can be reached using the IPP (Internet Printing Protocol) URL on a web browser.

XDODelivery.cfg file setup

Once the printer is setup in CUPS server it has to be entered in a configuration file used by XML Publisher. The file name is XDODelivery.cfg. By default this file does not exist.

The setup for XDODelivery.cfg is given below

Create a folder named resource under $XDO_TOP folder

Go to $XDO_TOP/resource

Create a file named xdodelivery.cfg. The file content is given below.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://xmlns.oracle.com/oxp/delivery/config">
<servers>
<server name="DO_IT_LEX_T650" type="ipp_printer" default="true">
<uri>http://lndcds02.eu.*******.com:631/printers/DO_IT_LEX_T650</uri>
</server>
</servers>
</config>

The file is shown below

Save the file. Look for xdodelivery.cfg file in $XDO_TOP/resource.

Now the setup is complete and you can use the printer in the configuration file.

Note: The printer in the configuration file can also be referred by seeded programs like Customer Invoice or Dunning Letter, etc. E.g. the following profile options need to be set to a CUPS printer that is already defined in the xdodelivery.cfg file.


In addition other servers can also be setup in the file, e.g. fax servers.

Sample xdodelivery.cfg file

<?xml version='1.0' encoding='UTF-8'?>
xmlns="http://xmlns.oracle.com/oxp/delivery/config">
<! - ======================================================== - >
<! - servers section - >
<! - List your pre-defined servers here. - >
<! - ======================================================== - >
<servers>
	ITMIS1" type="ipp_printer" default="true">
	ipp://itprinters.******-na.com/Printers/ITMIS1
	</server>

	myprinter2" type="ipp_printer" >
	<host>myprinter2.oracle.com</host>
	<port>631</port>
	ipp://myprinter2.oracle.com:631/printers/myprinter2
	<authType>basic</authType>
	<username>xdo</username>
	<password>xdo</password>
	</server>

	<server name="ITMIS1fax" type="ipp_fax" default="true">
	ipp://itprinters.******-na.com/Printers/ITMIS1
	</server>

	<server name="myfax1" type="ipp_fax">
	<host>myfax1.oracle.com</host>
	<port>631</port>
	<uri>ipp://myfax1.oracle.com:631/printers/myfax1</uri>
	</server>

	<server name="mysmtp1" type="smtp_email" default="true">
	<host>uxitcl1b.na.******.com</host>
	<port>25</port>
	</server>

	<server name="oracledev3" type="smtp_email" >
	<host>msitmx02.na.******.com</host>
	<port>25</port>
	<username>oracledev3</username>
	<password>******10</password>
	</server>
</servers>
<! - ======================================================== - >
<! - properties section - >
<! - List the system properties here. - >
<! - ======================================================== - >
<properties>
/usr/tmp
<property name="ds-buffering">true</property>
</properties>
<! - ======================================================== - >
<! - channels section - >
<! - List the custom delivery channels here. - >
<! - ======================================================== - >
<channels>
<channel name="file">oracle.apps.xdo.delivery.file.FileDeliveryRequestFactory</channel>
</channels>
</config>

Cheers!



Custom concurrent program in Shipping Document Set

$
0
0

You can create custom concurrent programs that can be configured to be submitted after,

  1. Pick Release
  2. Ship Confirm

The programs are added in the Shipping Document Sets form.

Navigation: Setup > Shipping > Documents > Document Sets

Query for Document Set as All Pick Release Documents

There is only 1 concurrent program added for this Document Set, Shipping Exceptions Report.

As the Document Set we have used for Pick Release is “All Pick Release Documents” the only program which was executed after Pick Release was Shipping Exceptions Report.

As a part of document sets only a few parameter names are supported in Shipping document sets.

The parameters supported are in the following PL/SQL code from the package WSH_DOCUMENT_SETS :

cursor c_document_params in procedure WSH_DOCUMENT_SETS.Print_Document_Sets (file WSHDSPRB.pls)

CURSOR c_document_params(i NUMBER) IS
SELECT
decode(
lower(decode(l_execution_method_code, ‘P’, srw_param, ‘K’, srw_param, end_user_column_name)), –Bugfix 7493868 Modified decode
‘p_request_id’, to_char(l_doc_set_params(i).p_request_id), — bug 1589045
‘p_customer_id’, to_char(l_doc_set_params(i).p_customer_id),
‘p_item_id’, to_char(l_doc_set_params(i).p_item_id),
‘p_item_cate_set_id’, to_char(l_doc_set_params(i).p_item_cate_set_id),
‘p_item_category_id’, to_char(l_doc_set_params(i).p_item_category_id),
‘p_transaction_type_id’, to_char(l_doc_set_params(i).p_transaction_type_id),
‘p_header_id_low’, to_char(l_doc_set_params(i).p_header_id_low),
‘p_header_id_high’, to_char(l_doc_set_params(i).p_header_id_high),
‘p_salesrep_id’, to_char(l_doc_set_params(i).p_salesrep_id),
‘p_user_id’, to_char(l_doc_set_params(i).p_user_id),
‘p_territory_name’, l_doc_set_params(i).p_territory_name,
‘p_item_display’, l_doc_set_params(i).p_item_display,
‘p_item_flex_code’, l_doc_set_params(i).p_item_flex_code,
‘p_organization_id’, to_char(l_doc_set_params(i).p_organization_id),
‘p_org_id’, to_char(l_doc_set_params(i).p_organization_id),
‘p_sort_by’, to_char(l_doc_set_params(i).p_sort_by),
‘p_show_functional_currency’, l_doc_set_params(i).p_show_functional_currency,
‘p_set_of_books_id’, to_char(l_doc_set_params(i).p_set_of_books_id),
‘p_order_date_low’, to_char(l_doc_set_params(i).p_order_date_low),
‘p_order_date_high’, to_char(l_doc_set_params(i).p_order_date_high),
‘p_delivery_date_low’, to_char(l_doc_set_params(i).p_delivery_date_low),
‘p_delivery_date_high’, to_char(l_doc_set_params(i).p_delivery_date_high),
‘p_freight_code’, l_doc_set_params(i).p_freight_code,
‘p_delivery_id’, to_char(l_doc_set_params(i).p_delivery_id),
‘p_delivery_id_high’, to_char(l_doc_set_params(i).p_delivery_id_high),
‘p_delivery_id_low’, to_char(l_doc_set_params(i).p_delivery_id_low),
‘p_trip_id’, to_char(l_doc_set_params(i).p_trip_id),
‘p_trip_id_high’, to_char(l_doc_set_params(i).p_trip_id_high),
‘p_trip_id_low’, to_char(l_doc_set_params(i).p_trip_id_low),
‘p_bill_of_lading_number’, to_char(l_doc_set_params(i).p_bill_of_lading_number),
‘p_trip_stop_id’, to_char(l_doc_set_params(i).p_trip_stop_id),
‘p_departure_date_low’, to_char(l_doc_set_params(i).p_departure_date_low),
‘p_departure_date_high’, to_char(l_doc_set_params(i).p_departure_date_high),
‘p_container_id’, to_char(l_doc_set_params(i).p_container_id),
‘p_print_cust_item’, l_doc_set_params(i).p_print_cust_item,
‘p_print_mode’, l_doc_set_params(i).p_print_mode,
‘p_print_all’, l_doc_set_params(i).p_print_all,
‘p_sort’, l_doc_set_params(i).p_sort,
‘p_delivery_date_lo’, to_char(l_doc_set_params(i).p_delivery_date_lo),
‘p_delivery_date_hi’, to_char(l_doc_set_params(i).p_delivery_date_hi),
‘p_freight_carrier’, l_doc_set_params(i).p_freight_carrier,
‘p_quantity_precision’, l_doc_set_params(i).p_quantity_precision,
‘p_locator_flex_code’, l_doc_set_params(i).p_locator_flex_code,
‘p_warehouse_id’, to_char(l_doc_set_params(i).p_warehouse_id),
‘p_pick_slip_num_low’, to_char(l_doc_set_params(i).pick_slip_num_l),
‘p_pick_slip_num_high’, to_char(l_doc_set_params(i).pick_slip_num_h),
‘p_order_type_id’, to_char(l_doc_set_params(i).p_order_type_id), –Bugfix 3604021
‘p_order_num_l’, to_char(l_doc_set_params(i).p_order_num_l),
‘p_order_num_h’, to_char(l_doc_set_params(i).p_order_num_h),
‘p_order_num_low’, to_char(l_doc_set_params(i).p_order_num_low),
‘p_order_num_high’, to_char(l_doc_set_params(i).p_order_num_high),
‘p_move_order_low’, l_doc_set_params(i).p_move_order_l,
‘p_move_order_high’, l_doc_set_params(i).p_move_order_h,
‘p_ship_method_code’, l_doc_set_params(i).p_ship_method_code,
‘p_customer_name’, l_doc_set_params(i).p_customer_name,
‘p_pick_status’, l_doc_set_params(i).p_pick_status,
‘p_detail_date_low’, to_char(l_doc_set_params(i).p_detail_date_l),
‘p_detail_date_high’, to_char(l_doc_set_params(i).p_detail_date_h),
‘p_exception_name’, l_doc_set_params(i).p_exception_name,
‘p_logging_entity’, l_doc_set_params(i).p_logging_entity,
‘p_location_id’, to_char(l_doc_set_params(i).p_location_id),
‘p_creation_date_from’, to_char(l_doc_set_params(i).p_creation_date_from),
‘p_creation_date_to’, to_char(l_doc_set_params(i).p_creation_date_to),
‘p_last_update_date_from’, to_char(l_doc_set_params(i).p_last_update_date_from),
‘p_last_update_date_to’, to_char(l_doc_set_params(i).p_last_update_date_to),
‘p_severity’, l_doc_set_params(i).p_severity,
‘p_status’, l_doc_set_params(i).p_status,
‘p_text1′, l_doc_set_params(i).p_text1,
‘p_text2′, l_doc_set_params(i).p_text2,
‘p_text3′, l_doc_set_params(i).p_text3,
‘p_text4′, l_doc_set_params(i).p_text4,
‘p_currency_code’, l_doc_set_params(i).p_currency_code,
‘p_printer_name’, l_doc_set_params(i).p_printer_name,
‘UNSUPPORTED’)
arg_value,
end_user_column_name,
required_flag,
default_value,
default_type,
flex_value_set_id,
lower(decode(l_execution_method_code, ‘P’, srw_param, end_user_column_name)) parameter_name
FROM
fnd_descr_flex_column_usages
WHERE application_id = l_application_id
AND descriptive_flexfield_name = ‘$SRS$.’||l_concurrent_program_name
AND enabled_flag = ‘Y’
ORDER BY
column_seq_num;

Custom program details

Concurrent Program definition

Click on Parameters

Note that the tokens of all 3 parameters match with the parameters listed in cursor c_document_params in procedure WSH_DOCUMENT_SETS.Print_Document_Sets

Create the data definition

Create the template

When Pick Release process is kicked off this report will be kicked off.

Cheers!


How to check whether a patch has been applied in Oracle

$
0
0

We can check whether a particular patch has been applied in Oracle in 2 ways, from the front end form or from the backend. Both methods are given below.

Apps form

Responsibility: System Administrator

Navigation: System Administration > Oracle Applications Manager > License Manager

Click on Licensed Products under Reports

The list of licensed applications/modules are displayed here. Click on a Product Name, say Payables.

The patches applied for this module are displayed. You can search for the patches as well.

 

Using SQL

The same patches can be viewed from the database. All installed patches are listed in AD_BUGS table.

Run the following SQL,

SELECT *
  FROM ad_bugs
 WHERE bug_number = '14488491'

Cheers!


Transaction setup for Sales Orders in OM

$
0
0

I have shown example of transaction setup for Sales Orders below.

Responsibility: Order management super user

Navigation: Setup > Transaction Types > Define

Query for Transaction Type, STANDARD-UK.


Assigning workflow to the order type:

You can assign the header level workflow by clicking on the LOV for Fulfillment Flow.

You can select the workflow for the header level. Click on OK on selecting the workflow. Back on the main form click on Assign Line Flows button.

A workflow process is already assigned for the order lines. You can add another flow for another line type as shown below.

After selecting the workflow on the header and line levels come back to the Transaction Type form and click on Validate Workflow button.

A request will be submitted to check the status of the workflow. The concurrent program is Validate OM Workflow. If you check the SRS window you will see the request.

Check the output of the request

The output in text,

Validating Order Type : STANDARD-UK (1901)
------------------------------------------

1. Please verify that the value for attribute WAIT_RELATIVE_TIME of activity WAIT in process R_STANDARD_HEADER ( Order Flow - Generic ) is greater than the average time it takes Workflow Background Process to complete.

2. Please verify that activity SHIP_LINE precedes FULFILL_LINE in process R_STANDARD_LINE ( Line Flow - Generic ).

3. Please verify that the value for attribute WAIT_RELATIVE_TIME of activity WAIT in process R_STANDARD_LINE ( Line Flow - Generic ) is greater than the average time it takes Workflow Background Process to complete.

4. Please verify that activity SHIP_LINE precedes INVOICE_INTERFACE in process R_STANDARD_LINE ( Line Flow - Generic ).


Set Approvals:

Click on Approvals button on the Transaction Type form.

You will find that the approval hierarchy is defined for a transaction type. There are 2 roles defined in the hierarchy, DON OM Return User and DON Order Management Super User.

If you query for both roles in the database you will find them as shown below.

select * from wf_roles where display_name IN
 ('DON OM Return User',
 'DON Order Management Super User')


Credit Check Rule:

On the Transaction Type form the Credit Check Rules are defined for each stage of the order, i.e. Booking (mentioned as Ordering on the form), Picking, Packing and Shipping.

The Credit Rules are picked up from the Credit Check Rules form.

Navigation: Setup > Credit > Define Credit Check Rules

Query for Book – GBP.

Check Exposure tab

Shipping details:

We can define preset controls on the Transaction Types. On this form click on Shipping tab.

Finance:

The finance rules can also be set on the transaction type. Click on Finance tab on Transaction Types form.

Cheers!


Concurrent program output delivery options in Oracle R12

$
0
0

Oracle R12 has given the users a new set of delivery options. Users no longer need to run a concurrent program, save the output of the program on their local computer and then email, FTP, fax or print the output file. This task can be automatically handled directly from the SRS form.

Suppose if you had to print out a scheduled request everyday it would be a daily time consuming task. Oracle now allows you to get rid of this cumbersome process without the need of having a developer write code. It can be very simply done by configuring the request.

Here’s how it is done:

Submit a request

Click on Delivery Opts button

The Deliver form allows the output of the concurrent program to be sent to

  1. Printer
  2. Email
  3. Fax
  4. FTP directory

Email

Let us send the output as an email. Click on the Email tab

Click on From field

Notice that the From email id and the Subjects are populated automatically. The From email is being populated from the user settings.

Now enter the recipient email id

Press OK and submit the request. Once the request is over the email is sent out.

Notice that the PDF output is attached to the email.


FTP

Enter details

Check the FTP server directory


Print

To print the output of a concurrent program a printer has to be configured first.

Responsibility: System Administrator

Navigation: System Administration > Delivery Options

Click on Create

You can enter the IPP printer details in this form.

Important: The printer should be IPP enabled. IPP printers can be accessed via a URL. E.g. The IPP URL for the printer is

http://lndcds02.eu.*****.com:631/printers/DO_IT_LEX_T650

Host name: lndcds02.eu.*****.com

Port: 631

Printer Name: DO_IT_LEX_T650

If you enter the IPP URL in the web browser you will see the printer


Enter the IPP details in the form

Click on Apply button

The printer will appear in the Search page

The printer is completely setup now.

XDODelivery.cfg file has to be configured as well. This configuration is shown in this article. If the setup is not done, you will get errors in the OPP as shown below.

[12/3/13 2:14:43 AM] [OPPServiceThread1] Post-processing request 59483156.

[12/3/13 2:14:43 AM] [1940623:RT59483158] XML Publisher post-processing action complete.

[12/3/13 2:14:43 AM] [1940623:RT59483158] Completed post-processing actions for request 59483158.

[12/3/13 2:14:45 AM] [OPPServiceThread0] Post-processing request 59483157.

[12/3/13 6:18:15 AM] [OPPServiceThread1] Post-processing request 59483253.

[12/3/13 6:46:20 AM] [OPPServiceThread0] Post-processing request 59483263.

[12/3/13 6:46:20 AM] [1940623:RT59483263] Executing post-processing actions for request 59483263.

[12/3/13 6:46:20 AM] [1940623:RT59483263] Starting XML Publisher post-processing action.

[12/3/13 6:46:20 AM] [1940623:RT59483263]

Template code: XXEMPDET

Template app: AMW

Language: en

Territory: US

Output type: PDF

[12/3/13 6:46:21 AM] [1940623:RT59483263] XML Publisher post-processing action complete.

[12/3/13 6:46:21 AM] [1940623:RT59483263] CONC-OPP-DELIV BEGIN (REQID=59483263)

[12/3/13 6:46:21 AM] [1940623:RT59483263] Beginning print delivery

[12/3/13 6:46:21 AM] [UNEXPECTED] [1940623:RT59483263] java.lang.NumberFormatException: For input string: “631DO_IT_LEX_T650″

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:498)

at java.lang.Integer.parseInt(Integer.java:539)

at oracle.apps.xdo.delivery.http.HTTPUtil.getPort(HTTPUtil.java:212)

at oracle.apps.xdo.delivery.http.HTTPRequest.<init>(HTTPRequest.java:134)

at oracle.apps.xdo.delivery.ipp.IPPDeliveryRequestHandler.submitRequest(IPPDeliveryRequestHandler.java:183)

at oracle.apps.xdo.delivery.AbstractDeliveryRequest.submit(AbstractDeliveryRequest.java:1270)

at oracle.apps.fnd.cp.opp.PrintDeliveryProcessor.deliver(PrintDeliveryProcessor.java:81)

at oracle.apps.fnd.cp.opp.DeliveryProcessor.process(DeliveryProcessor.java:91)

at oracle.apps.fnd.cp.opp.OPPRequestThread.run(OPPRequestThread.java:176)

[12/3/13 6:46:21 AM] [1940623:RT59483263] Completed post-processing actions for request 59483263.

Fire the printer

Go to the SRS form and select the concurrent program.

Click on Delivery Opts button

Select Printers LOV

DON IT Printer is selected automatically as it is the only printer setup. Click OK and submit the request. The output will be fired to the printer as well.

Cheers!


How to get the file versions from the Oracle database

$
0
0

There are many reasons why we might need to get the file version of a particular code within Oracle. The main reason being that Oracle requires the file version of certain files within the Oracle instance when we a service request (SR) is opened in Oracle Support/Metalink.

Normally we tend to go directly to the file system and pull up the file to get the file version. We use commands like adident or strings or grep. Alternatively we can get the file versions from a seeded database table.

Note: The seeded table will only contain versions for seeded Oracle files.

Database query to get file versions

SELECT   adf.app_short_name, fap.basepath, adf.subdir, adf.filename, adv.file_version_id,
         adv.VERSION, adv.creation_date
    FROM ad_files adf, ad_file_versions adv, fnd_application fap
   WHERE adf.file_id = adv.file_id
   and fap.application_short_name = adf.app_short_name
     AND adf.filename IN ('qpprg.ldt', 'ARHBRGVS.pls', 'qaevents.xml',
        'ExpensesAttachmentService.class', 'ZXXEUSL.rdf', 'AKDAPREG.fmb')
ORDER BY adf.filename, adv.creation_date DESC

Execute the query in the database


Comparison of the file versions between the database table and the file system

Now we can compare the file version with the file in the file system. Let us take the file, ARHBRGVS.pls. The data returned for this file is,

Column name Value
APP_SHORT_NAME AR
BASEPATH AR_TOP
SUBDIR patch/115/sql
FILENAME ARHBRGVS.pls

These values tell us where to find the file on the server. Log in to Unix. Go the directory for this file, i.e. BASEPATH/SUBDIR/FILENAME. In this case it will be $BASEPATH/SUBDIR/FILENAME and it will translate to $AR_TOP/patch/115/sql/ARHBRGVS.pls.

Execute the following commands

$ cd $AR_TOP/patch/115/sql/

$ pwd

Now let us see if the file named, ARHBRGVS.pls, exists in this directory

$ ls -ltr ARHBRGVS.pls

So the file exists in the expected directory. Now let us check for the file version

$ strings ARHBRGVS.pls | grep Header

We get the version from the file and it is 120.6.12010000.2.

If you compare this value with the value in the table you will find that the value matches. Therefore getting the file version from the table is the same as getting it from the actual file itself. If we take the file version from the table, it will be easier for us. Also, we might not always have access to the file system to query for the file.


Forms

Let us try the fmb file.

Looking at the data the file, AKDAPREG.fmb, should be in $AK_TOP/forms/US. Actually the compiled version of the fmb file will reside in $AK_TOP/forms/US and the uncompiled version will be in $AU_TOP/forms/US.

$ ls $AK_TOP/forms/US/AKDAPREG*

Let’s check the file in $AU_TOP/forms/US

The uncompiled version resides here. Let’s check the version

$ strings $AU_TOP/forms/US/AKDAPREG.fmb | grep Header | grep AKDAPREG.fmb

You can see the version in the file matches the version in the database.


Reports

Let us check a rdf file

Reports do not have a compiled version. Hence the rdf file should reside in $ZX_TOP/reports/D

$ adident Header $ZX_TOP/reports/D/ZXXEUSL.rdf

The version we get is the same as the table.


XML file

Let’s check the XML file

The file location will be $QA_TOP/patch/115/import/D. Let us check now

$ grep Header $QA_TOP/patch/115/import/D/qaevents.xml

The version in the file matches with the version in the table.

Cheers!


Viewing all 128 articles
Browse latest View live