Most Powerful Open Source ERP

How To Create Action Dialogs

How To showing the rules to follow when creating new action dialogs.
  • Last Update:2018-10-30
  • Version:001
  • Language:en

This page describes the rules to make action dialogs.

Table of Contents

  • Rules
  • Related Articles

    Rules

    • Your action should use object_action category, and have an action name in English.
    • The action must use an intermediate dialog, where the user can enter parameters.
    • This dialog must comply to naming conventions, for example Document_viewDoThisActionDialog.
    • This form must use form_dialog page template. Fields inside this dialog must use your_ prefix (except listbox).
    • It is allowed to use required fields in dialog.
    • The title of this dialog must be the same as the action name, it's what will be shown on the button and on the browser title bar.
    • The action script must be named something like Document_doThisAction. It's usually a python script. This script must redirect to the selected tab, by accepting form_id parameter, it should use Base_redirect utility script to redirect and keep all required request parameters. When redirecting, a portal_status_message must be passed, this will be the status message for the next page. This message must be in English, ending with a period and using spaces to separate words (some old scripts might still be using "%20" or "+", this is obsolete). It's this script responsibility to translate the message before redirecting. Here's an example of such a script, setting the description of the context document from a "user_value", that would be your_user_value field in Document_viewDoThisActionDialog.
      
      ## Script (Python) "Document_doThisAction"
      ##parameters=user_value, form_id='view'
      ##
      from Products.ERP5Type.Message import translateString
      
      context.setDescription(user_value)
      
      return context.Base_redirect(form_id, keep_items=dict(
         portal_status_message=str(translateString('Action done.'))))
      
      Note: you may find that using field_your_user_value instead of user_value looks working, but this is a mistake. field_your_user_value is the raw value, whereas user_value is the value after validation by the form. For example, in the case of float fields user_value will be converted to float, field_your_user_value will just be a string.
    • The dialog can also have a "Update action". This action is used when you have to update some fields values from the values of other fields.
    • From a module view, dialogs can be used to update a list of object selected by the user. The action script should then act on the selected object in background using activity.
      
      ## Script (Python) "DocumentModule_doThisAction"
      ##parameters=user_value, selection_name, form_id='view'
      ##
      from Products.ERP5Type.Message import translateString
      
      portal = context.getPortalObject()
      
      # get selected objects
      selection_uid_list = portal.portal_selections.getSelectionCheckedUidsFor(
        selection_name)
      
      if not selection_uid_list:
        return context.Base_redirect(form_id, keep_items=dict(
          portal_status_message=str(translateString('No object selected.'))))
      
      for brain in portal.portal_catalog(uid=selection_uid_list):
        brain.getObject().activate().setDescription(user_value)
      
      # unselect objects
      portal.portal_selections.setSelectionCheckedUidsFor(selection_name, [])
      
      return context.Base_redirect(form_id, keep_items=dict(
        portal_status_message=str(translateString('Action done.'))))
      

    Related Articles