Overview:
In many cases, we need to disable certain menus, buttons and functionalities in Oracle forms in order to avoid certain standard actions.
One good example, if we have Project module, all project related invoices should be created in project module and interface to finance module for billing. These invoices should not be modified in finance module. Credit memos referencing to these invoices should be done in project module too and can’t be created in finance module. Furthermore, all related actions like menus: Adjust, Copy to, Credit, Installments, credit installments, buttons like Incomplete in AR transaction form and buttons like Adjust, Credit, Copy to in Transaction Summary form should be greyed out too.
To realize all these, we should go for form personalization and custom PLLs.
For actions like blocking modifications (insert, update) on fields of forms, and disabling buttons on forms, form personalization is enough to take care; form disable certain menus, custom pll needs to be created.
Examples:
Requirements:
For all invoices that have SOURCE = PROJECTS INVOICES then:
1) From menu Actions remove Adjust, Applications, Copy to, Credit and Credit instalments
2) From Transaction summary screen disable the following buttons : ADJUST, CREDIT, COPY TO and INCOMPLETE
3) From Transaction screen disable INCOMPLETE button
4) From Credit Transactions screen disable all modification possibilities (put in read only mode)
Form personalization should be done on form: ARXTWMAI
Menu: Help -> Diagnostics -> Custom Code -> Personalize
1) Disable modification abilities:
Description: Disable Copy Transactions form if source = PROJECTS INVOICES
Level: Form
Condition:
Trigger Event: WHEN-NEW-BLOCK-INSTANCE
Trigger Object: TCPY_TRX
Condition: TCPY_TRX.BS_BATCH_SOURCE_NAME= 'PROJECTS INVOICES'
Processing mode: both
Actions:
Seq: 10
Type: Property
Object Type: Block
Target Object: TCPY_TRX
Property Name: INSERT_ALLOWED
Value: FALSE
Seq: 11
Type: Property
Object Type: Block
Target Object: TCPY_TRX
Property Name: UPDATE_ALLOWED
Value: FALSE
Seq: 12
Type: Property
Object Type: Block
Target Object: TCPY_SCHEDULE
Property Name: INSERT_ALLOWED
Value: FALSE
Seq: 13
Type: Property
Object Type: Block
Target Object: TCPY_SCHEDULE
Property Name: UPDATE_ALLOWED
Value: FALSE
2) Disable buttons:
Description: Disable buttons in Transactions Summary form if source = 'PROJECTS INVOICES'
Level: Form
Condition:
Trigger Event: WHEN-NEW-RECORD-INSTANCE
Trigger Object: TGW_HEADER
Condition: :TGW_HEADER.BS_BATCH_SOURCE_NAME= 'PROJECTS INVOICES'
Processing mode: Not in Entry-Query Mode
Actions:
Seq: 10
Type: Property
Description: disable credit button
Object Type: Item
Target Object: TGW_HEADER.SUMMARY_CREDIT
Property Name: ENABLED
Value: FALSE
Seq: 11
Type: Property
Description: disable Adjust button
Object Type: Item
Target Object: TGW_HEADER.SUMMARY_ADJUST
Property Name: ENABLED
Value: FALSE
Seq: 12
Type: Property
Description: disable copy to button
Object Type: Item
Target Object: TGW_HEADER.SUMMARY_COPY
Property Name: ENABLED
Value: FALSE
Seq: 13
Type: Property
Description: disable Installments button
Object Type: Item
Target Object: TGW_HEADER.SUMMARY_HISTORY
Property Name: ENABLED
Value: FALSE
Description: Disable Incomplate button if source = 'PROJECTS INVOICES'
Level: Form
Condition:
Trigger Event: WHEN-NEW-BLOCK-INSTANCE
Trigger Object: TGW_HEADER
Condition: TGW_HEADER.BS_BATCH_SOURCE_NAME= 'PROJECTS INVOICES' and ${item.tgw_header.header_uncomplete.displayed}='TRUE' and ${item.tgw_header.header_uncomplete.enabled} ='TRUE'
(Incomplete button has to be displayed before disable it. Otherwise error would be generated.)
Processing mode: Not in Entry-Query Mode
Actions:
Seq: 10
Type: Property
Description: disable imcomplete button in transaction form.
Object Type: Item
Target Object: TGW_HEADER.HEADER_UNCOMPLETE
Property Name: ENABLED
Value: FALSE
Seq: 20
Type: Property
Description: disable imcomplete button in Transaction Summary form.
Object Type: Item
Target Object: TGW_HEADER.SUMMARY_UNCOMPLETE
Property Name: ENABLED
Value: FALSE
3) Disable Menus:
a. xx_ARXTWMAI_custom.pll is created in Oracle Form Builder,
PACKAGE BODY xx_ARXTWMAI_custom IS
procedure DISABLE_ACTION_MENU_ITEM(p_event varchar2) is
form_name VARCHAR2(30) := NAME_IN('system.current_form');
block_name VARCHAR2(30) := NAME_IN('system.current_block');
param_to_pass1 VARCHAR2(255);
param_to_pass2 VARCHAR2(255);
begin
IF p_event = 'WHEN-NEW-RECORD-INSTANCE' and block_name = 'TGW_HEADER' then
IF name_in('TGW_HEADER.BS_BATCH_SOURCE_NAME') = 'PROJECTS INVOICES' THEN
app_special2.disable('SPECIAL34'); --Adjust
app_special2.disable('SPECIAL37'); --Credit
app_special2.disable('SPECIAL36'); --Copy to
app_special2.disable('SPECIAL35'); --Applications
app_special2.disable('SPECIAL38'); --Installments
ELSE
app_special2.enable('SPECIAL34'); --Adjust
app_special2.enable('SPECIAL37'); --Credit
app_special2.enable('SPECIAL36'); --Copy to
app_special2.enable('SPECIAL35'); --Applications
app_special2.enable('SPECIAL38'); --Installments
END IF;
END IF;
end DISABLE_ACTION_MENU_ITEM;
procedure event(event_name varchar2) is
--vl_user_name varchar2(60) := fnd_profile.value('USERNAME');
vl_block_name varchar2(30) := name_in('system.current_block');
vl_item_name varchar2(60) := name_in('system.current_item');
begin
DISABLE_ACTION_MENU_ITEM(event_name);
exception
when FORM_TRIGGER_FAILURE then
raise FORM_TRIGGER_FAILURE;
when OTHERS then
message('Error in WHEN OTHERS in event ' ||SQLERRM);
raise;
end event;
END xx_ARXTWMAI_custom;
b. CUSTOM.pll is modified to add the calling process.
procedure event(event_name varchar2) is
form_name varchar2(30) := name_in('system.current_form');
block_name varchar2(30) := name_in('system.cursor_block');
begin
IF form_name = 'APXINWKB' THEN
XX_APXINWKB_CUSTOM.event(event_name);
ELSIF form_name = 'APXIISIM' THEN
XX_APXIISIM_CUSTOM.event(event_name);
ELSIF form_name = 'ARXTWMAI' THEN
XX_ARXTWMAI_CUSTOM.event(event_name);
ELSE
null;
END IF;
end event;
c. XX_ARXT ARXTWMAI_CUSTOM.pll is attached to CUSTOM.pll.
d. Both PLLs are compiled on server.
$ORACLE_HOME/bin/frmcmp_batch.sh userid=apps/apps@OBA module=$AU_TOP/resource/XX_ARXTWMAI_CUSTOM.pll output_file=$AU_TOP/resource/XX_ARXTWMAI_CUSTOM.plx module_type=library batch=no compile_all=yes
$ORACLE_HOME/bin/frmcmp_batch.sh userid=apps/apps@OBA module=$AU_TOP/resource/CUSTOM.pll output_file=$AU_TOP/resource/CUSTOM.plx module_type=library batch=no compile_all=yes