Tuesday, 23 July 2019

Uploaded Image file to a File object compression using Graphics2D

Uploaded Image file to a File object compression using Graphics2D:

import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import org.apache.myfaces.trinidad.model.UploadedFile;

public static File compressUploadedFile(UploadedFile file) {
OutputStream newFile1 = null;
File file1 = null;
try {
BufferedImage img = ImageIO.read(file.getInputStream());
file1 = uploadedFileToFileConverter(file);

newFile1 = new FileOutputStream(file1);                  
int width = img.getWidth();
int height = img.getHeight();
int imgWidth, imgHeight;
if (height > width) {
imgWidth = (img.getWidth() * 300)/ img.getHeight(); // 300 is the desired max image size
imgHeight = 300;
} else {
imgHeight = (img.getHeight() * 300)/ img.getWidth();
imgWidth = 300;
}
final BufferedImage bufferedImage = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);        
final Graphics2D graphics2D = bufferedImage.createGraphics();
graphics2D.setComposite(AlphaComposite.Src);

graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

graphics2D.drawImage(img, 0, 0, imgWidth, imgHeight, null);
graphics2D.dispose();

ImageIO.write(bufferedImage, "jpg", newFile1); // Desired compress image type as jpg

} catch (IOException e) {
logger.severe(e);
}

return file1;                

}

public static File uploadedFileToFileConverter(UploadedFile uf) {
InputStream inputStream = null;
OutputStream outputStream = null;
//Add you expected file encoding here:
System.setProperty("file.encoding", "UTF-8");
File newFile = new File(uf.getFilename());
try {
inputStream = uf.getInputStream();
outputStream = new FileOutputStream(newFile);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
} catch (IOException e) {
 logger.severe(e);
}
return newFile;
}  

Image compression in Java for ADF/OAF/EBS application

There are multiple approaches to achieve this purpose as listed below:

1. Graphics2D - Uploaded File to File compression

2. Graphics2D - BlobDomain to BlobDomain

3. ImageWriter - Uploaded File to File

Of these method, I prefer Graphics2D for image compression through java better image quality and control over final image size. Using ImageWriter, I got compression to a percentage of original size but it was not exact and even the image quality was deteriorating.

Uploaded Image file to a File object compression using ImageWriter

Uploaded Image file to a File object compression using ImageWriter:

import java.awt.image.BufferedImage;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.ImageWriteParam;
import org.apache.myfaces.trinidad.model.UploadedFile;

public static File compressUploadedFile(UploadedFile file) {
OutputStream newFile1 = null;
File file1 = null;

try{  
BufferedImage image = ImageIO.read(file.getInputStream());

file1 = uploadedFileToFileConverter(file);

newFile1 = new FileOutputStream(file1);

Iterator<ImageWriter>writers =  ImageIO.getImageWritersByFormatName("jpg"); // Desired compress image type as jpg
ImageWriter writer = (ImageWriter) writers.next();

ImageOutputStream ios = ImageIO.createImageOutputStream(newFile1);
writer.setOutput(ios);

ImageWriteParam param = writer.getDefaultWriteParam();

param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.05f);   // Compress to 5% of the original size
writer.write(null, new IIOImage(image, null, null), param);

ios.close();
writer.dispose();            
} catch (IOException e) {
logger.severe(e);
}

return file1;                


public static File uploadedFileToFileConverter(UploadedFile uf) {
InputStream inputStream = null;
OutputStream outputStream = null;
//Add you expected file encoding here:
System.setProperty("file.encoding", "UTF-8");
File newFile = new File(uf.getFilename());
try {
inputStream = uf.getInputStream();
outputStream = new FileOutputStream(newFile);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
} catch (IOException e) {
logger.severe(e);
}
return newFile;
}  

BlobDomain object compression using Graphics2D

BlobDomain object compression using Graphics2D:

import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

import java.io.OutputStream;

import javax.imageio.ImageIO;

