SugarCRM — Conditional Actions

Say you need to hide certain actions in Sugar depending on the status of a field, I’ve come across a great snippet of code from an awesome comment by Felix Nilam on the SugarCRM forums and wanted to show you a brief snippet of how it could work.

Make sure to call it before render, otherwise I had issues with this.meta.buttons already having rendered.

({
extendsFrom: 'RecordView',
initialize: function (options) {
app.view.invokeParent(this, {type: 'view', name: 'record', method: 'initialize', args:[options]});
this.before('render', this.mycustom_button_visibility, this);
this.before('render', this.mycustom2_button_visibility, this);
},
mycustom_button_visibility : function() {
if(typeof this.model.get('some_field') != 'undefined'
&& this.model.get('some_field') != 'some_value') {
this.hide_button('some_button_name');
}
},
mycustom2_button_visibility : function() {
if(typeof this.model.get('some_second_field') != 'undefined'
&& this.model.get('some_second_field') != 'some_value') {
this.hide_button('some_second_button_name');
}
},
hide_button: function(name) {
var button_sel = '';
var button_index = '';
// find the buttons index for the share button
_.find(this.meta.buttons, function(bn, idx) {
if(bn.name == 'main_dropdown') {
button_sel = idx;
_.find(bn.buttons, function(bbn, idx_bbn) {
if(bbn.name == name) {
button_index = idx_bbn;
return true;
}
});
return true;
}
});
if(button_sel != '' && button_index != '')
{
//remove the meta
this.meta.buttons[button_sel].buttons.splice(button_index, 1);
}
}
})

Props to Felix for the snippet and I hope this helps others.