Tuesday, January 6, 2015

SQL: Menu hierarchy

SELECT     LPAD (' ', 6 * (LEVEL - 1)) || menu_entry.entry_sequence SEQUENCE,
           LPAD (' ', 6 * (LEVEL - 1)) || menu_entry.prompt prompt,
           menu_entry.grant_flag grant_flag,
           DECODE (menu_entry.sub_menu_id,
                   NULL, 'FUNCTION',
                   DECODE (menu_entry.function_id, NULL, 'SUBMENU', 'BOTH')
                  ) TYPE,
           menu2.user_menu_name, func2.user_function_name
      FROM fnd_menu_entries_vl menu_entry,
           fnd_menus_tl menu,
           fnd_form_functions_tl func,
           fnd_form_functions_tl func2,
           fnd_menus_tl menu2
     WHERE menu_entry.sub_menu_id = menu.menu_id(+)
       AND menu_entry.function_id = func.function_id(+)
       AND menu_entry.sub_menu_id = menu2.menu_id(+)
       AND menu_entry.function_id = func2.function_id(+)
       --AND grant_flag = 'Y'
START WITH menu_entry.menu_id =
                     (SELECT menu_id
                        FROM fnd_menus_tl menu2
                       WHERE menu2.user_menu_name = 'AR_NAVIGATE_GUI')
CONNECT BY menu_entry.menu_id = PRIOR menu_entry.sub_menu_id
  ORDER SIBLINGS BY menu_entry.entry_sequence

Monday, January 5, 2015

Forms: Implementing sub-functions

Oracle apps sub functions Overview:
There are two types of functions: form functions, and non-form functions. For clarity, we refer to a form function as a form, and a non-form function as a sub function, even though both are just instances of functions in the database.
Oracle Applications aggregates several related business functions into a single form. But all users should not have access to every business function in a form; Oracle Applications provides the ability to identify pieces of applications logic as subfunctions. When part of an application’s functionality is identified as a sub functions, it can be secured (i.e., included or excluded from a responsibility).

Sub function (Non-Form Function):
A non-form function (sub function) is a securable subset of a form’s functionality. Sub functions are frequently associated with buttons or other graphical elements on forms. For example, when a sub function is created for a button in a form and if the created sub function is added to the particular responsibility, then only the corresponding button will be enabled in that responsibility, otherwise (if the created sub function is not added to responsibility) the button is disabled, even if the main function is added to that responsibility, and the user will not be able to access the button.
The user can access the main function but not the sub function, if the sub function is not added to the responsibility, which means we can provide security to the part of the form functionality, using the function security mechanism through the sub function.
Diagrammatic illustration of the sub functions

Steps to implement a Sub function in a form:
1: Open Template.fmb using Oracle form builder, save it with another name(XX_SUB_FUNC.fmb) and give the module name as “XX_SUB_FUNC”.
2: Delete the following:
“BLOCKNAME” from Canvas and Data Block
“DETAILBLOCK” from Data Block
“BLOCKNAME” from Window.
3: Create window (XX_SUB_WIN), apply subclass information as “WINDOW” and give the title.
4: Give this window name in PRE-FORM trigger (Form Level) and also in APP_CUSTOM body from Program_Unit (in place of window name).
Give this window name in PRE-FORM trigger (Form Level) As Shown below

Give this window name in APP_CUSTOM (PACKAGE BODY) as below
5: Create New Canvas
6: Now create a new Data block (EMP) using Wizard or Manual, apply subclass information to the block as “BLOCK” and also apply subclass information to the items as “TEXT_ITEM”.
Click on Finish…………..until finish
7: Give the Subclass information for Block (EMP) As BLOCK
8: Create a Button(EXIT) in Canvas and write your required functionality code in when button pressed trigger.
9: Give the Subclass information for ITEM (EMPNO) as TEXT_ITEM
10: Finally move your form from our Local Machine to CUSTOM_TOP using WINSCP or any of your local tools.
11: Compile the Form using “f60gen”
In the UNIX environment, type the following command:
f60gen XX_SUB_FUNC.fmb apps/apps
12: Connect to Oracle Applications:
1. Create a Form (Navigation: Application Developer->Application-> Form)
Here give the following details and save the details.
Form =>XX_SUB_FUNC (.fmx )
Application => xxmz Custom(Custom TOP Application)
User Form Name=>Give any name
2. Create a function (Navigation: Application->function)
Here give the following details:
Description Tab:
Function name: Any Name (XX_SUB_FUNC_FUNC)
User Function Name: Any Name (XX_SUB_FUNC_FUNC)
Properties Tab:
Type: Form
Maintenance Mode Support: None
Context Dependence: Responsibility
Form Tab:

Attach User Form Name:XX_SUB_FUNC

Create Sub Function (XX_SUB_FUNC_FUNC1) below the main function
(Navigation: Application Developer=>Application=>Function)
Give the User Function Name: XX_SUB_FUNC_FUNC: EXIT (User function name: button name)


Properties Tab:

Type: Sub function
Maintenance Mode Support: None
Context Dependence: Responsibility
13: Once again Switch to Form builder open the user form and go to Form Level Trigger
“WHEN_NEW_FORM_INSTANCE” and incorporate the function
14: Write the Function ( Function name=>fnd_function.test) As
Script:
if fnd_function.test(‘XX_SUB_FUNC_FUNC1′)then
set_item_property(‘emp.exit’,ENABLED<PROPERTY_TRUE):
else
set_item_property(‘emp.exit’,ENABLED,PROPERTY_FALSE);
END IF;
15: Save it and move the form to custom top using WINSCP like tools and compile the form again
16: Switch to Oracle application:
Switch to Menu
(Navigation: Application Developer=>Application=>Menu)
Attach Main function to the Custom TOP menu
User function name: XX_SUB_FUNC_FUNC
Switch to Custom Application Responsibility (XXMZ CUSTOM)
Execute the Function (Click on the Function name)
(Function name=>sub functions)
The button will be disabled (because the sub function is added for the button and sub function is not added to the custom menu)
Switch to Application Developer Responsibility
Attach Sub function to the Custom TOP menu without giving prompt.
User sub function name: XX_SUB_FUNC_FUNC: EXIT
Again Switch Custom Application Responsibility(XXMZ CUSTOM)
Click on Function name (sub functions)
The button will be enabled (because the sub function is added to the button and also to the custom menu)