Toggle navigation


EspoCRM镜像手册(旧)

Version 1.0.0

软件版本:EspoCRM4.2.4

环境软件:Webmin1.8.1、Apache2.4.23、PHP5.6.26、MySQL5.6.34、phpMyAdmin4.4.15.5、Pure-FTPd1.0.42、Redis3.0.7、Memcached1.4.25、Jemalloc4.1.0

新购镜像完成后,请等待2-5分钟,待新购的ECS实例处于“运行中”后,通过浏览器访问http://ECS公网IP地址。若迟迟没有反应,请重启后再试。

安装过程务必参照文档进行(不看文档导致安装失败的几率大于90%): 安装配置EspoCRM简易手册

字段唯一性

espocrm有重复数据提醒功能,但默认是把email作为重复数据的判断依据。当我们录入联系人(Contact)的时候,希望手机字段(Field)唯一性,即对于已经存手机号,系统应该给出一个数据重复的判断,然后让用户选择是否保存,也可以让系统自动拒绝保存。

解决方案:

1、找到application/Espo/Modules/Crm/Services/contact.php getDuplicateWhereClause函数

2、改写其中的Field,例如:我们自定义一个字段名称为“w9mobile”的字段手机号,我们只需要把getDuplicateWhereClause中的“emailAddress”替换成“w9mobile”就可以了:

protected function getDuplicateWhereClause(Entity $entity, $data = array())
    {
        $data = array(
            'OR' => array(
                array(
                    'firstName' => $entity->get('firstName'),
                    'lastName' => $entity->get('lastName'),
                )
            )
        );
        if (
            ($entity->get('w9mobile') || $entity->get('w9mobileData'))
            &&
            ($entity->isNew() || $entity->isFieldChanged('w9mobile') || $entity->isFieldChanged('w9mobileData'))
        ) {
            if ($entity->get('w9mobile')) {
                $list = [$entity->get('w9mobile')];
            }
            if ($entity->get('w9mobileData')) {
                foreach ($entity->get('w9mobileData') as $row) {
                    if (!in_array($row->w9mobile, $list)) {
                        $list[] = $row->w9mobile;
                    }
                }
            }
            foreach ($list as $w9mobile) {
                $data['OR'][] = array(
                    'w9mobile' => $w9mobile
                );
            }
        }

        return $data;
    }

系统并不能阻止重复数据的保存,需要手工到数据库表中将“w9mobile”设置为唯一性字段,这样客户录入重复手机后,系统会报错。这样直接改写数据库,也有比较大的缺陷,每次对联系人的布局进行设置后,w9mobile字段都会被重新,需要重新设置唯一性。

对于字段更新后,数据库中的表字段属性也会自动变化,目前官方没有给出方案,比较直接的方法就是在数据库中关闭数据库用户的Alter权限,但这样做的有一定的风险。