weixin_43686303 2025-07-15 11:08 采纳率: 0%
浏览 22

泛微OA如何实现通达OA里面的宏定义当前用户姓名

泛微OA流程的浏览字段,人员,人力资源。每过一个节点名字会变成当前节点的人的名字,如果固定它为第二个节点的操作人的名字
泛微e-cology版本: 9.00.2501.01
字段属性插入doFieldSQL("select id from hrmresource where id=' $currentuser$ '")

img

字段值固定在节点2的操作者的名字上,后续都不会变化

img

img

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-07-15 11:18
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    在泛微e-cology 9.00.2501.01版本中,实现类似通达OA中的“宏定义当前用户姓名”的功能,需要通过自定义SQL字段流程节点处理逻辑来实现。你提到的需求是:在流程的浏览字段中显示人员信息,并且固定为第二个节点的操作人姓名,后续节点不再变化

    下面我将详细说明如何实现这一需求,并提供具体的解决方案和代码示例。


    ✅ 实现目标

    • 在流程表单中插入一个字段(如“操作人姓名”);
    • 该字段显示的是流程第二节点操作人的姓名
    • 无论后续节点谁操作,该字段始终显示第二节点操作人的姓名
    • 使用 doFieldSQL 或其他方式实现。

    🛠️ 解决方案步骤

    1. 创建自定义字段

    在流程表单中添加一个文本字段,例如:

    • 字段名:secondNodeOperator
    • 字段类型:文本
    • 字段属性设置为:使用SQL表达式

    注意: 在泛微中,可以通过字段属性中的“SQL表达式”来动态获取数据。


    2. 使用 SQL 表达式获取第二节点操作人姓名

    在字段的“SQL表达式”中填写如下 SQL:

    select name from hrmresource where id = (select operatorid from workflow_nodeinstance where processid = $processid$ and nodeid = '2')
    

    解释:

    • workflow_nodeinstance 是流程节点实例表;
    • processid 是当前流程的唯一标识;
    • nodeid = '2' 表示第二节点;
    • operatorid 是第二节点操作人的ID;
    • hrmresource 是人力资源表,name 是姓名字段。

    3. 确保字段值固定不变(即使后续节点操作人变更)

    由于泛微的字段默认会在每次保存时重新计算,因此需要在流程节点处理中进行干预,确保字段值一旦设定就不会被后续节点修改。

    方法一:使用 流程节点事件脚本

    在流程设计中,找到第二节点,添加一个 “节点后事件”脚本,用于将第二节点操作人姓名写入字段中。

    示例代码(JavaScript):
    // 获取当前流程实例ID
    var processId = this.getProcessId();
    
    // 获取第二节点操作人ID
    var sql = "SELECT operatorid FROM workflow_nodeinstance WHERE processid = '" + processId + "' AND nodeid = '2'";
    var rs = DBUtil.query(sql);
    if (rs.next()) {
        var secondOperatorId = rs.getString("operatorid");
        
        // 获取操作人姓名
        var sqlName = "SELECT name FROM hrmresource WHERE id = '" + secondOperatorId + "'";
        var rsName = DBUtil.query(sqlName);
        if (rsName.next()) {
            var secondOperatorName = rsName.getString("name");
            
            // 设置字段值
            this.setFieldValue("secondNodeOperator", secondOperatorName);
        }
    }
    

    说明:

    • 这个脚本会在第二节点完成时运行;
    • 将第二节点操作人姓名写入字段 secondNodeOperator
    • 后续节点即使操作人不同,该字段也不会改变。

    4. 测试与验证

    • 提交流程,经过第二节点;
    • 查看字段 secondNodeOperator 是否显示正确的人名;
    • 继续流转到其他节点,确认字段值没有变化。

    💡 额外建议

    如果无法直接使用 SQL 表达式

    你可以考虑使用 Java 自定义函数 来实现更复杂的逻辑,比如:

    public String getSecondNodeOperator(String processId) {
        String sql = "SELECT name FROM hrmresource WHERE id = (SELECT operatorid FROM workflow_nodeinstance WHERE processid = ? AND nodeid = '2')";
        Object[] params = {processId};
        String result = DBUtil.queryForString(sql, params);
        return result;
    }
    

    然后在字段属性中调用这个方法,例如:

    doFieldSQL("getSecondNodeOperator($processid$)")
    

    📌 总结

    | 步骤 | 内容 | |------|------| | 1 | 创建字段 secondNodeOperator,设置为文本类型 | | 2 | 在字段属性中使用 SQL 表达式获取第二节点操作人姓名 | | 3 | 在第二节点添加“节点后事件”脚本,将第二节点操作人姓名写入字段 | | 4 | 测试流程,确保字段值不随后续节点操作人变化 |


    ✅ 最终效果

    • 浏览字段中显示的是第二节点操作人的姓名
    • 无论后续节点由谁操作,该字段值固定不变
    • 满足类似于通达OA中“宏定义当前用户姓名”的功能需求。

    如需进一步定制(如支持多节点、历史记录等),也可以扩展此逻辑。需要我帮你写 Java 自定义函数或脚本,也可以继续问我!

    评论

报告相同问题?

问题事件

  • 创建了问题 7月15日