有条件地在SugarCRM中创建一个字段

时间:2013-11-21 08:45:33

标签: conditional readonly sugarcrm editview

我正在SugarCRM Community Edition(版本6.5.16)上创建一个发票模块。

我想要的技巧是根据名为“已发送”的复选框的值创建一个字段readonly。因此:如果发送了发票,则用户无法再编辑发票。

我知道在editviewdefs中只读取一个字段可以通过将类型设置为readonly来完成:

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

但是,无论选中“已发送”复选框,此字段现在都是只读的。

我尝试在editviewdefs.php中使用PHP编辑数组,但这导致始终关闭字段。如果为所有记录构建一次editviewdefs.php,这是有道理的。

有没有办法用PHP或SugarCode(当然是PHP)做到这一点? 我想转向的最后一种方法是使用javascript,但有点想避免它,因为这是非常重要的功能。一个用户意外关闭javascript最终可能变得非常混乱。

所以,如果您有任何疑问,请询问。为了这个OP,我尽可能包含尽可能少的代码,但如果您对代码有疑问,请随意提问!

非常感谢!

2 个答案:

答案 0 :(得分:2)

我找到了。

问题不在于我放置代码的地方,问题在于缓存viewdef。 因此修复+重建后看到的第一个项目将成为其他项目的默认项目。我之前没有发现问题,因为我将SugarCRM设置为Developer Mode,它不会缓存viewdef。

最简单的方法是这样的: 首先,复制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',
),

确保开发人员模式已关闭,以获得正确的测试结果。运行修复&amp;重建。 现在一切都应该按预期工作了。 :)

答案 1 :(得分:-1)

这将是Sugarcrm的Sugar Logic运作良好的一个很好的例子。糖开发博客不久前写了一个类似的例子 http://developer.sugarcrm.com/2012/11/08/using-sugar-logic-to-conditonal-make-fields-read-only/