【问题标题】:Conditionally make a field readonly in SugarCRM有条件地在 SugarCRM 中将字段设为只读
【发布时间】:2013-12-05 15:14:42
【问题描述】:

我正在 SugarCRM 社区版(6.5.16 版)上创建发票模块。

我想采用的技巧是根据名为“已发送”的复选框的值将字段设为只读。所以:如果发票已发送,用户将无法再编辑发票。

我知道可以通过将 type 设置为 readonly 来使 editviewdefs 中的字段只读:

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

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

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

有没有办法用 PHP 或 SugarCode(当然是 PHP)来做到这一点? 我想求助的最后手段是使用 javascript,但有点想避免它,因为这是非常重要的功能。一位用户不小心关闭了 javascript,最终可能会变得一团糟。

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

非常感谢!

【问题讨论】:

  • 我做到了。当 Stackoverflow 允许我(现在没有足够的声誉这样做)时会回答这个问题

标签: conditional readonly sugarcrm editview


【解决方案1】:

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

【讨论】:

  • 会的!但不幸的是,我们无法购买完整的糖许可证。我们现在在社区版上:它可以做我们想做的任何事情,但需要更多的编码才能做到这一点。对于不能(容易)在 Sugar 中完成的事情,我们在 Sugar 数据库之上构建了一个外部应用程序。但是,我相信从长远来看,许可证和 Sugar Logic 会更好。
【解决方案2】:

我找到了。

问题不在于我将代码放在哪里,问题在于 viewdef 的缓存。 所以修复+重建后看到的第一个项目将是其他项目的默认值。起初我没有发现问题,因为我将 SugarCRM 设置为开发人员模式,在这种模式下它不会缓存 viewdef。

最简单的方法是这样的: 首先,复制editviewdefs并命名为你喜欢的任何名称(我的是:closededitviewdefs.php) 现在,在新创建的 editview 文件中更改您喜欢的任何内容。 进行更改后,将 closededitviewdefs.php 中的第 5 行从 'EditView' => 更改为 'ClosedEditView' => 完成后,在您的模块/视图文件夹中创建一个文件: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',
),

确保关闭开发者模式以获得正确的测试结果。运行修复和重建。 现在一切都应该按预期工作。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多