public static BlobDomain compressBlobImage(BlobDomain blobD) {
OutputStream out = null;
BlobDomain blobDomain = new BlobDomain();

try{ 
BufferedImage img = ImageIO.read(blobD.getInputStream());

out = blobDomain.getBinaryOutputStream();
 
int width = img.getWidth();
int height = img.getHeight();
int imgWidth, imgHeight;
if (height > width) {
imgWidth = (img.getWidth() * 300)/ img.getHeight(); // 300 is the desired image size
imgHeight = 300;
} else {
imgHeight = (img.getHeight() * 300)/ img.getWidth();
imgWidth = 300;
}
final BufferedImage bufferedImage = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);       
final Graphics2D graphics2D = bufferedImage.createGraphics();
graphics2D.setComposite(AlphaComposite.Src);

graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

graphics2D.drawImage(img, 0, 0, imgWidth, imgHeight, null);
graphics2D.dispose();

ImageIO.write(bufferedImage, "jpg", out);  // Desired compress image type as jpg

} catch (IOException e) {
logger.severe(e);
} catch (SQLException e) {
logger.severe(e);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
logger.severe(e);
}
}
return blobDomain;             
}

Sunday, 25 March 2018

BULK COLLECT Vs CURSOR

Bulk Collect will be having better performance at the cost of Server RAM.

Cursor resides in our temp tablespace but as we bulk collect into some collection and this collection resides in the computer memory(RAM). So while using cursor we should consider about our temp tablespace and while using Bulk collect we should consider about server RAM.

COLLECTIONS in Oracle

Index-By Tables (Associative Arrays) -  Same as arrays except that have no upper bounds, allowing them to constantly extend. As the name implies, the collection is indexed using BINARY_INTEGER values, which do not need to be consecutive. The collection is extended by assigning values to an element using an index value that does not currently exist.

TYPE table_type IS TABLE OF NUMBER(10)
    INDEX BY BINARY_INTEGER;

Nested Table Collections - Nested table collections are an extension of the index-by tables. The main difference between the two is that nested tables can be stored in a database column but index-by tables cannot. In addition some DML operations are possible on nested tables when they are stored in the database. During creation the collection must be dense, having consecutive subscripts for the elements. Once created elements can be deleted using the DELETE method to make the collection sparse. The NEXT method overcomes the problems of traversing sparse collections.

TYPE table_type IS TABLE OF NUMBER(10);

Varray Collections - A VARRAY is similar to a nested table except you must specifiy an upper bound in the declaration. Like nested tables they can be stored in the database, but unlike nested tables individual elements cannot be deleted so they remain dense.

TYPE table_type IS VARRAY(5) OF NUMBER(10);

Assignments and Equality Tests

Same type of collections - 
  TYPE table_type IS TABLE OF NUMBER(10);
  v_tab_1  table_type;
  v_tab_2  table_type;

  v_tab_2 := v_tab_1; -- This works

  IF v_tab_1 = v_tab_2 THEN -- This works
    ....
  END IF;


Different type of collections - 
  
  TYPE table_type_1 IS TABLE OF NUMBER(10);
  TYPE table_type_2 IS TABLE OF NUMBER(10);
  v_tab_1  table_type_1;
  v_tab_2  table_type_2;

  v_tab_2 := v_tab_1;  -- This will throw error

  IF v_tab_1 = v_tab_2 THEN  -- This will throw error
    ....
  END IF;


Collection Methods:

A variety of methods exist for collections, but not all are relevant for every collection type.

EXISTS(n) - Returns TRUE if the specified element exists.
COUNT - Returns the number of elements in the collection.
LIMIT - Returns the maximum number of elements for a VARRAY, or NULL for nested tables.
FIRST - Returns the index of the first element in the collection.
LAST - Returns the index of the last element in the collection.
PRIOR(n) - Returns the index of the element prior to the specified element.
NEXT(n) - Returns the index of the next element after the specified element.
EXTEND - Appends a single null element to the collection.
EXTEND(n) - Appends n null elements to the collection.
EXTEND(n1,n2) - Appends n1 copies of the n2th element to the collection.
TRIM - Removes a single element from the end of the collection.
TRIM(n) - Removes n elements from the end of the collection.
DELETE - Removes all elements from the collection.
DELETE(n) - Removes element n from the collection.
DELETE(n1,n2) - Removes all elements from n1 to n2 from the collection.

MULTISET Operations

  TYPE t_tab IS TABLE OF NUMBER;
  l_tab1 t_tab := t_tab(1,2,3,4,5,6);
  l_tab2 t_tab := t_tab(5,6,7,8,9,10);
  ...

MULTISET UNION {ALL | DISTINCT} Operator - 

  l_tab1 := l_tab1 MULTISET UNION l_tab2;

  l_tab1 := l_tab1 MULTISET UNION DISTINCT l_tab2;

