昨天看了一天 SuiteCRM logic hook 的资料,并搜索了 github 上能搜到的所有代码。
但是,感觉效果并不好,公开出来的代码太少,只能零散的学到一些小技巧。
于是,我决定直接在测试环境中通过调试来摸索一番。
修改 logic_hooks.php
例如,我想在客户新关联一个联系人时,自动触发一段 logic hook 逻辑代码。
那么,我需要进入到目录
custom/modules/Contacts
打开 logic_hooks.php, 在最后添加上自己定义的逻辑,修改完后,如下:
<?php
// Do not store anything in this file that is not part of the array or the hook version. This file will
// be automatically rebuilt in the future.
$hook_version = 1;
$hook_array = Array();
// position, file, function
$hook_array['before_save'] = Array();
$hook_array['before_save'][] = Array(1, 'Contacts push feed', 'modules/Contacts/SugarFeeds/ContactFeed.php','ContactFeed', 'pushFeed');
$hook_array['before_save'][] = Array(77, 'updateGeocodeInfo', 'modules/Contacts/ContactsJjwg_MapsLogicHook.php','ContactsJjwg_MapsLogicHook', 'updateGeocodeInfo');
$hook_array['after_save'] = Array();
$hook_array['after_save'][] = Array(1, 'Update Portal', 'modules/Contacts/updatePortal.php','updatePortal', 'updateUser');
$hook_array['after_save'][] = Array(77, 'updateRelatedMeetingsGeocodeInfo', 'modules/Contacts/ContactsJjwg_MapsLogicHook.php','ContactsJjwg_MapsLogicHook', 'updateRelatedMeetingsGeocodeInfo');
// 下面是我添加的自定义逻辑
$hook_array['after_relationship_add'] = Array();
$hook_array['after_relationship_add'][] = array(
99, // sort order
'UpdatePaymentSum', // hook label
'custom/modules/Contacts/UpdatePaymentSum.php', // hook file
'UpdatePaymentSum', // hook class
'updatePayment' // hook method
);
?>
新建 PHP 文件
例如指定的 hook 文件在当前目录,就需要在当前目录下新建
UpdatePaymentSum.php
测试代码如下:
<?php
class UpdatePaymentSum
{
public function updatePayment($bean, $event, $arguments)
{
$GLOBALS['log']->fatal('event: ' . $event);
}
}
即,只打印一段日志。
修改文件权限
例如,对于新增的 hook 文件 UpdatePaymentSum.php。需要确保文件权限:
sudo chown www-data:www-data UpdatePaymentSum.php
sudo chmod +x UpdatePaymentSum.php
确认:
$ ls -lah
total 20K
drwxrws--- 3 www-data www-data 4.0K Mar 22 10:48 .
drwxrwxr-x 16 www-data www-data 4.0K Mar 22 10:46 ..
drwxrws--- 3 www-data www-data 4.0K Mar 22 09:35 Ext
-rwxr-xr-x 1 www-data www-data 1.3K Mar 22 10:45 logic_hooks.php
-rwxr-xr-x 1 www-data www-data 794 Mar 22 10:48 UpdatePaymentSum.php
quick repair and rebuild
在部署了新的 logic hook 之后,需要使用管理员账号在系统管理 - 修复 - 执行 quick repair and rebuild (快速修复和重建)。
修复并重建数据库、扩展组件、字段定义文件、 组件等。
但是这个功能描述太吓人了。。。为啥是重建数据库呢?
应该是描述问题。
之前只在安装 SuiteCRM 中文语言包时,使用过此功能。参考: SuiteCRM 中文翻译语言包安装
但是也没有发现数据库的数据被清空,因为 admin 账号依然可以登录哇。
通过日志确认 logic hook 生效
执行完 quick repair and rebuild 之后,在具体的客户页面添加一个联系人之后,就能在项目根目录的 suitecrm.log 日志文件中看到调试日志了。如:
Fri Mar 22 10:47:41 2024 [1034040][1][FATAL] event: after_relationship_add
是否每次修改都需要执行 quick repair and rebuild
并不是这样的。
只要当前 logic hook 已经注册过了,那么之后,对当前 hook 的代码修改,并不需要再次执行 quick repair and rebuild。
风险警告
如果 logic hook 中的代码处理不当,报了异常,那么新增的联系人记录也会保存失败。
需要慎重。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式