更改sugarcrm中某个字段的显示逻辑


Changing display logic for a field in sugarcrm

我有以下情况:没有名字或姓氏的联系人,实际上他们只有一个电子邮件地址。

我可以很好地处理这些联系人,但当我在任何地方使用列表视图(例如显示公司的所有联系人)时,现在都无法点击联系人(通常你会点击姓名)。

我正在寻找解决这个问题的方法,例如显示一个可点击的文本,比如"name not known",但我不知道如何做到这一点。我一直在看手册、模块目录和sugarfields目录中的文件,但不太清楚。

我得到的最接近的是/sugaCRM/modules/Contacts/metadata/listviewdefs.php这段代码所在的位置:

$listViewDefs['Contacts'] = array(
    'NAME' => array(
        'width' => '20%',       
        'label' => 'LBL_LIST_NAME', 
        'link' => true,
        'contextMenu' => array('objectType' => 'sugarPerson', 
                               'metaData' => array('contact_id' => '{$ID}', 
                                                   'module' => 'Contacts',
                                                   'return_action' => 'ListView', 
                                                   'contact_name' => '{$FULL_NAME}', 
                                                   'parent_id' => '{$ACCOUNT_ID}',
                                                   'parent_name' => '{$ACCOUNT_NAME}',
                                                   'return_module' => 'Contacts', 
                                                   'return_action' => 'ListView', 
                                                   'parent_type' => 'Account', 
                                                   'notes_parent_type' => 'Account')
                              ),
        'orderBy' => 'name',
        'default' => true,
        'related_fields' => array('first_name', 'last_name', 'salutation', 'account_name', 'account_id'),
        ), 

某个地方必须有一个函数将名字和姓氏连接在一起。。。


编辑:我找到了一个解决方案:

实际的串联函数位于/sugeCRM/include/SugaObjects/templates/person/person.php中,称为_create_proper_name_field()

我可以通过在函数末尾添加这样的内容来修改特定情况的输出:

if (empty(trim($full_name))){
    $full_name = 'Name unknown'; 
}

然而,我宁愿有一个升级安全的解决方案,所以这将是下一个挑战。

不要编辑核心,因为下一次升级会破坏您的SugarCRM实例。使用逻辑挂钩以确保升级安全:

在/custom/modules/Contacts中创建一个文件"logic_books.php"/在该文件中,添加以下代码:

<?php
    $hook_array['before_save'][] = Array(1,'logic_fill_name','custom/modules/Contacts/logic_hooks/logics.php','ContactLogics','logic_fill_name');

在你做完这些之后。在/custom/modules/Contacts/logic_books中创建文件"logics.php"。在logics.php文件中,添加以下内容:

<?php
    require_once 'include/SugarQuery/SugarQuery.php';
    /**
     * Class ContactLogics
     */
    class ContactLogics {
        /**
         * @param $bean
         * @param $event
         * @param $arguments
         */
        public function logic_fill_name($bean, $event, $arguments) {
            if (empty(trim($bean->first_name)) && empty(trim($bean->last_name))){
                $bean->last_name = 'Name unknown'; 
            }
        }
    }

现在来解释一下。编辑记录视图并按下保存按钮时,将触发逻辑挂钩"before_save"。当全名为空时,此代码将把全名更改为"name unknown"。当执行"before_save"时,将进行实际的保存。