MULTISET EXCEPT {DISTINCT} Operator

  l_tab1 := l_tab1 MULTISET EXCEPT l_tab2;

MULTISET INTERSECT {DISTINCT} Operator

  l_tab1 := l_tab1 MULTISET INTERSECT l_tab2;

https://oracle-base.com/articles/8i/collections-8i
https://docs.oracle.com/cloud/latest/db112/LNPLS/composites.htm#LNPLS005

Query optimization using CBO and RBO

Query optimization is the overall process of choosing the most efficient means of executing a SQL statement. SQL is a nonprocedural language, so the optimizer is free to merge, reorganize, and process in any order.

The database optimizes each SQL statement based on statistics collected about the accessed data. The optimizer determines the optimal plan for a SQL statement by examining multiple access methods, such as full table scan or index scans, different join methods such as nested loops and hash joins, different join orders, and possible transformations.

For a given query and environment, the optimizer assigns a relative numerical cost to each step of a possible plan, and then factors these values together to generate an overall cost estimate for the plan. After calculating the costs of alternative plans, the optimizer chooses the plan with the lowest cost estimate. For this reason, the optimizer is sometimes called the cost-based optimizer (CBO) to contrast it with the legacy rule-based optimizer (RBO).

Note:

The optimizer may not make the same decisions from one version of Oracle Database to the next. In recent versions, the optimizer might make different decision because better information is available and more optimizer transformations are possible.

Execution Plans

An execution plan describes a recommended method of execution for a SQL statement.

The plan shows the combination of the steps Oracle Database uses to execute a SQL statement. Each step either retrieves rows of data physically from the database or prepares them for the user issuing the statement.

An execution plan displays the cost of the entire plan, indicated on line 0, and each separate operation. The cost is an internal unit that the execution plan only displays to allow for plan comparisons. Thus, you cannot tune or change the cost value.

Friday, 12 January 2018

O2C

Explain Order Management Flow in detail?

