Monday, December 16, 2019

How to restrict Keyflexfield using Form Personalization


Keyflexfield KFF Form Personalization

Prerequisites:
Knowledge of forms Personaliation
PLSQL
Oracle Forms Builder



Steps:

A - Form personalizion :-

Seq 30
PR distribution ac non editable and non updatable

WHEN-NEW-ITEM-INSTANCE
DISTRIBUTIONS.CHARGE_ACCOUNT_FLEX

:DISTRIBUTIONS.CHARGE_ACCOUNT_FLEX is not null



Built In
Call Custom Library

XXREADONLY_POCHARGE_KFF




 In the actions tab use Builtin action type and use Call Custom Library with a specific Event name like the following which we are going to code in CUSTOM.pll

B)CUSTOM.pll changes

Now download the custom.pll from the AU_TOP to your local machine and open it in the form builder and edit the event procedure like the following (as per your requirement)

 begin 
    --null; --commented for PO distribution Charge account KFF disable
    
    XX_READ_ONLY_CHARDGE_ACNT_P('XXREADONLY_POCHARGE_KFF');
    


  end event; 





PROCEDURE XX_READ_ONLY_CHARDGE_ACNT_P(event_name varchar2) IS
form_name                      VARCHAR2 (150);
block_name                     VARCHAR2 (150);
item_name                      VARCHAR2 (150);
v_mark_read_only               VARCHAR2 (100);
BEGIN
    form_name := NAME_IN ('SYSTEM.CURRENT_FORM');
   block_name := NAME_IN ('system.cursor_block');
   item_name := NAME_IN ('system.cursor_item');
  
   /*xxpk_debug_prc
                ('CUSTOM.PLL.XX_READ_ONLY_CHARDGE_ACNT_P',
                 '00',
                 'STARTs',
                    'event_name - :-'
                 || event_name,
                 SUBSTR (dbms_utility.format_error_backtrace||SQLERRM, 1, 2999)
                ); */
    IF event_name = 'XXREADONLY_POCHARGE_KFF' THEN
  
   /*xxpk_debug_prc
                ('CUSTOM.PLL.XX_READ_ONLY_CHARDGE_ACNT_P',
                 '01',
                 'In IF Condition',
                    'event_name - :-'
                 || event_name,
                 SUBSTR (dbms_utility.format_error_backtrace||SQLERRM, 1, 2999)
                );  */
     FND_KEY_FLEX.UPDATE_DEFINITION(
  BLOCK=>'DISTRIBUTIONS',
  FIELD=>'charge_account_flex',
  INSERTABLE=>'',
  UPDATEABLE=>'');
   END IF;


  /* IF  (event_name = 'WHEN-NEW-RECORD-INSTANCE' or event_name = 'WHEN-NEW-BLOCK-INSTANCE'
         or event_name = 'WHEN-NEW-FORM-INSTANCE' or event_name = 'WHEN-NEW-ITEM-INSTANCE')
     AND ( FND_PROFILE.VALUE ('RESP_ID')in ('50680') and form_name IN ('POXPOEPO'))THEN
 --Set_Menu_Item_Property('VIEW.ATTACHMENTS',ENABLED, PROPERTY_FALSE);--disable attachment to view
 --app_special.enable('ATTACHMENTS', PROPERTY_OFF);     --disable attachment to view
       copy(25,'SYSTEM.MESSAGE_LEVEL');--to not show repeative messages
    END IF;*/
    
    exception when others then
     null;
       /*xxpk_debug_prc
                ('CUSTOM.PLL.XX_READ_ONLY_CHARDGE_ACNT_P',
                 'XX',
                 'MainException',
                    'event_name - :-'
                 || event_name,
                 SUBSTR (dbms_utility.format_error_backtrace||SQLERRM, 1, 2999)
                ); */
    
END;

Recompile the custom.pll in the form builder and upload it to AU_TOP (don't forget to backup the original file before uploading the modified one)  

frmcmp_batch module=CUSTOM.pll userid=apps/apps output_file=$AU_TOP/resource/CUSTOM.plx compile_all=special module_type=LIBRARY batch=yes

Restart the application services and test the personalization 

========End========================


1 comment:

  1. I never thought this type of logic.. combination of personalisation through form and custom.pll..thanks alot...

    ReplyDelete