Articles on: OneHash CRM | Customize OneHash

Server Script


Server Script


A Server Script lets you dynamically define a Python Script that is executed on the server on a document event or API


  • How to create a Server Script

  • To create a Server Script


    1. You must set server_script_enabled as true in site_config.json of your site.
    2. To add/edit Server Script, ensure your role is System Manager.
    3. Create a new server script via "New Server Script" in the toolbar.
    4. Set the type of server script (Document Event / API).
    5. Set the document type and event name, or method name, script and save.


  • Features


  • 2.1 Enabling Server Script


    Server script must be enabled via site_config.json


    bench --site site1.local set-config server_script_enabled true



    2.2 Document Events


    For scripts that are to be called via document events, you must set the Reference Document Type and Event Name to define the trigger


    • Before Insert
    • Before Save
    • After Save
    • Before Submit
    • After Submit
    • Before Cancel
    • After Cancel
    • Before Delete
    • After Delete
    • Before Save (Submitted Document)
    • After Save (Submitted Document)



    2.3 API Scripts


    You can create a new API that can be accessed via api/method/[methodname] by the script type "API"


    If you want the guest user to access the API, you must check on "Allow Guest"


    The response can be set via frappe.response["message"] object



    2.3 Security


    Frappe Framework uses the Restricted Python library to restrict access to methods available for server scripts. Only the safe methods, listed below are available in server scripts


    json # json module
    dict # internal dict
    _ # translator method
    _dict # frappe._dict internal method
    frappe.flags # global flags


    FORMATTING
    ****frappe.format # frappe.format_value(value, dict(fieldtype='Currency'))
    frappe.format_value # frappe.format_value(value, dict(fieldtype='Currency'))
    frappe.date_format # default date format
    frappe.format_date # returns date as "1st September 2019"


    SESSION
    frappe.form_dict # form / request parameters
    frappe.request # request object
    frappe.response # response object
    frappe.session.user # current user
    frappe.session.csrf_token # CSRF token of the current session
    frappe.user # current user
    frappe.get_fullname # fullname of the current user
    frappe.get_gravatar # frappe.utils.get_gravatar_url
    frappe.full_name = # fullname of the current user


    ORM
    ****frappe.get_meta # get metadata object
    frappe.get_doc
    frappe.get_cached_doc
    frappe.get_list
    frappe.get_all
    frappe.get_system_settings


    DB
    ****frappe.db.get_list
    frappe.db.get_all
    frappe.db.get_value
    frappe.db.get_single_value
    frappe.db.get_default
    frappe.db.escape


    UTILITIES
    frappe.msgprint # msgprint
    frappe.get_hooks # app hooks
    frappe.utils # methods in frappe.utils
    frappe.render_template # frappe.render_template,
    frappe.get_url # frappe.utils.get_url
    socketio_port # port for socketio
    style.border_color # '#d1d8dd'
    guess_mimetype = mimetypes.guess_type,
    html2text = html2text,
    dev_server # True if in developer mode


  • Examples

  • 3.1 Change the value of a property before change


    Script Type: Before Save



    3.2 Custom validation


    Script Type: "Before Save"



    3.3. Auto Create To Do


    Script Type: "After Save"



    3.4 API


    • Script Type: API
    • Method Name: test_method



    Request: /api/method/test_method

    Updated on: 31/03/2023

    Was this article helpful?

    Share your feedback

    Cancel

    Thank you!