SugarField widget. A field widget is a low level field widget. Some examples
of fields are text boxes, date pickers, drop down menus.
Creating a SugarField
SugarCRM allows for customized "fields" which are visual representations of a type of data (e.g. url would
be displayed as a hyperlink).
Anatomy of a SugarField
Field files reside in the sugarcrm/clients/base/fields/{field_type}
folder.
Inside the {field_type} directory is a set of files that define templates for different views and field controller.
A typical directory structure will look like the following:
clients
|- base
|- bool
|- bool.js
|- detail.hbs
|- edit.hbs
|- list.hbs
|- int
...
|- text
...
|- portal
|- portal specific overrides
|- mobile
|- mobile specific overrides
[sugarFieldType].js
files are optional.
Sometimes a SugarField needs to do more than just display a simple input element, other times input elements
need additional data such as drop down menu choices. To support advanced functionality, just add your additional
controller logic to [sugarFieldType].js
javascript file where sugarFieldType is the type of the SugarField.
Example for bool.js
controller:
const ViewManager = require('view/view-manager');
({
events: {
handler: function() {
// Actions
}
},
initialize: function(options) {
ViewManager.Field.prototype.initialize(options);
// Your constructor code here follows...
},
unformat: function(value) {
value = this.el.children[0].children[1].checked ? '1' : '0';
return value;
},
format: function(value) {
value = (value == '1') ? true : false;
return value;
}
})
.hbs
files contain your templates corresponding to the type of View/View the field is to be displayed on.
Sugar uses Handlebars.js as its client side template of choice. At this time no other templating engines are
supported. Sample:
<span name="{{name}}">{{value}}</span>
These files will be used by the metadata manager to generate metadata for your SugarFields and pass them onto the
Sugar JavaScript client.