Friday, January 17, 2014

Understanding Oracle Apps Form Personalization

Form Personalization is a feature in Oracle E-Business Suite 11.5.10 onwards that allows you to change the behavior of Forms-based screens. Prior to this release if we need to change the behavior of Oracle Forms we need to change the "custom.pll". That's indeed requires lot of effort and time compared to Forms Personalization which gives you a interactive user interface to implement the changes needed on the forms.

With the help of Form Personalization we can change properties of form, executing built-ins functions, display custom messages, add menu entries to call another forms, add rules, conditions and actions.

To open form personalization go to Help -> Diagnostics -> Custom Code -> Personalize

If you not able to see Diagnostics option or Personalize link is not opening follow steps on below post :-

Now lets understand when and where we can take benefit of forms personalization to make life easier:-
  • Calling another form from current form.
  • Changing / Hiding the label/fields from the form.
  • Trigger custom program at particular forms event.
  • Changing property of field on form. Like make a particular field mandatory / non-mandatory, editable / non-editable, change query of List of Values etc.
Components of Forms Personalization
  • Header / Rule Section : This section contains the basic information about the form on which personalization is being done. It has :-
    • Function Name :- Name of the form function
    • Form Name :- Name of the form in use.
    • Sequence :- Sequence is the field where we provide sequence number. Forms personalization is executed sequentially in the sequence. Lower sequence value executed first.
    • Description :- Allow to enter details about personalization being done. Its good practice to enter description related to what you are doing in the personalization as it helps later in debugging issue to identify the personalization.
    • Level :- Its the level that defines at what level the forms personalization is being applied. If Level is 'Forms' then all the functions under that forms will be impacted. If Level is function then the forms personalization will have its impact only when you are working on that function inside the form.
    • Enabled Checkbox :- To enable / disable forms personalization.
  • Condition :- The condition determines the when a particular personalization will perform its action. You can write sql query to determine if it will be triggered or not OR call pl/sql function as well. It has :-
    • Trigger Event : Its nothing but the forms event. Based on the value choosen here the function will execute only when that particular event triggers on the form. Trigger event are predefined.
    • Trigger Object : Trigger object is the object on the form upon which an event is triggering. If you write a condition having trigger event and trigger object then when that event happens on that object of the form then only the condition will be checked and action will be performed.
    • Condition : The box is the place where we put sql validation query. If the condition returns true then action will be performed.
    • Processing Mode : Defined the mode in which the condition will be applicable.
  • Context : Context plays the same role as does the profile options. It gives us flexibility that at what level the forms personalization will be used. We can choose level as 'Responsibility/User' and it will impact only at the responsibility / user level.
  • Action : Action determines actual operation that needs to be performed when a particular trigger event satisfies condition i.e it returns TRUE on condition validation. Each rule must have atleast one condition other wise it doesn't make sense just to define condition and don't perform any action. We can define multiple action to be triggered on one condition and it will execute in sequence. There are 4 different types of action available :-
    • Property : This action type is used to set the property of the objects. These objects could be Item / Window / Forms Block etc. Property has 4 sections :-
      • Object Type : This determines which type of object will be impacted.
      • Target Object : Actual object that will be impacted.
      • Property Name : It determines the attribute of the object that you want to change.
      • Value : The target value that the object property will change to. You can enter hard coded text or write custom sql query or call function to set the values. SQL query / function will provide result at run time.
    • Message : It is used to custom message at runtime. You can set different type of message that can shown. Different message types are :-
      • Show : This will show a pop message as note to user when condition is satisfied. User need to press 'OK' to continue processing.
      • Hint : This will not show any pop up and will not stop processing. Message will be displayed at the bottom left corner of the form, can be called task bar where you generally see messages when you save data on a form.
      • Error : It display pop as error and stop the processing.
      • Debug : It displays message pop as debug.
      • Warn : Show pop window as warning window. Upon hitting 'OK' you can continue transaction.
    • Builtin : It allow to call oracle standard builtin APIs and functions. Using this you can call a Form / Function / Open URL / Execute a trigger and many other function.
      • Builtin Type : List all the builtin functions type that are available.
      • Program Name : Based on the builtin type chosen, enter respected program to be executed.
    • Menu : This is used to call another form from current form. You can create a form menu link and call. This will be used to implement ZOOM functionality that will we discuss later.
      • Menu Entry : Oracle provided 45 special menu entries that can be used to call another form from one form.
      • Menu Label : Custom name that you can provide while you try to create a new call to form.