Create Sale order > in the Header Level - enter customer name whos should be having both Bill to and Sit to Address> enter Payment Terms> enter the pricing > enter the transaction Type of that sale, then go to Line item and pick the inventoriable (or ono inventoribale item) items from item master from the Sub Inventroy Orginsation, then attach this line to a particular sales man or collection agent.
Save the data, (Line statius is 'Entered') then book the order (shows the line status as “line is awating shippment" (order status will be 'booked' > release the sales order > (Line status will be " Picked") and ship the Materail which eventually show the line status as 'closed'.  This shows the inventroy is credited with inventory Cost and COGS is Debited
The next face is interfacing to AR ( Autoinvoicing Rule) - Customer is Debited and Sales is Credited.

enter the order:
oe-order-headers-all
oe-order-lines-all(flow_status_code = entered)
book the order:
oe_order_headers_all
oe_order_lines_all(flow_status_code = booked)
wsh_new_deliveries(status_code =open)
wsh_delivery_details(releases_status = R 'ready to release)
pick release:
which items on sales order we need to take out from inventory. Normally pick release SRS program run from backend once this over.
oe_order_lines_all (flow_status_code=picked)
wsh_delivery_detalis(release_status = S 'submitted for release)
pick confirm:
items are transfered from salable to staging sub inventory.
mtl_material_transaction
mtl_transaction_accounts
wsh_delivery_details (released_status = Y 'released')
wsh_delivery_assignments
ship confirm:
here ship confirm program run from backend and data removed from wsh_new_deliveries.
oe_order_lines_all (flow_status_code =shipped)
wsh_delivery_details (released_status = shipped)
mtl_transaction_interface
mtl_material_transactions (linked through source_header_id)
data deleted from mtl_demand & mtl_reservations
item deducted from mtl_onhand_quantities.
Enter invoice:
this is also called recivables interface,that mean information moved to accounting area for invoicing details. Invoicing workflow activity transfers shipped item info to recevables.
ra_interface_lines_all
then auto-invoice program imports data from this.
then effected tables : ra_customer_trx_all (trx_number is the invoice number)
ra_customer_trx_lines_all (line_attribute 1 & 6 ) linked to header_id
and lined_id for orders....
complete line:
order line level table get updated with flow status & open flag.
oe_ordr_lines_all ( flow_status_code = shipped & open flag = N)
close order:
once we close the order oe_order_lines_all table get updated with flow_status_code as closed.

MOAC

What is MOAC?

Multi-Org or multiple organization access (MOAC) is basically an ability to access multiple operating units from a single application responsibility.

What are its advantages?

Multi-Org Access Control (MOAC) enables companies that have implemented a Shared Services operating model to efficiently process business transactions by allowing them to access, process and report on data for an unlimited number of operating units within a single applications responsibility.
This increases the productivity of Shared Service Centers, as users no longer have to switch application responsibilities when processing transactions for multiple operating units at a time.
Ability to view data from multiple operating units from a single responsibility, gives users more information. This enables them to make better decisions.
The following SQL will dump out the Security Profiles and Operating Unit Names assigned to them.

SELECT   psp.SECURITY_PROFILE_NAME,
         psp.SECURITY_PROFILE_ID,
         hou.NAME,
         hou.ORGANIZATION_ID
FROM     PER_SECURITY_PROFILES psp,
         PER_SECURITY_ORGANIZATIONS pso,
         HR_OPERATING_UNITS hou
WHERE    pso.SECURITY_PROFILE_ID = psp.SECURITY_PROFILE_ID
         AND pso.ORGANIZATION_ID = hou.ORGANIZATION_ID;

There are three Profile Options you need to be aware of related to Multi-Org that should be set at the Responsibility Level.

MO: Security Profile– Always evaluated first.
MO: Operating Unit– Secondary priority being evaluated after ‘MO: Security Profile’
MO: Default Operating Unit– Sets the default Operating Unit for transactions when running under a Security Profile.

How it is done in R12?

In Release 12, one creates a Security Profile and assigns as many operating units as you required. One can tie that security profile to a single responsibility using a profile option called MO: Security Profile. For example, you could assign the security profile to the EMEA Payables responsibility to allow that responsibility to process invoices across all operating units.

In Release 12, define a security profile in HR using the Security profile form or the Global Security profile form, and assign all of the operating units that one would want a responsibility to access. The one needs to run a concurrent request called “Run Security List Maintenance” from HR which will make those security profile available and allow one to assign them to a responsibility via a profile option called MO: Security Profile.

One can define another profile option called MO: Default Operating Unit which is optional and allows one to specify a default operating unit that will be the default when you open different subledger application forms.

Multi-Org in EBS - Technical Implementation

For ERP applications, data partitioning is performed by database views. These views reside in the APPS Oracle schema and derive the appropriate operating unit context from an RDBMS variable.

All applications code is run against the APPS schema. The Applications database architecture is now the same for a Multiple Organizations and non-Multiple Organizations implementation.

Multi Organization Tables

Multiple Organizations in Oracle Applications is enabled by partitioning some database tables by operating unit. Other tables are shared across operating units (and thus across sets of books).
In general, the following criteria determine if a table would be partitioned:
The table contains a GL Account Code (code combination ID).
There is a business reason for the table to be partitioned (for example, the entity should not be shared).
The table contains transaction data.
The table is an interface table where data being loaded is partitioned.

Applications with Partitioned tables

  • Oracle Cash Management
  • Oracle Order Management and Shipping Execution
  • Oracle Payables
  • Oracle Property Manager
  • Oracle Projects
  • Oracle Purchasing
  • Oracle Release Management
  • Oracle Receivables
  • Oracle Sales Compensation
  • Oracle Sales and Marketing
  • Oracle Service
  • European Localizations
  • Latin America Localizations
  • Regional Localizations


RDBMS Variable

A global variable exists in the Oracle database called CLIENT_INFO, which is 64 bytes long. The first 10 bytes are used to store the operating unit ID (or ORG_ID) for the Multiple Organization Support feature. The CLIENT_INFO context is derived from a profile option that the user sets for each responsibility as part of the Multi-Org setup steps.

Org_id column in the warehouse contains the Operating Unit ID
Organization_id column contains the warehouse / Inventory Org.

select * from <table name>_ALL
where ORG_ID = SUBSTRB(USERENV('CLIENT_INFO'),1,10);

Saturday, 18 November 2017

FNDLOAD Commands:Others - Printer Styles, Audit Group, Audit Schema, NLS Language

Menu -> Printer Styles

FNDLOAD <username>/<password> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcppstl.lct file_name.ldt STYLE PRINTER_STYLE_NAME="printer style name"

FNDLOAD <username>/<password> 0 Y UPLOAD $FND_TOP/patch/115/import/afcppstl.lct file_name.ldt

Audit Group

FNDLOAD <username>/<password> O Y DOWNLOAD $FND_TOP/patch/115/import/affaudit.lct file_name.ldt FND_AUDIT_GROUPS APPLICATION_SHORT_NAME="prod" GROUP_NAME="Audit Group Name"

FNDLOAD <username>/<password> O Y UPLOAD $FND_TOP/patch/115/import/affaudit.lct file_name.ldt

Audit Schema

FNDLOAD <username>/<password> O Y DOWNLOAD $FND_TOP/patch/115/import/affaudit.lct file_name.ldt FND_AUDIT_SCHEMAS  ORACLE_USERNAME= "ORACLE_USERNAME" APPLICATION_SHORT_NAME="prod" 

FNDLOAD <username>/<password> O Y UPLOAD $FND_TOP/patch/115/import/affaudit.lct file_name.ldt

NLS Language

FNDLOAD <username>/<password> 0 Y UPLOAD <controlfile.lct> <datafile.ldt> \
- UPLOAD_MODE=NLS CUSTOM_MODE=FORCE WARNINGS=TRUE

FNDLOAD Commands: Work Flows Migration

Menu -> Work Flows Migration

WFLOAD <username>/<password> 0 Y DOWNLOAD <filepath.wft> <item type>

WFLOAD <username>/<password> 0 Y UPLOAD <filepath.wft>

FNDLOAD Commands: DATA Template and RTF Template

Menu -> DATA_TEMPLATE (Data Source .xml file)

java oracle.apps.xdo.oa.util.XDOLoader DOWNLOAD -DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XX_HOST_NAME)(PORT=XX_PORT_NUMBER))(CONNECT_DATA=(SERVICE_NAME=XX_SERVICE_NAME)))' -LOB_TYPE DATA_TEMPLATE -LOB_CODE XX_TEMPLATE -APPS_SHORT_NAME XXCUST -LANGUAGE en -lct_FILE $XDO_TOP/patch/115/import/xdotmpl.lct -LOG_FILE $LOG_FILE_NAME

