Anda di halaman 1dari 2

How to Create a Custom Form

A) Open up TEMPLATE.fmb, and save this as XXHELLOAPPS.fmb


B) Create a new window, by right clicking on Window/new
Name this window as XXHELLOAPPS,and assign it SubClass Type “WINDOW”
from picklist.
C) Create a new canvas and name it XXHELLOAPPS , ensuring its Sublcass
Type is “Content”
D) Make the windows property reference canvas XXHELLOAPPS and vice
versa make the canvas reference windows XXHELLOAPPS.
E) Now create a block named XXHELLOAPPS . Lets keep this a control block
for simplicity.
F) go to form level property, and set first navigation block to XXHELLOAPPS.
G) Add a label and a field named “Hello_World” to this block.
H) Generate the form on PC using Control-T keystrokes. This will ensure that
nothing critical has been missed out.
I) FTP the form file to $XXPO_TOP/forms/US
Surely, this XX will be replaced by the naming convention at your
client/company.
J) cd to $XXPO_TOP/forms/US
And f60gen on XXHELLOAPPS.fmb
This will create a file executable as XXHELLOAPPS.fmx
K) Go to Application Developer responsibility
Menu /applicaton/form
Register the form
L) Register the Forms Function
Have you read he article form
functions[http://getappstraining.blogspot.com/2006/10/oracle-forms-
functions-menus-and-their.html] yet?
This forms function must be registered against application "XX Purchasing".
M) Now add a menu item so that this forms function becomes available to
specific responsibility.

Thats it, you will be able to open up this form from the responsibility.

Now some important notes:-


1. If you have a table based block, and if that block has some description
type fields, then try not to fetch them from post query trigger. Instead,
develop a view in apps schema and assign that view as base tale to this
block. This has a benefit that users will be able to query on the description
field if need be. Indeed you will need to do dml on the actual table yourself by
overriding on-insert, on-update, on-delete and on-lock triggers.
2. For each block in the screen, create a form level package spec and package
body. Your triggers in the block/block fields will make calls to that package.
3. Try not to do to much pl/sql within the form. Always do such database
intensive operations in a database level package.
4. Try not using global variables, unless really needed. Give preference to the
creation of form package variables.
5. In a multi record block, always add a field for Current Record Indicator.
Setting Error Message

FND_MESSAGE.SET_NAME( P_APP_NAME, P_MSG_NAME);


FND_MESSAGE.SET_TOKEN(TOKEN => p_token1,
VALUE => p_token1_value);
FND_MSG_PUB.add;

Getting Error Message from Stack

PROCEDURE get_error_message
(p_msg_count OUT NOCOPY NUMBER,
p_msg_text OUT NOCOPY VARCHAR2)
IS
l_msg_text VARCHAR2(1000);

BEGIN

p_msg_count := fnd_msg_pub.count_msg;

FOR i IN 1..p_msg_count
LOOP
fnd_msg_pub.get
(p_data => l_msg_text,
p_msg_index_out => p_msg_count,
p_encoded => fnd_api.g_false,
p_msg_index => fnd_msg_pub.g_next
);
IF i = 1 THEN
p_msg_text := l_msg_text;
ELSE
p_msg_text := p_msg_text || '--' || l_msg_text;
END IF;

END LOOP;
END;

Anda mungkin juga menyukai