You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vtiger 7 CRM中用Vtlib函数创建PHP自定义函数按角色获取用户

在Vtiger 7中创建基于角色获取所有用户的Vtlib自定义函数

你可以通过Vtiger内置的PearDatabase类(Vtlib核心数据库操作类)实现这个需求,以下是完整的自定义函数实现步骤和代码:

1. 函数实现代码

将以下代码添加到你的Vtiger自定义文件中(比如include/CustomUtils.php,如果没有就新建该文件,确保被系统加载):

<?php
/**
 * 根据角色ID获取该角色下的所有用户
 * @param string $roleId 目标角色的ID(来自vtiger_role表的roleid字段)
 * @return array 包含用户信息的数组,每个元素是用户的键值对(id, user_name, email等)
 */
function getUsersByRoleId($roleId) {
    // 获取Vtiger数据库实例
    $db = PearDatabase::getInstance();
    
    // 构造查询SQL:关联用户表和用户-角色关联表
    $sql = "SELECT u.id, u.user_name, u.email, u.first_name, u.last_name
            FROM vtiger_users u
            INNER JOIN vtiger_user2role ur ON u.id = ur.userid
            WHERE ur.roleid = ?
            AND u.status = 'Active'"; // 只查询活跃用户,可按需调整
    
    // 执行查询,绑定角色ID参数防止SQL注入
    $result = $db->pquery($sql, [$roleId]);
    
    $users = [];
    // 遍历结果集,组装用户数据
    if ($db->num_rows($result) > 0) {
        while ($row = $db->fetchByAssoc($result)) {
            $users[] = $row;
        }
    }
    
    return $users;
}
?>

2. 关键部分说明

  • PearDatabase::getInstance():这是Vtlib推荐的数据库操作方式,确保和Vtiger的数据库连接逻辑保持一致,避免兼容性问题。
  • SQL关联查询:通过vtiger_user2role中间表关联用户表和角色表,精准获取指定角色下的用户。
  • 参数绑定:使用pquery并传入参数数组,避免SQL注入风险,是Vtiger开发的最佳实践。
  • 活跃用户过滤:默认只返回状态为Active的用户,若需要包含禁用用户,可移除AND u.status = 'Active'语句。

3. 调用示例

在自定义模块或业务逻辑中,可这样调用函数:

// 替换为你实际的目标角色ID
$roleId = "12x3";
$roleUsers = getUsersByRoleId($roleId);

// 遍历输出用户信息
foreach ($roleUsers as $user) {
    echo "用户ID: {$user['id']}, 用户名: {$user['user_name']}, 邮箱: {$user['email']}<br>";
}

4. 注意事项

  • 确保自定义文件能被Vtiger正确加载,比如在config.inc.php末尾添加include_once('include/CustomUtils.php');实现全局引入。
  • 调用函数的用户需具备访问用户数据的权限,否则会因Vtiger权限机制限制返回空结果。
  • 角色ID可从Vtiger后台角色管理页面获取,或通过查询vtiger_role表得到。

内容的提问来源于stack exchange,提问作者Santosh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:54:15