ProcessMaker 4社区版跨流程获取请求数据方法咨询
ProcessMaker 4社区版跨流程获取联系人数据的脚本方案
核心思路
直接通过PHP脚本查询ProcessMaker数据库,读取目标流程中提交的联系人数据,整理成下拉列表可用的格式,供第二个流程调用。
具体步骤
1. 确认目标流程与数据字段信息
首先找到联系人提交流程的process_uid(可在流程设计页面的URL中获取,格式类似XXX-XXX-XXX),同时确认表单中联系人相关字段的名称(比如contact_name、contact_phone)。
2. 创建脚本数据源
在第二个流程的设计界面中,进入数据源→脚本数据源,新建PHP脚本:
// 替换为你的联系人提交流程UID $targetProcessUid = 'XXX-XXX-XXX'; // 查询目标流程的所有实例数据 $query = "SELECT app_uid, app_data FROM app_data JOIN app_process ON app_data.app_uid = app_process.app_uid WHERE app_process.pro_uid = ?"; // 执行数据库查询 $stmt = DB::prepare($query); $stmt->execute([$targetProcessUid]); $results = $stmt->fetchAll(); // 解析JSON格式的表单数据,整理为下拉选项 $contactOptions = []; foreach ($results as $row) { $formData = json_decode($row['app_data'], true); if (!empty($formData['contact_name'])) { // 自定义显示标签,可按需调整 $displayLabel = $formData['contact_name'] . ' (' . $formData['contact_phone'] . ')'; $contactOptions[] = [ 'value' => $row['app_uid'], // 用流程实例UID作为选项值,也可改用联系人唯一标识 'label' => $displayLabel ]; } } return $contactOptions;
保存脚本后,在第二个流程的联系人选择下拉框组件中,选择该脚本作为数据源即可。
3. 关键注意事项
- 数据过滤:若只需已完成的流程数据,可在查询语句中添加
AND app_status = 'COMPLETED'(流程状态值还包括DRAFT、ACTIVE等)。 - 字段匹配:确保脚本中解析的字段名与表单字段完全一致(区分大小写)。
- 权限控制:确认执行脚本的用户具备数据库查询权限,社区版默认脚本引擎已包含基础DB访问权限。
- 性能优化:数据量较大时,建议添加分页逻辑(比如
LIMIT 50)避免系统负载过高。
替代方案:使用内置REST API
若不想直接操作数据库,也可通过ProcessMaker内置REST API获取数据,脚本示例:
// 获取当前用户的认证令牌 $token = $_SESSION['oauth_token']; // 替换为目标流程UID $processUid = 'XXX-XXX-XXX'; $apiUrl = "/api/1.0/workflow/process/{$processUid}/cases"; // 发起API请求 $client = new \GuzzleHttp\Client(['base_uri' => PM_BASE_URL]); $response = $client->request('GET', $apiUrl, [ 'headers' => [ 'Authorization' => "Bearer {$token}", 'Content-Type' => 'application/json' ], 'query' => ['status' => 'COMPLETED'] // 可选:过滤流程状态 ]); $cases = json_decode($response->getBody(), true); $contactOptions = []; foreach ($cases['data'] as $case) { $formData = $case['app_data']; if (!empty($formData['contact_name'])) { $displayLabel = $formData['contact_name'] . ' (' . $formData['contact_phone'] . ')'; $contactOptions[] = [ 'value' => $case['app_uid'], 'label' => $displayLabel ]; } } return $contactOptions;
注:社区版需确保用户具备目标流程的访问权限,GuzzleHttp为ProcessMaker内置客户端,无需额外安装。
内容的提问来源于stack exchange,提问作者Antal Kadas
相关产品推荐
相关产品推荐

