2

我正在 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,我包含了尽可能少的代码,但是如果您对代码有任何疑问,请随时提问!

非常感谢!

4

2 回答 2

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',
),

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

于 2013-11-22T09:21:01.267 回答
-1

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

于 2013-12-03T21:46:11.123 回答