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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:55:14