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

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





上午好☀️☀️☀️️
本答案参考通义千问
在泛微e-cology 9.00.2501.01版本中,实现类似通达OA中的“宏定义当前用户姓名”的功能,需要通过自定义SQL字段或流程节点处理逻辑来实现。你提到的需求是:在流程的浏览字段中显示人员信息,并且固定为第二个节点的操作人姓名,后续节点不再变化。
下面我将详细说明如何实现这一需求,并提供具体的解决方案和代码示例。
doFieldSQL 或其他方式实现。在流程表单中添加一个文本字段,例如:
secondNodeOperator文本注意: 在泛微中,可以通过字段属性中的“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 是姓名字段。由于泛微的字段默认会在每次保存时重新计算,因此需要在流程节点处理中进行干预,确保字段值一旦设定就不会被后续节点修改。
在流程设计中,找到第二节点,添加一个 “节点后事件”脚本,用于将第二节点操作人姓名写入字段中。
// 获取当前流程实例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;secondNodeOperator 是否显示正确的人名;你可以考虑使用 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 | 测试流程,确保字段值不随后续节点操作人变化 |
如需进一步定制(如支持多节点、历史记录等),也可以扩展此逻辑。需要我帮你写 Java 自定义函数或脚本,也可以继续问我!