31 comments :

  1. I have requirement for form personalization form on sales order form. When Ship_to field is changed and while saving (Message should say if the SHIP_TO is changed the freight_terms, FOB and ...will be changed) .
    I am able to get the above message when i change any field in sales order form.
    but i wanted this message to display only when i change the ship_to field in sales order form.
    Please guide me how to do this using form personaliztion.

    Thanks In Advance
    Kiran

    ReplyDelete
    Replies
    1. Hi Kiran,

      To do this you can compare the existing value of SHIP_TO field and the changed value. I would say you create a variable in FP and store the existing value of SHIP_TO location.

      If any one moves out of SHIP_TO field you write the condition to validate the current value and the variable value, If those are not same show the message.

      To define variable you can go to Actions :-
      Type -> Property
      Object Type -> Global / Local Variable
      Target Object -> XX_SHIP_TO
      Property Name -> VALUE
      Value -> = (select query to pull SHIP_TO location.)

      Delete
  2. Hi i have requirement for form personalization for receipts form in receiving(Purchasing Resonpsibility)
    to show message when the check box and the attachment is attached against purchase order
    in attachment screen there is only FND tables .so how i match both in same personalization.
    really sorry for my English..

    Thanks in Advance
    Arul.

    ReplyDelete
    Replies
    1. Hi Arul,

      Yes attachments are saved in fnd_attached_documents. If query the table you can find reference to the module and particular record.

      fnd_attached_documents.entity_name refers to the module / form where its originated.
      fnd_attached_documents.pk1_value represent the primary key of the record.

      If you have attached and attachment in Purchasing form then you have fnd_attached_documents.pk1_value ~ po_header_all.po_header_id.

      Hope with that you can form the query and build the condition for your forms personalization.

      Regards
      Tauseef

      Delete
    2. This comment has been removed by the author.

      Delete
  3. Thank you so much...but i have an issue because I am using receipt screen in receiving menu(Purchasing Responsibility).so entity name is RCV_TRANSACTIONS_INTERFACE(using "Miscellaneous" category).how i match with this. Can you share your mail id i will send in detail.my mail id is 'arulrajkv@gmail.com'

    ReplyDelete
  4. Hi i have requirement for form personalization for Modifier form in Pricing. I want to disable all field in Modifier form (if end date < today). i don't want change everything if end date < today.

    Thanks In Advance
    Chasha

    ReplyDelete
    Replies
    1. Hello Chasha,

      Here is how you should do that.

      First Have the condition :-
      Trigger Event = WHEN-NEW-BLOCK-INSTANCE
      Trigger Object = MODIFIERS
      Conditin = :MODIFIERS.END_DATE_ACTIVE <= Sysdate

      Setup Action :
      Type = Property
      Object Type = Block
      Target Object = MODIFIERS
      Property Name = UPDATE_ALLOWED
      Value = FALSE

      Regards
      Tauseef

      Delete
    2. This comment has been removed by the author.

      Delete
    3. Hi,

      You may need to do the same thing on different events so that it gets disabaled in all cases and have to enable it back when you move to a record which is eligible to be updated.

      Regards
      Tauseef

      Delete
    4. Thanks for the advice. But i have doubt. Why MODIFIER_LIST not use WHEN-NEW-BLOCK-INSTANCE same MODIFIERS I also modify header information on the Form.

      Regards
      Chasha

      Delete
    5. This comment has been removed by the author.

      Delete
    6. Well you can use that too, it depends on your requirement... I was under impression that you want to disable update on modifier lines which are end dated. If you have requirement that if a modifier at header level is end datet and you don't want to allow update, then please use the block as MODIFIER_LIST.

      Regards
      Tauseef

      Delete
    7. Thank you so much.

      Regards
      Chasha

      Delete
  5. Hi Tauseef,

    How can we suppress the frm 41050 warning messages through form personalization?
    Please suggest.

    Thanks

    ReplyDelete
    Replies
    1. Hello,

      Can you please tell the steps/scenario where you get the FRM-41050 message. Based on that we can get some thing.

      Regards
      Tauseef

      Delete
  6. Hi Tauseef,

    I have done form personalization to make sales order lines read-only after saving changes on a custom sales order form. Functionality is working fine, but for every line this FRM message is poping up. SO want to suppress these messages.

    Thanks

    ReplyDelete
    Replies
    1. Hello,

      I am not able to reproduce it... I tried with setting update/insert allowed to FALSE but didn't get such warning message.

      I only see few HINT message on bottom left screen. If you have block and even that you setup the FP.. I can try and provide some fix.

      Regards
      Tauseef

      Delete
  7. Hi! If I want to supress standard message APP-INV-05407 for Subinventory transfer. Do you have example how to do this ? Thanks, Linda

    ReplyDelete
    Replies
    1. Hi Linda,

      Sure I would try to help but need to understand at what time and scenario you get this message. Based on that I will and suggest some thing.. a screenshot would be better to understand.

      Tauseef

      Delete
    2. Hi Tauseef! Thank you! In Inventory, Transactions->SubInventory transfers form. When user enters transfer 'items' more tha we have in the stock at the moment, he/she will get message is´App-INV-05407 'quantity will drive inventory negative' .
      We allow negative inventory in factory organizations .
      So, this is just standard warning message, that we want to suppress for specific responsibility(Context).
      Do you have an idea ? Have you done any supressings before ? It can be similar...Thanks for any help, Linda

      Delete
    3. Hi! Its me again :) I went forward with the condition:
      Trigger event :WHEN-NEW-ITEM-INSTANCE
      Trigger object:MTL_TRX_LINE.TRANSACTION_QUANTITY
      Condition:${item.mtl_trx_line.transaction_quantity.value} >${item.mtl_trx_line.qoh.value}

      But the action, I am stucked here .. How to supress the message or how do I silently 'say' OK on that message and proceed.
      Thanks for any tip,
      Linda

      Delete
    4. Hi Linda,

      You are going in right direction and to press the button we can use following :-

      Builtin Type: EXECUTE_TRIGGER
      Argument: WHEN-BUTTON-PRESSED

      But the problem I see that the condition is not getting satisfied.. Since FP is all event based and while the pop up message is showed no event is generated.

      Regards
      Tauseef

      Delete
  8. very good slide, thank you so much

    ReplyDelete
  9. very good slide, thank you so much

    ReplyDelete
  10. Thank you for the detailed explanation. Was extremely helpful for me. Keep up the good work!
    Thanks!

    ReplyDelete
  11. Hello. I have an issue with the Material Requirements form for Depot Repair Responsibility. Under supply tab i need to make the Subinv field mandatory and it did turn yellow but it allows me to save even if no data are inserted. Can you please help me on this? Thanking you in advance.

    ReplyDelete
  12. Hi I have requirement for form personalization for updating recieved_date of rma collection plan if receipts form in receiving(Purchasing Resonpsibility) has the the same data.Please help.

    Thanks!

    ReplyDelete
  13. how to check the field in form is getting auto-populated or not???

    ReplyDelete
  14. I have a requirement for Form personalization Oracle R12 in oracle ebs form, I need to disable a profile call while trying to create a new Prescriber, while let the profile be continued to call while creating a new member (patient). How can I achieve that ? Any suggestions please...

    ReplyDelete

SeachBox