В custom/modules//clients/base/views/record/record.php
това ще ви трябва, за да добавите основния масив от бутони.

$viewdefs[$module_name][‘base’][‘view’][‘record’][‘buttons’] =
 array (
 0 =>
 array (
 ‘type’ => ‘button’,
 ‘name’ => ‘cancel_button’,
 ‘label’ => ‘LBL_CANCEL_BUTTON_LABEL’,
 ‘css_class’ => ‘btn-invisible btn-link’,
 ‘showOn’ => ‘edit’,
 ),
 1 =>
 array (
 ‘type’ => ‘rowaction’,
 ‘event’ => ‘button:save_button:click’,
 ‘name’ => ‘save_button’,
 ‘label’ => ‘LBL_SAVE_BUTTON_LABEL’,
 ‘css_class’ => ‘btn btn-primary’,
 ‘showOn’ => ‘edit’,
 ‘acl_action’ => ‘edit’,
 ),
 2 =>
 array (
 ‘type’ => ‘actiondropdown’,
 ‘name’ => ‘main_dropdown’,
 ‘primary’ => true,
 ‘showOn’ => ‘view’,
 ‘buttons’ =>
 array (
 0 =>
 array (
 ‘type’ => ‘rowaction’,
 ‘event’ => ‘button:edit_button:click’,
 ‘name’ => ‘edit_button’,
 ‘label’ => ‘LBL_EDIT_BUTTON_LABEL’,
 ‘acl_action’ => ‘edit’,
 ),
 1 =>
 array (
 ‘type’ => ‘shareaction’,
 ‘name’ => ‘share’,
 ‘label’ => ‘LBL_RECORD_SHARE_BUTTON’,
 ‘acl_action’ => ‘view’,
 ),
 2 =>
 array (
 ‘type’ => ‘pdfaction’,
 ‘name’ => ‘download-pdf’,
 ‘label’ => ‘LBL_PDF_VIEW’,
 ‘action’ => ‘download’,
 ‘acl_action’ => ‘view’,
 ),
 3 =>
 array (
 ‘type’ => ‘pdfaction’,
 ‘name’ => ‘email-pdf’,
 ‘label’ => ‘LBL_PDF_EMAIL’,
 ‘action’ => ‘email’,
 ‘acl_action’ => ‘view’,
 ),
 4 =>
 array (
 ‘type’ => ‘divider’,
 ),
 5 =>
 array (
 ‘type’ => ‘rowaction’,
 ‘event’ => ‘button:do_some_task:click’,
 ‘name’ => ‘do_some_task’,
 ‘label’ => ‘LBL_DO_SOME_ACTION’,
 ‘acl_action’ => ‘view’,
 ),
 6 =>
 array (
 ‘type’ => ‘rowaction’,
 ‘event’ => ‘button:find_duplicates_button:click’,
 ‘name’ => ‘find_duplicates_button’,
 ‘label’ => ‘LBL_DUP_MERGE’,
 ‘acl_action’ => ‘edit’,
 ),
 7 =>
 array (
 ‘type’ => ‘rowaction’,
 ‘event’ => ‘button:duplicate_button:click’,
 ‘name’ => ‘duplicate_button’,
 ‘label’ => ‘LBL_DUPLICATE_BUTTON_LABEL’,
 ‘acl_module’ => ‘’,
 ‘acl_action’ => ‘create’,
 ),
 8 =>
 array (
 ‘type’ => ‘rowaction’,
 ‘event’ => ‘button:audit_button:click’,
 ‘name’ => ‘audit_button’,
 ‘label’ => ‘LNK_VIEW_CHANGE_LOG’,
 ‘acl_action’ => ‘view’,
 ),
 9 =>
 array (
 ‘type’ => ‘divider’,
 ),
 10 =>
 array (
 ‘type’ => ‘rowaction’,
 ‘event’ => ‘button:delete_button:click’,
 ‘name’ => ‘delete_button’,
 ‘label’ => ‘LBL_DELETE_BUTTON_LABEL’,
 ‘acl_action’ => ‘delete’,
 ),
 ),
 ),
 3 =>
 array (
 ‘name’ => ‘sidebar_toggle’,
 ‘type’ => ‘sidebartoggle’,
 ),
 );

Обърнете внимание какво съм съхранил в **ключ за масив 5**. Това е персонализираният бутон, който
ще бъде изобразен и бутонът за събитие do\_some\_task ще бъде извикан в
javacript файла, който ще създадем. Можете да добавите това навсякъде в
падащото меню, което обикновено избирам тук.

2. Създайте javascript кука за извикване на API

В custom/modules//clients/base/views/record/record.js
създайте файл като този.

({
this.context.on(‘button:do_some_task:click’, this.do_some_task, this);
 },
 do_some_task : function() {
 app.api.call(‘GET’, app.api.buildURL(‘/DoSomeTask/’+this.model.get(‘id’)), null, {
 //response comes back from your api, maybe you want to set some value on your model or alter a response?
 this.model.set(‘some_field’, response);
 //Or maybe you want to show an error or success
 app.alert.show(‘bad-task-response’, {
 });
 }, this)
 });
 }
 })

3. Изградете API, за да действа върху javascript файла

В custom/modules//clients/base/api/doSomeTask.php създайте
файл така

if(!defined(‘sugarEntry’) || !sugarEntry) die(‘Not A Valid Entry Point’);
 require_once(‘custom/modules//SomeCustomClass.php’);
class doSomeTask extends SugarApi
 {
 public function registerApiRest()
 {
 return array(
 //GET
 ‘MyGetEndpoint’ => array(
 //request type
 ‘reqType’ => ‘GET’,
//endpoint path
 ‘path’ => array(‘’, ‘DoSomeTask’, ‘?’),
//endpoint variables
 ‘pathVars’ => array(‘’, ‘’, ‘data’),
//method to call
 ‘method’ => ‘DoSomeTask’,
//short help string to be displayed in the help documentation
 ‘shortHelp’ => ‘This does some custom task’,
 ),
 );
 }
/**
 * Method to be used for my MyEndpoint/GetExample endpoint
 */
 public function DoSomeTask($api, $args)
 {
 $id = $args[‘data’];
$custom_bean = new SomeCustomClass();
 $custom_bean->retrieve($id);
 return $custom_bean->doSomething();
 }
}

Забележка: Уверете се, че вашата функция DoSomeTask е с главни букви, а не с камилски
малки букви. Продължавах да получавам грешки при преброяване на невалидни аргументи, когато беше
в камилски корпус.

4. Езикови файлове за бутона

Създайте нов езиков файл в
custom/Extension/modules//Ext/Language/en\_us.doSomeTask.php
със съдържание като

$mod_strings[‘LBL_DO_SOME_TASK’] = ‘Do some task’;

5. Бърз ремонт/възстановяване

Надяваме се, че това трябва да обедини вашите езикови файлове във вашия код и
да прекомпилира вашия javascript в предния край.