Oracle Applications FNDLOAD Unix Scripts
Oracle Applications FNDLOAD Unix Scripts
TECHNICAL DESIGN
Team: Technology
Creation Date: 2 July 2009
Created By: Brendan Furey (BrendanPF@Yahoo.com)
Last Updated: 6 April 2010
Control: 31921461.doc
Version: 1.3
Document Control
Change Record
Date Author Version Change Reference
Document Control..............................................................................i
Change Record..............................................................................i
Introduction......................................................................................4
Functional Considerations...................................................................4
Data Integrity..............................................................................4
Values Unknown at Download Time................................................5
Who Columns...............................................................................5
Forcing Updates...........................................................................5
Technical Overview............................................................................5
Generic Download Specification......................................................5
Generic Upload Specification..........................................................7
Unix Script List.............................................................................8
Value Sets........................................................................................9
Notes..........................................................................................9
Download....................................................................................9
Upload......................................................................................10
Concurrent Programs.......................................................................11
Notes........................................................................................11
Download..................................................................................11
Upload......................................................................................12
Request Sets...................................................................................15
Notes........................................................................................15
Download..................................................................................15
Upload......................................................................................16
Profile Values..................................................................................19
Notes........................................................................................19
Download..................................................................................19
Upload......................................................................................20
Responsibilities................................................................................21
Notes........................................................................................21
Download..................................................................................21
Upload......................................................................................22
Users.............................................................................................24
Notes........................................................................................24
Download..................................................................................24
Upload......................................................................................25
Descriptive Flexfields.......................................................................26
Document Control ii
Notes........................................................................................26
Download..................................................................................26
Upload......................................................................................28
Lookups.........................................................................................29
Notes........................................................................................29
Download..................................................................................29
Upload......................................................................................30
XML Data Definition.........................................................................31
Notes........................................................................................31
Upload......................................................................................31
XML Template Files..........................................................................33
Notes........................................................................................33
Download..................................................................................33
Upload......................................................................................35
References......................................................................................38
Functional Considerations
This section discusses the functional behaviour required when using FNDLOAD
within a release to production process. This determines the processing within our
scripts.
Data Integrity
FNDLOAD allows for the download of individual entity instances or groups of
entity instances. For example, all responsibilities couild be downloaded within a
specified application. However, this creates a serious risk of uploading bad data
from development into production. For this reason, we download only specified
individual entity instances that are assumed to have been fully tested. Where
necessary, these can then be combined into one file (or a small number of files)
for installation convenience.
A second risk factor arises from the fact that FNDLOAD downloads referenced
entity instances as well as the named entity instance. For example, downloading
a concurrent program results in all value sets referenced also being downloaded
into the LDT file. Since referenced entities may not be part of the relevant
development project, they may have been separately modified. In general, only
what has been modified as part of the development, and hence tested, should be
uploaded. For this reason, we post-process each downloaded LDT file to remove
referenced entities (but not the references to them of course).
References 4
Values Unknown at Download Time
Certain values downloaded may not be appropriate for uploading. For example,
effective start dates should not be earlier than the installation date, for auditing
reasons; also values that are sequence-generated references and are new need
to be different in production from development. Who columns are another case,
as discussed in the next section. For these values, we substitute placeholders via
our download scripts, and replace them with the correct values in the upload
scripts.
Who Columns
‘Who’ columns are standard Oracle columns used to store the users who created
and last updated the record, with the datetimes. FNDLOAD normally uploads the
update values from the source system, and the same values for the creation
columns for new records. We believe this is inappropriate for system-generated
updates (for auditing reasons), and so we substitute SYSADMIN for the user, and
use a placeholder for the update/creation date for processing as discussed in the
previous section.
Forcing Updates
FNDLOAD uses an algorithm to determine whether an entity instance that exists
on the target system should be overwritten or not, depending on such things as
the update user and datetime on each side. As long as the data integrity
measures outlined above have been taken, it is appropriate to pass the
parameter CUSTOM_MODE=FORCE, which causes the updates to happen
disregarding the usual algorithm.
Technical Overview
The upload and download scripts are specified generically here. For specific
details, see the actual scripts, and note that some of them may vary slightly from
the specifications. Note also that testing of the scripts took place on Oracle
Applications release 11.5.10. Naturally, any proposed use must be tested in the
user’s own environment.
Input Parameters
Name Description Notes
Password of apps Oracle
Apps Password
user
Entity Key Double-quote if spaces
Entity key value, field 1
Value 1
Entity Key Sometimes required
Entity key value, field 2
Value 2
References 5
FNDLOAD Parameters
Po Notes
Name Value
s
1 User/Password apps/[Apps Password]
2 0
3 Y
Upload/Downlo
4 DOWNLOAD
ad?
$FND_TOP/patch/115/import/
5 Control File
[LCT File].lct
For keys with spaces, the
spaces are translated into
underscores. A 2-letter
[Entity_Key_Value_1]_[Entity
6 LDT File suffix is used as a naming
Suffix].ldt
convention. If necessary, we
may combine two key
values for the prefix
Sometimes secondary entity
7 Entity Code [Entity Code]
code also required
[Entity Key Name 1]=[Entity Key
8 Entity Key 1
Value 1]
[Entity Key Name 21]=[Entity Key Sometimes required
9 Entity Key 2
Value 2]
Next two are for profiles only, and only if at responsibility level. I have only tested
profiles at site and responsibility level
10 Profile Level LEV=RESPONSIBILITY
Profile Level
11 LEV_NAME=[Responsibility Key]
Value
Processing
The processing steps for all scripts (in principle!) are outlined below.
• Validate parameters
• Set LCT and LDT file names
• Check existence of LCT files
• Check Oracle connection and password
• Download using FNDLOAD to temporary LDT file
• Remove all referenced entity blocks from the temporary LDT file and copy
to the output LDT file
• List the referenced entities that were removed
• Search LDT file and report on success or failure, writing out the number of
records downloaded, with any additional data relevant to the entity
The upload processing allows for the presence of a placeholder for current date,
ph_sysdate. This can be set manually or programmatically as desired, for start
dates and update dates. The owner of the records can be set manually to
SYSADMIN if desired.
References 6
Generic Upload Specification
Input Parameters
Name Description Notes
Password of apps Oracle
Apps Password
user
File Name 1 File name 1
For concurrent programs
only the name of a
File Name 2 File name 2
generic request groups
LDT file may be passed
FNDLOAD Parameters
Po Notes
Name Value
s
1 User/Password apps/[Apps Password]
2 0
3 Y
Upload/Downlo
4 UPLOAD
ad?
$FND_TOP/patch/115/import/
5 Control File
[LCT File].lct
6 LDT File [File name]
Upload regardless of
7 Mode CUSTOM_MODE=FORCE
ownership or dates
8 Dash - Upload all in file
Processing
The processing steps for all scripts (in principle!) are outlined below.
• Validate parameters
• Set LCT and LDT file names
• Check existence of LCT files
• Check Oracle connection and password
• Search LDT file for presence of referenced entity blocks, and issue warning
if found
• Replace ph_sysdate placeholders in input file with today’s date, to create
the actual LDT file
• Upload using FNDLOAD
• Case: concurrent program, where a generic request groups LDT file is
passed:
o Obtain name of program (there must be only one) from the input file
into local variable
o Replace REPNAME placeholders in input generic request groups LDT
file with program to make actual request groups LDT file
References 7
o Upload request group assignments using FNDLOAD
• End Case
• Obtain list of entity keys from the input file into local variable
• List the entity records uploaded, with any relevant details, passing to SQL
the local variable as a lexical parameter (SQL session)
o For concurrent programs, the request group assignments are listed
too
References 8
Value Sets
Notes
These scripts are for value set migration. The download applies to one value set,
but the upload can process multiple value sets in a file, which can be built by
merging several files manually or programmatically.
Download
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_DownVS.x
#
# DESCRIPTION : Downloads a VS XXYYvset to file XXYYvset_VS.ldt
#
# PARAMETERS : $1 - apps password
# $2 - Value Set name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 23-Jul-01 B Furey Base Version
# 1.1 14-Nov-08 B Furey New version
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [Value Set name]
exit 1
fi
admin_dir=$PWD
lct_file=$FND_TOP/admin/import/afffload.lct
ldt_file=$admin_dir/`echo "$2" | tr "[ ]" "[_]"`_VS.ldt
echo Downloading the Value Set "$2" to file $ldt_file...
echo FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file VALUE_SET FLEX_VALUE_SET_NAME="$2"
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file VALUE_SET FLEX_VALUE_SET_NAME="$2"
#
# Check whether VS is Independent. If so, the values will not have been downloaded, need to redo with
# different parameters.
#
n_vtype_i=`grep -c "VALIDATION_TYPE = \"I\"" $ldt_file`
if [ $n_vtype_i = 1 ] ; then
echo Value Set is type Independent, redoing download...
echo FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file VALUE_SET_VALUE FLEX_VALUE_SET_NAME="$2"
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file VALUE_SET_VALUE FLEX_VALUE_SET_NAME="$2"
fi
#
# Check whether the definition file contains any Value Sets
#
n_vs=`grep -c "BEGIN VALUE" $ldt_file`
if [ $n_vs = 0 ] ; then
echo Value Set "$2" has not been downloaded, possibly does not exist !
exit 1
fi
References 9
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpVS.x
#
# DESCRIPTION : Uploads the definition of a Value Set
#
# PARAMETERS : $1 - apps password
# $2 - file name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.1 18-Jun-01 B Furey Base Version, take VS name as parameter and
# only one VS allowed
# 1.2 09-Jan-09 B Furey Now use filename as second parameter, and allow
# multiple VSs, but backward-compatible
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 \"apps password\" \"value set name\" - quotes optional
exit 1
fi
admin_dir=$PWD
#
# Set the names of the lct and ldt files and check existence
#
lct_file=$FND_TOP/patch/115/import/afffload.lct
#ldt_file=$admin_dir/$2
ldt_file=$admin_dir/`echo "$2" | tr "[ ]" "[_]"`
if [ ! -s "$lct_file" ] ; then
echo The standard Value Set load configuration file $lct_file does not exist !
exit 1
fi
if [ ! -s "$ldt_file" ] ; then
ldt_file=$admin_dir/`echo "$2" | tr "[ ]" "[_]"`_VS.ldt
if [ ! -s "$ldt_file" ] ; then
echo The Value Set load definition file $ldt_file does not exist !
exit 1
fi
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
echo Uploading Value Set from file $ldt_file...
FNDLOAD apps/$1 0 Y UPLOAD $lct_file $ldt_file CUSTOM_MODE=FORCE -
vss=`grep "BEGIN VALUE_SET " $ldt_file | cut -d ' ' -f 3 | sed -r 's/"(.+)"/'\''\1'\''/' | tr '\n' ',' |
sed -r 's/,$//'`
References 10
!!
Concurrent Programs
Notes
These scripts are for concurrent program migration, and should be used for one
program at a time. It is recommended to always upload value sets separately.
Download
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_DownCP.x
#
# DESCRIPTION : Downloads a CP XXYYprog to file XXYYprog_CP.ldt
# in $XXYY_TOP/admin.
# The file is stripped of Value Set definitions,
# and customised Value Sets XXZZvset are downloaded
# to file XXZZvset_VS.ldt in $XXZZ_TOP/admin.
#
# PARAMETERS : $1 - apps password
# $2 - Program short name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 19-Jun-01 B Furey Base Version
# 1.1 21-Jun-01 B Furey Small code tidy
# 1.2 28-Jun-01 B Furey Use afffload.lct for Value Sets and check if prog downloaded
# 1.3 04-Jul-01 B Furey Check the VS type to determine entity keyword
# 1.4 10-Oct-08 B Furey Use working directory, and awk iso nawk
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [Program name]
exit 1
fi
admin_dir=$PWD
lct_file=$FND_TOP/admin/import/afcpprog.lct
lct_file_vs=$FND_TOP/admin/import/afffload.lct
ldt_file=$admin_dir/$2_CP.ldt
ldt_temp=/tmp/$2_CP.ldt
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
echo Downloading the Program to file $ldt_file...
echo FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_temp PROGRAM IMCOMPATABILITY CONCURRENT_PROGRAM_NAME=$2
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_temp PROGRAM IMCOMPATABILITY CONCURRENT_PROGRAM_NAME=$2
#
# Check whether the definition file contains any Programs
#
References 11
n_vs=`grep -c "BEGIN PROGRAM" $ldt_temp`
if [ $n_vs = 0 ] ; then
echo Program $2 has not been downloaded, possibly does not exist !
exit 1
fi
awk 'BEGIN {
IN_VSET="F"
end_offset=2}
$1 == "BEGIN" && $2 == "VALUE_SET" {
IN_VSET="T"
}
$1 == "END" && $2 == "VALUE_SET" {
IN_VSET="F"
end_offset=0
}
{
if (IN_VSET == "F" && ++end_offset > 2) print $0
}
' $ldt_temp > $ldt_file
echo The program references the following Value Sets which have been deleted from the ldt file:
for vs in `awk '$1 == "BEGIN" && $2 == "VALUE_SET" {print $3}' $ldt_temp | sed 's/"//g'`
do
echo $vs
done
echo Downloading the following Value Sets:
for vs in `awk '$1 == "BEGIN" && $2 == "VALUE_SET" {print $3}' $ldt_temp | sed 's/"//g'|grep XX`
do
echo $vs
lnvs=`grep -n "BEGIN VALUE_SET \"$vs\"" $ldt_temp | awk -F: '{print $1}'`
ln=`expr 2 + $lnvs`
vtype=`awk -F\" -v LN=$ln 'NR == LN {print $2}' $ldt_temp`
if [ $vtype = "I" ] ; then
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file_vs $admin_dir/"$vs"_VS.ldt VALUE_SET_VALUE
FLEX_VALUE_SET_NAME=$vs
else
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file_vs $admin_dir/"$vs"_VS.ldt VALUE_SET
FLEX_VALUE_SET_NAME=$vs
fi
done
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpCP.x
#
# DESCRIPTION : Uploads the definition of a Concurrent Program
# with RG assignments for any custom module
#
# PARAMETERS : $1 - apps password
# $2 - file name
# $3 - name of generic Request Group definition file or
"none"
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0x 28-Feb-03 B Furey Symantec
# 1.3x 12-Mar-03 B Furey Removed Request Set treatment into separate script, dropping parameter 2
# 1.4x 20-Aug-03 B Furey Corrected treatment for $3 = none, and no parameters
# 1.1 10-Oct-08 B Furey New version
# 1.2 18-Mar-09 B Furey Replace new placeholder sysdate by actual sysdate, and CUSTOM_MODE=FORCE
# 1.3 17-Jun-09 B Furey Use placeholder ph_sysdate instead of sysdate
#
#*******************************************************************************
#
# Check input parameters
References 12
#
if [[ $# != 3 ]] ; then
echo Usage: $0 \"apps password\" \"program short name\" \"Request Group file\" - quotes
optional
exit 1
fi
admin_dir=$PWD
ldt_rg=$admin_dir/$3
sysdate=`date "+%Y/%m/%d"`
echo $0 $sysdate
lct_prog=$FND_TOP/patch/115/import/afcpprog.lct
lct_rg=$FND_TOP/patch/115/import/afcpreqg.lct
ldt_prog=$admin_dir/$2
ldt_temp=/tmp/$2
#
# Check all the necessary files are there. First, the Request Group file matching the parameter passed...
#
if [[ ! -s "$ldt_rg" && ! "$3" = "none" ]] ; then
echo The generic Request Group file $ldt_rg does not exist
exit 1
fi
#
#...then the standard Program/Set and Request Group configuration files
#
if [ ! -s "$lct_prog" ] ; then
echo The standard Program load configuration file $lct_prog does not exist !
exit 1
fi
if [ ! -s "$lct_rg" ] ; then
echo The standard Request Group load configuration file $lct_rg does not exist !
exit 1
fi
#
#...finally the Program/Set definition file
#
if [ ! -s "$ldt_prog" ] ; then
echo The Program/Set load definition file $ldt_prog does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
#
# Check whether the definition file contains any Value Sets
#
n_vs=`grep -c "BEGIN VALUE_SET" $ldt_prog`
if [ ! $n_vs = 0 ] ; then
echo Warning: File $ldt_prog contains $n_vs Value Set definitions. Is this wise...?
fi
#
# First the prog...
#
sed "s:ph_sysdate:$sysdate:" $ldt_prog > $ldt_temp
chmod +w $ldt_temp
References 13
app=`grep "BEGIN PROGRAM " $ldt_prog | cut -d ' ' -f 4 | sed -r 's/"(.+)"/\1/' | cut -d ' ' -f
1`
echo Application $app and programs...
for cp in $cps1
do
tmp_rg=/tmp/RG_$cp
echo Processing Request Group assignments file $ldt_rg, using temp file $tmp_rg...
sed "s:sysdate:$sysdate:" $ldt_rg | sed 's/REPNAME/'$cp'/' | sed 's/APPNAME/'$app'/'
> $tmp_rg
cps=`grep "BEGIN PROGRAM " $ldt_prog | cut -d ' ' -f 3 | sed -r 's/"(.+)"/'\''\1'\''/' | tr '\n' ',' |
sed -r 's/,$//'`
echo $cp1
sqlplus -s apps/$1 <<!!
SET LINES 120
COLUMN "Program" FORMAT A80
COLUMN "Parameter" FORMAT A30
COLUMN "Request Group" FORMAT A30
BREAK ON "Program"
SELECT prg.user_concurrent_program_name || ': ' || prg.concurrent_program_name "Program",
fcu.column_seq_num || ': ' || fcu.end_user_column_name "Parameter"
FROM fnd_concurrent_programs_vl prg
LEFT JOIN fnd_descr_flex_column_usages fcu
ON fcu.descriptive_flexfield_name = '\$SRS\$.' || prg.concurrent_program_name
AND fcu.descriptive_flex_context_code = 'Global Data Elements'
WHERE prg.concurrent_program_name IN ($cps)
ORDER BY 1, 2;
References 14
Request Sets
Notes
These scripts are for request set migration, and should be used for one set at a
time. They handle stage linking automatically.
Download
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_DownRS.x
#
# DESCRIPTION : Downloads a RS rscode to file rscode_RS.ldt in working directory
# Note the download is in two stages, first the entity REQ_SET,
then the
# REQ_SET_LINKS whose output file is appended to the first. This
file can be uploaded
# using XX_UpRS.x which will upload both Request Set and links
#
# PARAMETERS : $1 - apps password
# $2 - Request Set code
# $3 - App short name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 04-Jul-01 B Furey Base Version
# 1.1 24-Jul-01 B Furey Change name and add file and password checks
# 1.2 20-Aug-01 B Furey Convert spaces to _ in RS name, and pass the module as third arg
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 3 ] ; then
echo Usage: $0 [apps password] [Request Set code] [App Short Name]
exit 1
fi
admin_dir=$PWD
appname=$3
lct_file_rs=$FND_TOP/patch/115/import/afcprset.lct
ldt_file=`echo $admin_dir/$2_RS.ldt|tr " " "_"`
ldt_temp=`echo /tmp/$2_RSL.ldt|tr " " "_"`
#
# Check all the necessary files are there.
#
if [ ! -s "$lct_file_rs" ] ; then
echo The standard Request Set load configuration file $lct_file_rs does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
echo Downloading the RS "$2" to file $ldt_file...
References 15
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file_rs $ldt_file REQ_SET REQUEST_SET_NAME="$2"
APPLICATION_SHORT_NAME=$appname
Example Output
Downloading the RS XXRS to file /machine/users/bfurey/fndload/XXRS_RS.ldt...
Log filename : L106929.log
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpRS.x
#
# DESCRIPTION : Uploads the definition of a Request Set
# with RG assignments for any custom module
#
# PARAMETERS : $1 - apps password
# $2 - Request Set File Name
# $3 - Name of generic Request Group definition file or
"none"
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 12-Mar-03 B Furey Base Version
# 1.1 30-Mar-10 B Furey Minor updates. Using in 11.5.6 instance
#
#*******************************************************************************
#
# Check input parameters
#
if [[ $# != 3 ]] ; then
echo Usage: $0 \"apps password\" \"Request Set Code\" \"Request Group file\" - quotes optional
exit 1
fi
admin_dir=$PWD
lct_file=$FND_TOP/patch/115/import/afcprset.lct
ldt_file=$admin_dir/$2
lct_rg=$FND_TOP/admin/import/afcpreqg.lct
ldt_rg=$admin_dir/$3
#
# Check all the necessary files are there. First, the Request Group file matching the parameter passed...
#
if [[ ! -s "$ldt_rg" && ! "$3" = "none" ]] ; then
echo The generic Request Group file $ldt_rg does not exist
exit 1
fi
#
#...then the standard Set and Request Group configuration files
#
References 16
if [ ! -s "$lct_file" ] ; then
echo The standard Request Set load configuration file $lct_file does not exist !
exit 1
fi
if [ ! -s "$lct_rg" ] ; then
echo The standard Request Group load configuration file $lct_rg does not exist !
exit 1
fi
#
#...finally the Set definition file
#
if [ ! -s "$ldt_file" ] ; then
echo The Set load definition file $ldt_file does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
#
# First the set...
#
echo Processing Load file $ldt_file...
echo FNDLOAD apps/$1 0 Y UPLOAD $lct_file $ldt_file -
FNDLOAD apps/$1 0 Y UPLOAD $lct_file $ldt_file -
#
# ...then the Request Group assignments, creating the temporary RG configuration file from the relevant
generic one
# substituting the prog name for the placeholder, and replacing the "P" with "P" or "S" as passed
#
rs=`grep "BEGIN REQ_SET " $ldt_file | cut -d '"' -f 4`
app=`grep "BEGIN REQ_SET " $ldt_file | cut -d '"' -f 2`
if [ "$3" = "none" ] ; then
echo No Request Group assignments required
else
echo Processing Request Group assignments file $ldt_rg...
sed 's/"P"/"S"/' $ldt_rg | sed 's/REPNAME/'$rs'/' > /tmp/$2
References 17
AND rgu.application_id = rgp.application_id
AND rgu.request_group_id = rgp.request_group_id);
EXIT;
!!`
Example Output
Processing Load file /machine/apps/ebs_1/appl1/xx/import/XXRS_RS.ldt...
FNDLOAD apps/apps 0 Y UPLOAD /machine/apps/ebs_1/appl1/fnd/11.5.0/patch/115/import/afcprset.lct
/machine/apps/ebs_1/appl1/xx/import/XXRS_RS.ldt -
Log filename : L106901.log
References 18
Profile Values
Notes
These scripts are for migration of profile values at site or responsibility level. The
download applies to one profile value, but the upload can process multiple profile
values in a file, which can be built by merging several files manually or
programmatically.
Download
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_DownPR.x
#
# DESCRIPTION : Downloads a Profile prof for responsibility resp to file
# XXYYprof_resp_PR.ldt, or resp can be SITE
#
# PARAMETERS : $1 - apps password
# $2 - Profile name
# $3 - Responsibility key
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 24-Jul-01 B Furey Base Version
# 1.1 26-Nov-08 B Furey Responsibility level
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 3 ] ; then
echo Usage: $0 [apps password] [Profile name] [Responsibility key]
exit 1
fi
admin_dir=$PWD
lct_file=$FND_TOP/patch/115/import/afscprof.lct
ldt_file=$admin_dir/$2_$3_PR.ldt
if [ $3 = "SITE" ] ; then
echo FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file PROFILE PROFILE_NAME=$2
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file PROFILE PROFILE_NAME=$2
else
echo FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file PROFILE PROFILE_NAME=$2
LEV=RESPONSIBILITY LEV_NAME=$3
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file PROFILE PROFILE_NAME=$2 LEV=RESPONSIBILITY
LEV_NAME=$3
fi
#
# Check whether the definition file contains any Profiles
#
n_vs=`grep -c "BEGIN PROFILE" $ldt_file`
if [ $n_vs = 0 ] ; then
echo Profile $2 has not been downloaded, possibly does not exist !
exit 1
else
value=`grep " PROFILE_OPTION_VALUE =" $ldt_file | cut -d '"' -f 2 `
echo Profile $2 has been downloaded, for responsibility $3, with value $value
fi
References 19
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpPe.x
#
# DESCRIPTION : Uploads the definition of Profile Values (site or responsibility
level)
#
# PARAMETERS : $1 - apps password
# $2 - Profile values ldt file
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.1 29-Jan-09 B Furey Base Version
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [Profile values ldt file]
exit 1
fi
admin_dir=$PWD
#
# Set the names of the lct and ldt files and check existence
#
lct_file=$FND_TOP/patch/115/import/afscprof.lct
ldt_file=$admin_dir/$2
ldt_temp=/tmp/$2
if [ ! -s "$lct_file" ] ; then
echo The standard Profile load configuration file $lct_file does not exist !
exit 1
fi
if [ ! -s "$ldt_file" ] ; then
echo The Profile load definition file $ldt_file does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
profs=`grep "BEGIN PROFILE" $ldt_file | cut -d ' ' -f 3 | sed -r 's/"(.+)"/'\''\1'\''/' | tr '\n' ',' |
sed -r 's/,$//'`
resps=`grep "BEGIN FND_PROFILE_OPTION_VALUES" $ldt_file | cut -d ' ' -f 6 | sed -r 's/"(.+)"/'\''\1'\''/'
| tr '\n' ',' | sed -r 's/,$//'`
References 20
pvr.profile_option_value "Value"
FROM fnd_application_vl ap,
fnd_profile_options_vl pn,
fnd_profile_option_values pvr
WHERE ap.application_id = pn.application_id
AND pvr.application_id = pn.application_id
AND pvr.profile_option_id = pn.profile_option_id
AND pvr.level_id = 10001
AND pn.profile_option_name IN ($profs)
ORDER BY 1, 2;
EXIT;
!!
else
fi
Responsibilities
Notes
These scripts are for migration of responsibilities, including exclusions. The
download applies to one responsibility, but the upload can process multiple
responsibilities in a file, which can be built by merging several files manually or
programmatically. Note that you will probably also need to migrate responsibility
profile values, which must be done separately.
Download
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_DownRy.x
#
# DESCRIPTION : Downloads a Responsibility X (=key) to file X_Ry.ldt
#
# PARAMETERS : $1 - apps password
# $2 - Responsibility key
# $3 - Application short name
References 21
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.1 18-Nov-08 B Furey Initial version
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 3 ] ; then
echo Usage: $0 [apps password] [Responsibility name] [Application short name]
exit 1
fi
admin_dir=$PWD
appname=$3
lct_file=$FND_TOP/patch/115/import/afscursp.lct
ldt_file=$admin_dir/$2_Ry.ldt
ldt_temp=/tmp/$2_Ry.ldt
awk 'BEGIN {
IN_VSET="F"
end_offset=2}
$1 == "BEGIN" && $2 == "FND_APPLICATION" {
IN_VSET="T"
}
$1 == "END" && $2 == "FND_APPLICATION" {
IN_VSET="F"
end_offset=0
}
{
if (IN_VSET == "F" && ++end_offset > 2) print $0
}
' $ldt_temp > $ldt_file
echo The program references the following Applications which have been deleted from the ldt file:
for vs in `awk '$1 == "BEGIN" && $2 == "FND_APPLICATION" {print $3}' $ldt_temp | sed 's/"//g'`
do
echo $vs
done
#
# Check whether the definition file contains any Responsibilities
#
n_vs=`grep -c "BEGIN FND_RESP" $ldt_file`
if [ $n_vs = 0 ] ; then
echo Responsibility "$2" has not been downloaded, possibly does not exist !
exit 1
else
n_f=`grep -c \"F\" $ldt_file`
n_m=`grep -c \"M\" $ldt_file`
echo Responsibility "$2" has been downloaded, with $n_f function and $n_m menu exclusions
fi
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpRy.x
#
References 22
# DESCRIPTION : Uploads the definition of a Responsibility
#
# PARAMETERS : $1 - apps password
# $2 - Responsibility ldt file
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.1 18-Nov-08 B Furey Base Version
# 1.2 21-Jan-09 B Furey SQL, added Order By and key
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [Responsibility ldt file]
exit 1
fi
admin_dir=$PWD
appname=$3
#
# Set the names of the lct and ldt files and check existence
#
lct_file=$FND_TOP/patch/115/import/afscursp.lct
ldt_file=$admin_dir/$2
if [ ! -s "$lct_file" ] ; then
echo The standard Responsibility load configuration file $lct_file does not exist !
exit 1
fi
if [ ! -s "$ldt_file" ] ; then
echo The Responsibility load definition file $ldt_file does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
echo Uploading Responsibility from file $ldt_file...
FNDLOAD apps/$1 0 Y UPLOAD $lct_file $ldt_file CUSTOM_MODE=FORCE -
References 23
Users
Notes
These scripts are for migration of users. The download applies to one user, but
the upload can process multiple users in a file, which can be built by merging
several files manually or programmatically.
Download
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_DownUS.x
#
# DESCRIPTION : Downloads a user to file X_US.ldt
#
# PARAMETERS : $1 - apps password
# $2 - User name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.1 25-Nov-08 B Furey Base version
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [User name]
exit 1
fi
admin_dir=$PWD
appname=$3
lct_file=$FND_TOP/patch/115/import/afscursp.lct
ldt_file=$admin_dir/$2_US.ldt
ldt_temp=/tmp/$2_US.ldt
awk 'BEGIN {
IN_VSET="F"
end_offset=2}
$1 == "BEGIN" && $2 == "FND_RESPONSIBILITY" {
IN_VSET="T"
}
$1 == "END" && $2 == "FND_RESPONSIBILITY" {
IN_VSET="F"
end_offset=0
}
{
if (IN_VSET == "F" && ++end_offset > 2) print $0
}
' $ldt_temp | awk 'BEGIN {
IN_VSET="F"
end_offset=2}
$1 == "BEGIN" && $2 == "FND_APPLICATION" {
IN_VSET="T"
}
$1 == "END" && $2 == "FND_APPLICATION" {
IN_VSET="F"
References 24
end_offset=0
}
{
if (IN_VSET == "F" && ++end_offset > 2) print $0
}
' | awk 'BEGIN {
IN_VSET="F"
end_offset=2}
$1 == "BEGIN" && $2 == "FND_SECURITY_GROUPS" {
IN_VSET="T"
}
$1 == "END" && $2 == "FND_SECURITY_GROUPS" {
IN_VSET="F"
end_offset=0
}
{
if (IN_VSET == "F" && ++end_offset > 2) print $0
}
' > $ldt_file
echo The user references the following Applications which have been deleted from the ldt file:
for vs in `awk '$1 == "BEGIN" && $2 == "FND_APPLICATION" {print $3}' $ldt_temp | sed 's/"//g'`
do
echo $vs
done
echo The user references the following Responsibilities which have been deleted from the ldt file:
for vs in `awk '$1 == "BEGIN" && $2 == "FND_RESPONSIBILITY" {print $4}' $ldt_temp | sed 's/"//g'`
do
echo $vs
done
echo The user references the following Security Groups which have been deleted from the ldt file:
for vs in `awk '$1 == "BEGIN" && $2 == "FND_SECURITY_GROUPS" {print $3}' $ldt_temp | sed 's/"//g'`
do
echo $vs
done
#
# Check whether the definition file contains any Users
#
n_vs=`grep -c "BEGIN FND_USER" $ldt_file`
if [ $n_vs = 0 ] ; then
echo User "$2" has not been downloaded, possibly does not exist !
exit 1
else
n_f=`grep -c FND_USER_RESP_GROUPS $ldt_file`
echo User "$2" has been downloaded, with $n_f responsibilities
fi
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpUS.x
#
# DESCRIPTION : Uploads the definition of a User
#
# PARAMETERS : $1 - apps password
# $2 - User ldt file
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 25-Nov-08 B Furey Base Version
#
#*******************************************************************************
#
References 25
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [User ldt file]
exit 1
fi
admin_dir=$PWD
#
# Set the names of the lct and ldt files and check existence
#
lct_file=$FND_TOP/patch/115/import/afscursp.lct
ldt_file=$admin_dir/$2
if [ ! -s "$lct_file" ] ; then
echo The standard User load configuration file $lct_file does not exist !
exit 1
fi
if [ ! -s "$ldt_file" ] ; then
echo The User load definition file $ldt_file does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
echo Uploading User from file $ldt_file...
FNDLOAD apps/$1 0 Y UPLOAD $lct_file $ldt_file CUSTOM_MODE=FORCE -
users=`grep "BEGIN FND_USER " $ldt_file | cut -d ' ' -f 3 | sed -r 's/"(.+)"/'\''\1'\''/' | tr '\n' ',' |
sed -r 's/,$//'`
sqlplus -s apps/$1 <<!!
COLUMN user_name FORMAT A20
SELECT usr.user_name, Count(urg.responsibility_id) "Responsibilities"
FROM fnd_user usr
LEFT JOIN fnd_user_resp_groups urg
ON urg.user_id = usr.user_id
WHERE usr.user_nameIN ($users)
GROUP BY usr.user_name;
EXIT;
!!
Descriptive Flexfields
Notes
These scripts are for migration of descriptive flexfields. The download applies to
one DFF, but the upload can process multiple DFFs in a file, which can be built by
merging several files manually or programmatically.
Download
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_DownDF.x
#
# DESCRIPTION : Downloads a Descriptive Flexfield dff to file
# dff_DF.ldt in $XXYY_TOP/admin.
# The file is stripped of Value Set definitions, and customised
Value
References 26
# Sets XXZZvset are downloaded to file XXZZvset_VS.ldt in
$XXZZ_TOP/admin.
#
# PARAMETERS : $1 - apps password
# $2 - Descriptive Flexfield name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 16-Dec-08 B Furey Base version
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [Descriptive Flexfield name]
exit 1
fi
admin_dir=$PWD
lct_file=$FND_TOP/patch/115/import/afffload.lct
ldt_file=$admin_dir/$2_DF.ldt
ldt_temp=/tmp/$2_DF.ldt
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
echo Downloading the Descriptive Flexfield to file $ldt_file...
echo FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_temp DESC_FLEX DESCRIPTIVE_FLEXFIELD_NAME=$2
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_temp DESC_FLEX DESCRIPTIVE_FLEXFIELD_NAME=$2
#
# Check whether the definition file contains any Descriptive Flexfields
#
n_vs=`grep -c "BEGIN DESC" $ldt_temp`
if [ $n_vs = 0 ] ; then
echo Descriptive Flexfield $2 has not been downloaded, possibly does not exist !
exit 1
fi
awk 'BEGIN {
IN_VSET="F"
end_offset=2}
$1 == "BEGIN" && $2 == "VALUE_SET" {
IN_VSET="T"
}
$1 == "END" && $2 == "VALUE_SET" {
IN_VSET="F"
end_offset=0
}
{
if (IN_VSET == "F" && ++end_offset > 2) print $0
}
' $ldt_temp > $ldt_file
echo The program references the following Value Sets which have been deleted from the ldt file:
for vs in `awk '$1 == "BEGIN" && $2 == "VALUE_SET" {print $3}' $ldt_temp | sed 's/"//g'`
do
echo $vs
done
echo Downloading the following Value Sets: (doesn't work for Independent VS, see XX_DownVS.x which does
work)
for vs in `awk '$1 == "BEGIN" && $2 == "VALUE_SET" {print $3}' $ldt_temp | sed 's/"//g'|grep XX`
do
echo $vs
lnvs=`grep -n "BEGIN VALUE_SET \"$vs\"" $ldt_temp | awk -F: '{print $1}'`
ln=`expr 2 + $lnvs`
vtype=`awk -F\" -v LN=$ln 'NR == LN {print $2}' $ldt_temp`
if [ $vtype = "I" ] ; then
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file_vs $admin_dir/"$vs"_VS.ldt VALUE_SET_VALUE
References 27
FLEX_VALUE_SET_NAME=$vs
else
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file_vs $admin_dir/"$vs"_VS.ldt VALUE_SET
FLEX_VALUE_SET_NAME=$vs
fi
done
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpDF.x
#
# DESCRIPTION : Uploads the definition of a Descriptive Flexfield
#
# PARAMETERS : $1 - apps password
# $2 - Descriptive Flexfield file name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 16-Dec-08 B Furey Base version
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [Descriptive Flexfield name]
exit 1
fi
admin_dir=$PWD
lct_file=$FND_TOP/patch/115/import/afffload.lct
ldt_file=$admin_dir/$2
#
# Check all the necessary files are there. First, the DFF lct file...
#
if [ ! -s "$lct_file" ] ; then
echo The standard DFF load configuration file $lct_file does not exist !
exit 1
fi
#
#...then the DFF definition file
#
if [ ! -s "$ldt_file" ] ; then
echo The DFF load definition file $ldt_file does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
#
# Check whether the definition file contains any Value Sets
#
n_vs=`grep -c "BEGIN VALUE_SET" $ldt_file`
if [ ! $n_vs = 0 ] ; then
echo Warning: File $ldt_file contains $n_vs Value Set definitions. Is this wise...?
fi
References 28
dff=`grep "BEGIN DESC_FLEX" $ldt_file | cut -d ' ' -f 4 | sed -r 's/"(.+)"/'\''\1'\''/'`
context=`grep "BEGIN DFF_CONTEXT" $ldt_file | cut -d '"' -f 2 | sed -r 's/"(.+)"/'\''\1'\''/' | tr '\n'
',' | sed -r 's/,$//'`
echo $dff
echo $context
sqlplus -s apps/$1 <<!!
SET LINES 110
COLUMN "DFF" FORMAT A30
COLUMN "Context" FORMAT A30
COLUMN "Column" FORMAT A40
BREAK ON "DFF" ON "Context"
SELECT dff.descriptive_flexfield_name "DFF", con.descriptive_flex_context_code "Context",
fcu.application_column_name ||':'||fcu.end_user_column_name "Column"
FROM fnd_descriptive_flexs dff, fnd_descr_flex_contexts con, fnd_descr_flex_column_usages fcu
WHERE dff.descriptive_flexfield_name = $dff
AND con.descriptive_flexfield_name(+) = dff.descriptive_flexfield_name
AND fcu.descriptive_flexfield_name(+) = con.descriptive_flexfield_name
AND fcu.descriptive_flex_context_code = con.descriptive_flex_context_code
AND fcu.descriptive_flex_context_code = '$context'
ORDER BY 1, 2, 3;
EXIT;
!!
Lookups
Notes
These scripts are for migration of lookups. The download applies to either one
lookup, or all, or all within an application, and the upload can process multiple
lookups.
Download
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_DownLK.x
#
# DESCRIPTION : Downloads a Common Lookup lkp to file
# lkp_LK.ldt
#
# PARAMETERS : $1 - apps password
# $2 - Lookup name \(or ALL\)
# $3 - Application short name \(or ALL\)
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.1 16-Dec-08 B Furey Base version
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 3 ] ; then
echo Usage: $0 [apps password] [Lookup name \(or ALL\)] [Application short name \(or ALL\)]
exit 1
fi
admin_dir=$PWD
appname=$3
lct_file=$FND_TOP/patch/115/import/aflvmlu.lct
if [ $appname = "ALL" ] ; then
References 29
ldt_file=$admin_dir/ALL_LK.ldt
elif [ $2 = "ALL" ] ; then
ldt_file=$admin_dir/$appname\_ALL_LK.ldt
else
ldt_file=`echo $admin_dir/$2_LK.ldt|tr " " "_"`
fi
#
# Check all the necessary files are there.
#
if [ ! -s "$lct_file" ] ; then
echo The Lookup load configuration file $lct_file does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
if [ $appname = "ALL" ] ; then
echo Downloading all Lookups to file $ldt_file...
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file FND_LOOKUP_TYPE
elif [ $2 = "ALL" ] ; then
echo Downloading all Lookups for $appname to file $ldt_file...
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file FND_LOOKUP_TYPE
APPLICATION_SHORT_NAME=$appname
else
echo Downloading the Lookup "$2" to file $ldt_file...
FNDLOAD apps/$1 0 Y DOWNLOAD $lct_file $ldt_file FND_LOOKUP_TYPE LOOKUP_TYPE="$2"
APPLICATION_SHORT_NAME=$appname
fi
# Check whether the definition file contains any Lookups
n_lk=`grep -c "^BEGIN " $ldt_file`
if [ $n_lk = 0 ] ; then
echo Lookup "$2" has not been downloaded, possibly does not exist !
exit 1
else
n_lv=`grep -c "^ BEGIN " $ldt_file`
echo $n_lk Lookups and $n_lv Values were downloaded
fi
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpLK.x
#
# DESCRIPTION : Uploads the definition of a FND Lookup.
#
# PARAMETERS : $1 - apps password
# $2 - Lookup file name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 16-Dec-08 B Furey Base version
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [lookup name]
exit 1
fi
References 30
admin_dir=$PWD
lct_file=$FND_TOP/patch/115/import/aflvmlu.lct
ldt_file=$admin_dir/$2
#
# Check all the necessary files are there.
#
if [ ! -s "$lct_file" ] ; then
echo The Lookup load configuration file $lct_file does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
echo Uploading the LK "$2" from file $ldt_file...
FNDLOAD apps/$1 0 Y UPLOAD $lct_file $ldt_file CUSTOM_MODE=FORCE -
#
lkt=`grep "BEGIN FND_LOOKUP_TYPE" $ldt_file | cut -d ' ' -f 4 | sed -r 's/"(.+)"/'\''\1'\''/'`
echo $lkt
sqlplus -s apps/$1 <<!!
SET LINES 180
COLUMN "Type" FORMAT A20
COLUMN "Code" FORMAT A10
COLUMN "Meaning" FORMAT A30
COLUMN "Description"FORMAT A35
COLUMN "Attr1" FORMAT A20
COLUMN "Attr2" FORMAT A20
COLUMN "Attr3" FORMAT A20
BREAK ON "Type"
SELECT lkt.lookup_type "Type", lkv.lookup_code "Code", lkv.meaning "Meaning", lkv.description
"Description",
lkv.attribute1 "Attr1", lkv.attribute2 "Attr2", lkv.attribute3 "Attr3"
FROM fnd_lookup_types lkt
LEFT JOIN fnd_lookup_values lkv
ON lkv.lookup_type = lkt.lookup_type
WHERE lkt.lookup_type = $lkt
ORDER BY 1, 2, 3;
EXIT;
!!
Notes
These scripts are for migration of XML Data Definitions, and the LDT files include
the associated Layout Templates. The script was tested on a Release 12 instance.
I have not yet written a download script.
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpDD.x
#
# DESCRIPTION : Uploads the definition of an XML Data Definition
#
# PARAMETERS : $1 - apps password
References 31
# $2 - Data Definition file name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.0 27-Oct-09 B Furey Initial
# 1.0 24-Nov-09 B Furey Change name from DT to DD: XX_UpDD.x; add date processing
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 2 ] ; then
echo Usage: $0 [apps password] [Data Definition file name]
exit 1
fi
sysdate=`date "+%Y/%m/%d"`
echo $0 $sysdate
admin_dir=$PWD
lct_file=$XDO_TOP/patch/115/import/xdotmpl.lct
ldt_file=$admin_dir/$2
ldt_temp=/tmp/$2
#
# Check all the necessary files are there.
#
if [ ! -s "$lct_file" ] ; then
echo The Data Definition load configuration file $lct_file does not exist !
exit 1
fi
if [ ! -s "$ldt_file" ] ; then
echo The Data Definition load definition file $ldt_file does not exist !
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
sed "s:ph_sysdate:$sysdate:" $ldt_file > $ldt_temp
chmod +w $ldt_temp
Example Output
./XX_UpDD.x 2009/12/03
Uploading the Data Definition XX_APXMTDCR_DD.ldt from file /tmp/XX_APXMTDCR_DD.ldt...
References 32
Log filename : L8581376.log
Notes
These scripts are for migration of XML template files for BI (aka XML) Publisher
reports. Currently only RTF layout templates and XML data templates are
supported, but it is easy to extend to other types. It uses Oracle's XDOLoader
Java utility to load the file into a BLOB column. The scripts were tested on a
Release 12 instance.
Download
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_DownXDO.x
#
# DESCRIPTION : Downloads template files, data (xml), and layout (rtf) for given
LOB code
#
# PARAMETERS : $1 - apps password
# $2 - JDBC connection string (eg: 111.11.1.111:1522:DEV)
# $3 - LOB code
# $4 - LOB Type
# $5 - App short name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.1 24-Nov-09 B Furey Initial
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 5 ] ; then
echo Usage: $0 [apps password] [JDBC connection string eg: 172.16.1.233:1522:DEV] [LOB code]
[LOB Type] [App short name]
exit 1
fi
admin_dir=$PWD
lct_file=$XDO_TOP/patch/115/import/xdotmpl.lct
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
References 33
if [ "$4" = "rtf" ] ; then
xdo_file_type="RTF"
lob_type=TEMPLATE
else
echo Invalid LOB Type - $4: Only rtf and xml files are supported
exit 1
fi
echo Downloading all template files for LOB code $3 on connection "$2"...
java oracle.apps.xdo.oa.util.XDOLoader \
DOWNLOAD \
-DB_USERNAME apps \
-DB_PASSWORD $1 \
-JDBC_CONNECTION $2 \
-LOB_TYPE $lob_type \
-APPS_SHORT_NAME $5 \
-LANGUAGE en \
-TERRITORY ZA \
-LOB_CODE $3
Start downloading...
Downloading files from XDO_LOBS: SELECT DATA.FILE_DATA, DATA.LOB_CODE, DATA.LOB_TYPE,
DATA.APPLICATION_SHORT_NAME, DATA.FILE_NAME, DATA.LANGUAGE, DATA.TERRITORY, DATA.XDO_FILE_TYPE FROM
XDO_LOBS DATA, (SELECT LOB_CODE, LOB_TYPE, APPLICATION_SHORT_NAME, FILE_NAME, LANGUAGE, TERRITORY,
XDO_FILE_TYPE FROM XDO_LOBS WHERE LOB_CODE = :LOB_CODE AND APPLICATION_SHORT_NAME = :APPS_SHORT_NAME
AND LOB_TYPE in (:TEMPLATE, :TEMPLATE_SOURCE) AND LANGUAGE = :LANGUAGE AND TERRITORY = :TERRITORY )
TERMS
where DATA.LOB_CODE = TERMS.LOB_CODE
and DATA.LOB_TYPE = TERMS.LOB_TYPE
and DATA.APPLICATION_SHORT_NAME = TERMS.APPLICATION_SHORT_NAME
and DATA.LANGUAGE = TERMS.LANGUAGE
and DATA.TERRITORY = TERMS.TERRITORY
References 34
Parameters passed to XDOLoader...
[TERRITORY] [ZA]
[DB_USERNAME] [apps]
[LOB_CODE] [XX_APXMTDCR]
[DOWNLOAD] [DOWNLOAD]
[JDBC_CONNECTION] [111.11.1.111:1522:DEV]
[LANGUAGE] [en]
[DB_PASSWORD] [******]
[LOB_TYPE] [DATA_TEMPLATE]
[APPS_SHORT_NAME] [SQLAP]
Start downloading...
Downloading files from XDO_LOBS: SELECT DATA.FILE_DATA, DATA.LOB_CODE, DATA.LOB_TYPE,
DATA.APPLICATION_SHORT_NAME, DATA.FILE_NAME, DATA.LANGUAGE, DATA.TERRITORY, DATA.XDO_FILE_TYPE FROM
XDO_LOBS DATA, (SELECT LOB_CODE, LOB_TYPE, APPLICATION_SHORT_NAME, FILE_NAME, LANGUAGE, TERRITORY,
XDO_FILE_TYPE FROM XDO_LOBS WHERE LOB_CODE = :LOB_CODE AND APPLICATION_SHORT_NAME = :APPS_SHORT_NAME
AND LOB_TYPE = :LOB_TYPE AND LANGUAGE = :LANGUAGE AND TERRITORY = :TERRITORY ) TERMS
where DATA.LOB_CODE = TERMS.LOB_CODE
and DATA.LOB_TYPE = TERMS.LOB_TYPE
and DATA.APPLICATION_SHORT_NAME = TERMS.APPLICATION_SHORT_NAME
and DATA.LANGUAGE = TERMS.LANGUAGE
and DATA.TERRITORY = TERMS.TERRITORY
Upload
Unix Code
#!/usr/bin/ksh
#*******************************************************************************
#
# NAME : XX_UpXDO.x
#
# DESCRIPTION : Uploads a template file, either data (xml), or layout (rtf) only
for now)
#
# PARAMETERS : $1 - apps password
# $2 - JDBC connection string (eg: 111.11.1.111:1522:DEV)
# $3 - LOB code
# $4 - App short name
# $5 - Template file name
#
# NOTES :
#
# MODIFIED
# Version Date Who Comments
# 1.1 27-Oct-09 B Furey Initial
# 1.2 09-Nov-09 B Furey -CUSTOM_MODE FORCE
# 1.3 24-Nov-09 B Furey Get xdo_file_type from file extension; change from RTF to XDO in name
#
#*******************************************************************************
#
# Check input parameters
#
if [ $# != 5 ] ; then
echo Usage: $0 [apps password] [JDBC connection string eg: 172.16.1.233:1522:DEV] [LOB code]
[App short name] [file name]
exit 1
fi
admin_dir=$PWD
lct_file=$XDO_TOP/patch/115/import/xdotmpl.lct
ldt_file=$admin_dir/$5
#
# Check all the necessary files are there.
#
if [ ! -s "$ldt_file" ] ; then
echo The template file $ldt_file does not exist !
References 35
exit 1
fi
#
# Check the apps password
#
ret=`sqlplus -s apps/$1 <<!!
!!`
if [ -n "$ret" ] ; then
echo Incorrect password for oracle user apps \(first parameter\)
exit 1
fi
ext=`echo $ldt_file | cut -d "." -f2`
echo $ldt_file of extension $ext
else
echo Only rtf and xml files are supported
exit 1
fi
References 36
Example Output for RTF
/home/brendanf/bin/XX_APXMTDCR.rtf of extension rtf
Uploading the Template /home/brendanf/bin/XX_APXMTDCR.rtf for XX_APXMTDCR on connection
111.11.1.111:1522:DEV...
XDOLoader started: Thu Dec 03 09:52:40 SAST 2009
Start uploading...
Target file: XX_APXMTDCR.rtf
Updating the record in XDO_LOBS: XX_APXMTDCR.rtf
Done updating the file in XDO_LOBS: XX_APXMTDCR.rtf
Start uploading...
Target file: XX_APXMTDCR_DT.xml
Creating a new record in XDO_LOBS: XX_APXMTDCR_DT.xml
Done creating a new record in XDO_LOBS: XX_APXMTDCR_DT.xml
References 37
References
REF Document Location
REF- https://etrm.oracle.com/pls/trm
Oracle, eTRM, R11.5.10
1 11510/etrm_search.search
REF- Batch Migration and Loading of Oracle FND http://www.scribd.com/Brendan
2 Data P
References 38