85 lines
2.4 KiB
Text
85 lines
2.4 KiB
Text
Client Side Scripts
|
|
===================
|
|
|
|
Introduction
|
|
------------
|
|
|
|
Client side scripts are written in javascript and they are used to execute function on event triggers.
|
|
These scripts can be used to:
|
|
|
|
* Manipulate views
|
|
* Do server calls (AJAX)
|
|
* Validate entries
|
|
* Do calculations
|
|
|
|
Client scripts can be written inside of DocType in the "Client Script" tab
|
|
|
|
cur_frm Object
|
|
--------------
|
|
|
|
All client script functions are attached to the cur_frm.cscript object. This object holds the functions
|
|
relating to a DocType (form)
|
|
|
|
onload event
|
|
------------
|
|
|
|
onload is called when the a record is loaded for the first time. Example::
|
|
|
|
cur_frm.cscript.onload = function(doc, doctype, docname) {
|
|
if(!doc.from) {
|
|
doc.from_user = user;
|
|
refresh_field('user')
|
|
}
|
|
}
|
|
|
|
refersh event
|
|
-------------
|
|
|
|
refresh event is similar to the onload event. Except that it is also called each time the page is refreshed
|
|
either via a user refresh, save or otherwise.
|
|
|
|
Server Calls
|
|
------------
|
|
|
|
A typical use is to get/set data at server side. To do this, the framework has built-in AJAX interface using
|
|
the $c_obj (call server object) function. The typical pattern is as follows::
|
|
|
|
// function will be called when the server responds
|
|
var callback = function(response, responseInText) {
|
|
// set the new value
|
|
|
|
// re-assign the doc record because you are inside the callback
|
|
var doc = locals[doc.doctype][doc.docname]
|
|
|
|
doc.new_value = response.message
|
|
refresh_field('new_value');
|
|
}
|
|
|
|
// call this object on the server
|
|
$c_obj([doc], 'get_my_value', doc.based_on, callback);
|
|
|
|
Field Level Triggers
|
|
--------------------
|
|
|
|
You can set functions to be called when values are changed in the form, at the "onchange" event.
|
|
|
|
To set a trigger, in the Field table, set the value of the Trigger column to "Client".
|
|
|
|
Declare a function to be called by its fieldname::
|
|
|
|
// attach a trigger on the "my_value" field
|
|
cur_frm.cscript.my_value = function(doc, doctype, docname) {
|
|
msgrint("My value has been changed")
|
|
// do something
|
|
}
|
|
|
|
Fetch Pattern
|
|
-------------
|
|
|
|
Another typical pattern is to get values based on other values, like when you select a Customer, its type and
|
|
contact info should come automatically, to do this, you can use the standard fetch pattern on link fields::
|
|
|
|
// add_fetch(link, source_field_name, target_field_name)
|
|
|
|
add_fetch('customer', 'contact_details', 'contact_details')
|
|
|