java oracle.apps.xdo.oa.util.XDOLoader UPLOAD -DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XX_HOST_NAME)(PORT=XX_PORT_NUMBER))(CONNECT_DATA=(SERVICE_NAME=XX_SERVICE_NAME)))' -LOB_TYPE DATA_TEMPLATE -LOB_CODE XX_TEMPLATE -XDO_FILE_TYPE XML -FILE_NAME $DATA_FILE_PATH/$DATA_FILE_NAME.xml -APPS_SHORT_NAME XXCUST -NLS_LANG en -TERRITORY US -LOG_FILE $LOG_FILE_NAME

RTF TEMPLATE (Report Layout .rtf file)

java oracle.apps.xdo.oa.util.XDOLoader DOWNLOAD -DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XX_HOST_NAME)(PORT=XX_PORT_NUMBER))(CONNECT_DATA=(SERVICE_NAME=XX_SERVICE_NAME)))' -LOB_TYPE TEMPLATE -LOB_CODE XX_TEMPLATE -APPS_SHORT_NAME XXCUST -LANGUAGE en -TERRITORY US -lct_FILE $XDO_TOP/patch/115/import/xdotmpl.lct -LOG_FILE $LOG_FILE_NAME

java oracle.apps.xdo.oa.util.XDOLoader UPLOAD -DB_USERNAME apps -DB_PASSWORD apps -JDBC_CONNECTION '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XX_HOST_NAME)(PORT=XX_PORT_NUMBER))(CONNECT_DATA=(SERVICE_NAME=SERVICE_NAME)))' -LOB_TYPE TEMPLATE -LOB_CODE XX_TEMPLATE -XDO_FILE_TYPE RTF -FILE_NAME $RTF_FILE_PATH/$RTF_FILE_NAME.rtf -APPS_SHORT_NAME XXCUST -NLS_LANG en -TERRITORY US -LOG_FILE $LOG_FILE_NAME

FNDLOAD Commands: Data Definition and Associated Template

Menu -> Data Definition and Associated Template

