2013-11-21 4 views
2

Я создаю модуль счета на SugarCRM Community Edition (версия 6.5.16).Условно сделать поле только в SugarCRM

Трюк, который я хочу извлечь, состоит в том, чтобы сделать поле readonly основано на значении флажка с именем «Отправлено». Итак: если счет отправлен, пользователь больше не может редактировать счет-фактуру.

Я знаю, что делает поле только для чтения в editviewdefs может быть сделано путем установки типа в ReadOnly:

0 => 
array (
'name' => 'invoicenumber', 
'label' => 'LBL_INVOICENUMBER', 
'type' => 'readonly', 
), 

Однако, это поле теперь только для чтения, независимо от флажка «Отправленные» проверяется.

Я пробовал редактировать массив с PHP в editviewdefs.php, но это привело к тому, что они всегда закрывали поля. Это имеет смысл, если editviewdefs.php создается один раз для всех записей.

Есть ли способ сделать это с помощью PHP или SugarCode (который, конечно же, является PHP)? Последнее средство, к которому я хочу обратиться, это использовать javascript, но я хочу избежать его, поскольку это очень важная функциональность. Один пользователь, случайно отключивший javascript, в конечном итоге может превратиться в довольно беспорядок.

Итак, если у вас есть какие-либо вопросы, задайте вопросы. Ради этого OP я включил как можно меньше кода, но если у вас есть вопросы относительно кода, не стесняйтесь спрашивать!

Большое спасибо!

+0

Я сделал это. Ответит на это, когда Stackoverflow позволяет мне (недостаточно репутации, чтобы сделать это сейчас) – TheUnpragmaticProgrammer

ответ

2

Я нашел его.

Проблема не в том, где я поставил код, проблема была в кэшировании viewdefs. Итак, первый элемент, увиденный после ремонта + перестройка, будет по умолчанию для остальных. Сначала я не рассматривал проблему, так как у меня был SugarCRM, установленный в режиме разработки, в котором он не кэширует viewdefs.

Самый простой путь, как это: Во-первых, сделайте копию editviewdefs и назовите его как угодно (у меня это: closededitviewdefs.php) Теперь Изменить все, что вам нравится в только что созданный файл editview. После внесения изменений измените 5-ю строку в closededitviewdefs.php с 'EditView' => на 'ClosedEditView' => Когда закончите, создайте файл в папке module/views: view.edit.php. Это их содержимое (см., Где это применимо, содержимое модуля):

<?php 
class [REPLACEWITHMODULENAME]ViewEdit extends ViewEdit { 
    public function preDisplay() { 

     $bean = $this->bean; 
     $isClosed = $bean->sent; 

     if ($isClosed==1) { 
      $metadataFile = 'custom/modules/[MODULEFOLDER]/metadata/closededitviewdefs.php'; 
      $this->ev = $this->getEditView(); 
      $this->ev->view = 'ClosedEditView'; 
     } else { 
      $metadataFile = 'custom/modules/[MODULEFOLDER]/metadata/editviewdefs.php'; 
      $this->ev = $this->getEditView(); 
     } 
     $this->ev->ss =& $this->ss; 
     $this->ev->setup($this->module, $this->bean, $metadataFile, get_custom_file_if_exists('include/EditView/EditView.tpl')); 
    } 
} 
?> 

Таким образом, теперь создаются два файла кеша. Была одна серьезная проблема: нет заголовка и нижнего колонтитула в закрытом виде! можно легко решить, добавив следующее closededitviewdefs.php:

'form' => 
array(
    'headerTpl' => 'include/EditView/header.tpl', 
    'footerTpl' => 'include/EditView/footer.tpl', 
), 

Сделать режим уверен разработчик выключен для получения правильных результатов тестирования. Запустить ремонт & перестроить. Теперь все должно работать должным образом. :)

-1

Это был бы прекрасный пример того, как Sugar Logic Sugarcrm отлично работает. Блог о развитии сахара написал примерно аналогичный пример недавно http://developer.sugarcrm.com/2012/11/08/using-sugar-logic-to-conditonal-make-fields-read-only/

+0

Это было бы! Но, к сожалению, мы не в состоянии купить полную лицензию на сахарный сахар.Сейчас мы в Community Edition: он может делать все, что мы хотим, но для этого требуется еще немного кодирования. И для вещей, которые не (легко) сделаны в Sugar, мы построили внешнее приложение поверх базы данных Sugar. Тем не менее, я уверен, что в долгосрочной перспективе лицензия и Sugar Logic будут лучше. – TheUnpragmaticProgrammer

Смежные вопросы