2013-11-21 55 views
2

我在SugarCRM Community Edition(版本6.5.16)上創建了一個發票模塊。在SugarCRM中有條件地創建一個字段

我想提取的技巧是根據名爲'Sent'的複選框的值只讀字段。所以:如果發票已發送,用戶無法再編輯發票。

我知道editviewdefs製備場只讀可以通過設置類型來完成爲只讀:

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

然而,這一領域現在是隻讀的,無論該複選框「發送」被選中的。

我試着在editviewdefs.php中用PHP編輯數組,但是這導致總是關閉這些字段。如果editviewdefs.php爲所有記錄構建一次,這是有道理的。

有沒有辦法用PHP或SugarCode(當然是PHP)做到這一點? 我想轉向的最後一招是使用JavaScript,但有點想避免它,因爲這是非常重要的功能。一個不小心關閉javascript的用戶最終可能變得相當混亂。

所以,如果您有任何問題,請詢問。爲了這個OP,我已經包含了儘可能少的代碼,但是如果您有關於代碼的問題,請隨時詢問!

非常感謝!

+0

我做到了。將回答這個時Stackoverflow允許我(沒有足夠的聲譽,現在這樣做) – TheUnpragmaticProgrammer

回答

2

我找到了。

問題不在於我放置代碼的地方,問題在於viewdefs的緩存。 因此,修復+重建後看到的第一個項目將成爲其他項目的默認設置。起初我沒有發現問題,因爲我將SugarCRM設置爲開發人員模式,在此模式下它不緩存viewdefs。

去最簡單的方法是這樣的: 首先,進行復印editviewdefs並將其命名爲任何你喜歡(我的是:closededitviewdefs.php) 現在,更改無論你在新創建的文件EditView中一樣。 做出更改後,將closededitviewdefs.php中的第5行從'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

這將是一個很好的例子,其中Sugarcrm的Sugar Logic工程很棒。糖發展博客寫了一個類似的例子前一段時間 http://developer.sugarcrm.com/2012/11/08/using-sugar-logic-to-conditonal-make-fields-read-only/

+0

它會!但不幸的是,我們無法購買全面的糖牌。我們現在使用的是Community Edition:它可以做我們想做的任何事情,但需要更多的編碼才能做到。對於在Sugar中沒有(很容易)完成的事情,我們已經在Sugar數據庫之上構建了一個外部應用程序。不過,我相信從長遠來看,許可證和Sugar Logic會更好。 – TheUnpragmaticProgrammer