FNDLOAD apps/$CLIENT_APPS_PWD O Y DOWNLOAD  $XDO_TOP/patch/115/import/xdotmpl.lct XX_CUSTOM_DD.ldt XDO_DS_DEFINITIONS APPLICATION_SHORT_NAME='XXCUST' DATA_SOURCE_CODE='XX_SOURCE_CODE' TMPL_APP_SHORT_NAME='XXCUST' TEMPLATE_CODE='XX_SOURCE_CODE'

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

FNDLOAD Commands: Users

Menu -> User

FNDLOAD <username>/<password> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afscursp.lct file_name.ldt FND_USER

FNDLOAD <username>/<password> O Y UPLOAD $FND_TOP/patch/115/import/afscursp.lct file_name.ldt

Notes for using FNDLOAD against FND_USER:-

1. After uploading using FNDLOAD, user will be promoted to change their password again during their next signon attempt.
2. All the responsibilities will be extracted by FNDLOAD alongwith User Definition in FND_USER
3. In the Target Environment, make sure that you have done FNDLOAD for new responsibilities prior to running FNDLOAD on users.

FNDLOAD Commands: Responsibilities/ Responsibilities with all Security Groups

Menu -> Responsibilities

FNDLOAD <username>/<password> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afscursp.lct xxaoa_file_name.ldt FND_RESPONSIBILITY RESP_KEY="responsibility"

FNDLOAD <username>/<password> O Y UPLOAD $FND_TOP/patch/115/import/afscursp.lct file_name.ldt

Responsibilities with all Security Groups

FNDLOAD <username>/<PASSWORD> 0 Y DOWNLOAD FND_TOP/patch/115/import/afscursp.lct <USER>.ldt FND_USER USER_NAME="<USER>" SECURITY_GROUP=% DATA_GROUP_NAME=%

FNDLOAD <username>/<password> O Y UPLOAD $FND_TOP/patch/115/import/afscursp.lct <USER>.ldt

FNDLOAD Commands: Menus

Menu -> Menus

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

FNDLOAD apps/apps O Y UPLOAD $FND_TOP/patch/115/import/afsload.lct XXCUST_MENU.ldt

FNDLOAD Commands: Forms/Functions/Personalizations

Menu -> Forms/Functions/Personalizations

FNDLOAD <username>/<password> 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct <xxaoa_file_name.ldt> FND_FORM_CUSTOM_RULES form_name=<form name>
OR
FNDLOAD <username>/<password> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afsload.lct xxaoa_file_name.ldt FUNCTION FUNCTION_NAME=<function_name>
OR
FNDLOAD <username>/<password> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afsload.lct xxaoa_file_name.ldt FORM FORM_NAME=<form_name>
OR
FNDLOAD <username>/<password> 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct <xxaoa_file_name.ldt> FND_FORM_CUSTOM_RULES function_name=<function name>

$FND_TOP/bin/FNDLOAD apps/apps 0 Y UPLOAD $FND_TOP/patch/115/import/afsload.lct XX_CUSTOM_FUNC.ldt - WARNING=YES UPLOAD_MODE=REPLACE CUSTOM_MODE=FORCE

FNDLOAD Commands: Request Group

Menu -> Request Group

FNDLOAD <username>/<password> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcpreqg.lct xxaoa_file_name.ldt REQUEST_GROUP REQUEST_GROUP_NAME="request group"APPLICATION_SHORT_NAME="prod"

FNDLOAD <username>/<password> 0 Y UPLOAD $FND_TOP/patch/115/import/afcpreqg.lct xxaoa_file_name.ldt UPLOAD_MODE=REPLACE CUSTOM_MODE=FORCE

FNDLOAD Commands: Request Set and Links

Menu -> Request Set 

FNDLOAD apps/apps 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcprset.lct XX_CUSTOM_RS.ldt REQ_SET REQUEST_SET_NAME='REQUEST_SET_NAME'

FNDLOAD apps/apps O Y UPLOAD $FND_TOP/patch/115/import/afcprset.lct  XX_CUSTOM_RS.ldt UPLOAD_MODE=REPLACE CUSTOM_MODE=FORCE

Link

FNDLOAD apps/apps 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcprset.lct XXCUST_LNK.ldt REQ_SET_LINKS REQUEST_SET_NAME='XXCUST_LNK'

FNDLOAD apps/apps O Y UPLOAD $FND_TOP/patch/115/import/afcprset.lct  XXCUST_LNK.ldt UPLOAD_MODE=REPLACE CUSTOM_MODE=FORCE