跳转至

title: 泛微常用需求解决方案 created: 2026-04-18 updated: 2026-04-18 type: reference tags: [weaver]


泛微常用需求解决方案

日常运维与开发中积累的高频需求与标准实现方案。

根据主表字段控制明细列显示/隐藏

需求描述

主表有一个选择框字段,根据该字段的值动态控制明细表某些列的显示或隐藏。 典型场景:主表选择框值为 0 时隐藏明细第2列,值为 1 时隐藏第3列,其他值全部显示。

实现原理

泛微 Ecology 9 明细表有一个特性:给某一列设置自定义 class 后,该列所有单元格(包括后续新增的行)都会自动继承这个 class

利用这个特性,只需通过 JS 给目标列添加/移除 detail_hide_col 类,配合 CSS display: none 即可控制整列显隐,无需逐行处理。

配置步骤

  1. 设置明细列 class:在表单设计器中,为目标明细列设置自定义属性 class(如 detail_column2detail_column3
  2. 插入代码块:在流程表单或建模表单中插入 JS 代码块
  3. 监听字段变化:使用 bindFieldChangeEvent 监听主表选择框字段
  4. 添加/移除 class:根据字段值调用 addClass / removeClass

代码示例 — 流程表单 (WfForm)

<style type="text/css">
  .detail_hide_col { display: none; }
</style>

<script>
jQuery(document).ready(function () {
  // field18927 替换为实际的选择框字段 ID
  WfForm.bindFieldChangeEvent("field18927", function (obj, id, value) {
    if (value == 0) {
      // 选择 0:隐藏第2列,显示第3列
      jQuery(".detail_column2").addClass("detail_hide_col");
      jQuery(".detail_column3").removeClass("detail_hide_col");
    } else if (value == 1) {
      // 选择 1:隐藏第3列,显示第2列
      jQuery(".detail_column2").removeClass("detail_hide_col");
      jQuery(".detail_column3").addClass("detail_hide_col");
    } else {
      // 其他值:全部显示
      jQuery(".detail_column2").removeClass("detail_hide_col");
      jQuery(".detail_column3").removeClass("detail_hide_col");
    }
  });
});
</script>
col"); jQuery(".detail_column3").removeClass("detail_hide_col"); } }); }); ```### 代码示例 — 建模表单 (ModeForm)

<style type="text/css">
  .detail_hide_col { display: none; }
</style>

<script>
jQuery(document).ready(function () {
  // field18948 替换为实际的选择框字段 ID
  ModeForm.bindFieldChangeEvent("field18948", function (obj, id, value) {
    if (value == 0) {
      jQuery(".detail_column3").addClass("detail_hide_col");
      jQuery(".detail_column4").removeClass("detail_hide_col");
    } else if (value == 1) {
      jQuery(".detail_column4").addClass("detail_hide_col");
      jQuery(".detail_column3").removeClass("detail_hide_col");
    } else {
      jQuery(".detail_column3").removeClass("detail_hide_col");
      jQuery(".detail_column4").removeClass("detail_hide_col");
    }
  });
});
</script>

注意事项

项目 说明
字段 ID 需替换为实际的 fieldXXXX,可通过浏览器开发者工具查看
列 class detail_column2 对应明细第2列,需与表单设计器中设置的 class 一致
流程 vs 建模 流程表单用 WfForm,建模表单用 ModeForm,其余逻辑相同
初始状态 页面加载时若需默认隐藏,可在 ready 回调外额外执行一次 class 操作

实战案例:允许代订控制

需求:根据主表字段 sfyxdd(是否允许代订)的值,控制明细表中"被代订人姓名" (bddrmx3) 和 "被代订人手机" (bddrsjhmx3) 列的显隐。

// 假设 sfyxddvalue 已获取
if (sfyxddvalue != "") { 
    // 允许代订:显示被代订填写信息
    jQuery(".bddrmx3").removeClass("detail_hide_col");
    jQuery(".bddrsjhmx3").removeClass("detail_hide_col");
} else { 
    // 不允许代订:隐藏被代订填写信息
    jQuery(".bddrmx3").addClass("detail_hide_col");
    jQuery(".bddrsjhmx3").addClass("detail_hide_col");
}

数据库日志清理 (SQL Server)

de_col"); jQuery(".bddrsjhmx3").addClass("detail_hide_col"); }

---

## 数据库日志清理 (SQL Server)### 需求描述
泛微 Ecology 9 使用 SQL Server 数据库,随着时间推移,数据库事务日志文件(`.ldf`)会不断增长,占用大量磁盘空间。需要定期备份日志并收缩文件以释放空间。

### 脚本代码
```sql
declare @bakfile nvarchar(200) -- @bakfile 备份文件名
set @bakfile='D:\DB Backup\e9_log_bak_'+convert(nvarchar(8),getdate(),112)+'.log'

-- 1. 备份事务日志 (必须先备份才能截断日志,以便收缩)
-- 注意:'ecology' 是数据库名,请根据实际情况修改
BACKUP LOG ecology TO DISK= @bakfile WITH RETAINDAYS= 1, COMPRESSION

-- 2. 收缩日志文件
-- 注意:'ecology_Log' 是日志文件的逻辑名称,500 是收缩后的目标大小 (MB)
dbcc shrinkfile(ecology_Log, 500) 
go

注意事项

项目 说明
路径检查 脚本中的 D:\DB Backup\ 目录必须存在,且 SQL Server 服务账号拥有写入权限
逻辑名称 ecology_Log 是日志文件的逻辑名称,非物理文件名。可在 SSMS 中右键数据库 -> 属性 -> 文件 查看
数据库名 脚本中默认库名为 ecology,如不同请修改
建议 首次执行前建议先做一次完整数据库备份;建议将此脚本设为 SQL Server Agent 定时任务自动执行
收缩大小 500 单位为 MB,根据实际磁盘空间和需求调整。不宜过小,否则会导致日志频繁自动增长影响性能

EBU3 Web 日志查看工具

工具简介

EBU3 Web 日志查看器 是泛微官方提供的一个基于浏览器的日志分析工具。 - 核心价值:无需 SSH/远程登录服务器,直接在 OA 浏览器界面查看、分析服务器日志。 - 功能特性: - 支持实时刷新(类似 tail -f) - 关键字过滤与高亮(快速定位 Error/Exception) - 支持查看 Ecology 日志、Resin 日志、集成日志等 - 支持多文件切换

访问路径

http://你的OA域名/weaver/EBU3/log/indexV2.html

部署与使用

  • 默认情况:标准版 Ecology 安装包通常包含此工具。
  • 文件位置:服务器上的路径通常为 /weaver/ecology/EBU3/log/indexV2.html
  • 注意事项:如果访问 404,请检查服务器该目录下是否存在 EBU3 文件夹。如果是缺失状态,需联系泛微获取该工具包并解压至 Ecology 根目录。

服务器磁盘空间清理

1. 定位大文件

在清理之前,建议先定位占用空间最大的目录或文件。

Linux 系统

使用 du 命令查看当前目录下各子目录的大小:

# 查看当前目录下所有文件夹大小
du -sh ./*
清理之前,建议先定位占用空间最大的目录或文件。

#### Linux 系统
使用 `du` 命令查看当前目录下各子目录的大小:
```bash
# 查看当前目录下所有文件夹大小
du -sh ./*# 常用案例:排除附件目录 (filesystem) 和数据库备份目录 (oadata),只显示大于 1G 的目录
du -sh ./* --exclude="filesystem" --exclude="oadata" | grep G
- -s:显示总计 - -h:人类可读格式 (K, M, G)

Windows 系统

推荐使用 WizTree (免安装版) 扫描定位。 ata" | grep G

- `-s`:显示总计
- `-h`:人类可读格式 (K, M, G)

#### Windows 系统
推荐使用 **WizTree** (免安装版) 扫描定位。### 2. 可安全删除的文件/目录

| 目录/文件路径 (相对安装根目录) | 说明 | 建议 |
|---------------------------|------|------|
| `ecology/log/` | Ecology 系统日志 | **7 天前**的日志可删除 |
| `ecology/sqllog/` | SQL 日志 | 可清理 |
| `ecology/WEB-INF/sqllog/` | SQL 日志 | 可清理 |
| `Resin/log/` | Resin 中间件日志 | **7 天前**的日志可删除 |
| `Resin/logs/` | Resin 接口日志 | 可清理 |
| `Resin/hs_err_pid*` | Resin 崩溃文件 | 直接删除 |
| `Resin/replay_pid*` | Resin 崩溃文件 | 直接删除 |
| `ecology/log/delFile` | 运维平台删除文件拦截日志 | 可删除 |
| `ecology/log/interceptSql` | 运维平台 SQL 拦截日志 | 可删除 |
| `ecology/log/hrmkq/` | 考勤日志 | 可删除 |
| `ecology/log/error.log` | 集成错误日志 | 可删除 |
| `ecology/log/integration` | 集成相关日志 | 可删除 |

**临时文件目录 (可清理内容):**
| 目录路径 | 说明 |
|----------|------|
| `ecology/filesystem/docWaterMarkTemp/` | 水印临时文件 |
| `ecology/filesystem/sourceFilePath/` | 永中/Office 转换临时文件 |
| `ecology/filesystem/targetFilePath` | 永中/Office 转换临时文件 |
| `ecology/filesystem/downloadBatch*` | 批量下载临时文件 |
| `ecology/filesystem/docxToHtml/` | Office 转 HTML 预览临时文件 |
| `ecology/filesystem/mimeTypeSource` | 附件安全校验临时文件 |
| `ecology/doctempfile` | 移动端下载附件临时文件 |
| `EMobile/webapps/ROOT/WEB-INF/upload` | EMobile 上传临时文件 |
| `EMobile/webapps/ROOT/WEB-INF/logs` | EMobile 运行日志 |
| `EMobile/webapps/ROOT/WEB-INF/cache/application` | EMobile 缓存文件 |

> **注意**:`ecology/filesystem/fileSystemMonitorTem` 是运维平台删除附件的回收站(通常保留 14 天),清理前请确认。
 EMobile 缓存文件 |

> **注意**:`ecology/filesystem/fileSystemMonitorTem` 是运维平台删除附件的回收站(通常保留 14 天),清理前请确认。### 3. 常见问题
- **Linux 磁盘空间不足,但删除文件后 `df -h` 未释放**: 
  可能是文件被进程占用(需重启 Resin/OA 服务释放)或 **Inode 耗尽**。
  - **检查 Inode**: `df -i`。若 Inode 使用率 100%,即使有空间也无法创建新文件,通常是因为 session 文件或日志产生太多小文件,需针对性清理。

---

## 明细表预算信息可视化展示 (JS 案例)

### 需求描述
在明细表中,通过 JS 获取多个预算相关字段(现可用预算、已使用预算、审批中预算、项目预算总额),并将其格式化为带颜色的 HTML 文本,统一渲染到一个展示字段中,实现类似“预算管理”的卡片式查看效果。

### 实现原理
1. 遍历明细表的所有行索引 (`WfForm.getDetailAllRowIndexStr`)。
2. 获取每行中各个预算字段的值。
3. 拼接为包含不同颜色样式的 HTML 字符串。
4. 使用 `WfForm.changeFieldValue` 配合 `specialobj: { showhtml: ... }` 将 HTML 渲染到目标字段。
不同颜色样式的 HTML 字符串。
4. 使用 `WfForm.changeFieldValue` 配合 `specialobj: { showhtml: ... }` 将 HTML 渲染到目标字段。### 代码示例

```javascript
// 假设字段ID变量已在外部定义,例如 sskyys_mx3id 等
// 假设 qxsd 是一个自定义的格式化函数(如千分位或保留小数)

var rowArr = WfForm.getDetailAllRowIndexStr("detail_3").split(",");
for (var i = 0; i < rowArr.length; i++) {
    var rowIndex = rowArr[i];

    // 1. 获取各预算字段值并格式化
    // 注意:qxsd 需为页面中已定义的格式化函数
    let sskyys_mx3v = qxsd(WfForm.getFieldValue(sskyys_mx3id + "_" + rowIndex));
    let ysyys_mx3v = qxsd(WfForm.getFieldValue(ysyys_mx3id + "_" + rowIndex));
    let spzys_mx3v = qxsd(WfForm.getFieldValue(spzys_mx3id + "_" + rowIndex));
    let xmysze_mx3v = qxsd(WfForm.getFieldValue(xmysze_mx3id + "_" + rowIndex));

    // 2. 拼接 HTML 字符串
    let xmysxx_show_str = '<div style="">现可用预算:' + sskyys_mx3v + '</div>'
        + '<div style="color:blue">已使用预算:' + ysyys_mx3v + '</div>'
        + '<div style="color:green">审批中预算:' + spzys_mx3v + '</div>'
        + '<div style="color:red">项目预算总额:' + xmysze_mx3v + '</div>';

    // 3. 渲染到目标字段
    WfForm.changeFieldValue(xmysxx_3id + "_" + rowIndex, {
        value: '',
        specialobj: {
            showhtml: xmysxx_show_str
        }
    });
}

注意事项

  • 触发时机:通常需要在页面加载完成后执行一次,并在相关预算字段值发生变化时重新计算(监听字段变化事件)。
  • 字段类型:目标展示字段 (xmysxx_3id) 的类型通常应为多行文本或特定支持 HTML 渲染的字段类型。
  • 性能优化:如果明细行数非常多,建议仅在用户查看或特定操作触发时执行渲染,避免频繁 DOM 操作影响性能。

Ecology 9 前端组件库 (Cloud Store)

资源简介

泛微官方提供的 前端二次开发组件库文档,是 ecode 开发和新模块构建(SPA)的必备参考资料。 通过使用该文档提供的标准组件(Wea 系列),可以确保开发出的页面与泛微原生界面风格一致。

泛微官方提供的 前端二次开发组件库文档,是 ecode 开发和新模块构建(SPA)的必备参考资料。 通过使用该文档提供的标准组件(Wea 系列),可以确保开发出的页面与泛微原生界面风格一致。### 访问地址 🔗 https://cloudstore.e-cology.cn/#/pc/doc/common-index

主要组件分类

分类 核心组件示例 用途说明
业务组件 WeaBrowser (浏览按钮), WeaOrgTree (组织树) OA 核心业务逻辑封装,如选人、选部门、权限控制等
表单组件 WeaInput, WeaSelect, WeaDatePicker 标准表单控件,支持联动和校验
布局/通用 WeaTable (表格), WeaDialog (弹窗), WeaTree (树) 基础 UI 元素,构建页面骨架
工具组件 WeaTools.storage (缓存), WeaTools.fetch (请求) 辅助开发,如数据请求、本地存储

常用链接与示例


工作流路径可视化引擎 (SPA) 与高阶应用

引擎简介与访问路径

这是泛微 E9 较新版本的流程图形化渲染引擎 (SPA)。通常用于查看流程流转逻辑、排查条件分支问题或嵌入式展示。

完整访问路径示例: /weaver/spa/workflow/static4engine/engine.html#/main/workflowengine/path/pathSet/pathDetail/flowSet/pictureEditNew?workflowId=XXXXX&showLeftTree=false&showBaseTop=false&needBaseTab=false&needDetailTab=false EditNew?workflowId=XXXXX&showLeftTree=false&showBaseTop=false&needBaseTab=false&needDetailTab=false### 核心 URL 参数解析 | 参数 | 含义 | 说明 | |:---|:---|:---| |workflowId| **流程 ID** | 核心参数,指定要查看/编辑的流程 | |showLeftTree| 左侧目录树 |false隐藏组织/流程树,适合嵌入 | |showBaseTop| 顶部基础栏 |false隐藏顶部冗余操作栏 | |needBaseTab| 基础信息页签 |false不显示流程基础设置 Tab | |needDetailTab| 详细配置页签 |false不显示详细节点配置 Tab | |pictureEditNew` | 新版画板模式 | 启用新版图形化路径渲染器 |

高阶应用场景 (自动化与爬虫)

该路径暴露了泛微底层的数据加载逻辑。通过脚本 (如 Python + Selenium/Puppeteer 或 接口逆向) 遍历 workflowId,可实现以下高阶运维/管理功能:

1. 全量流程资产盘点

  • 场景:系统用久了存在大量无人使用的“僵尸流程”或重复流程。
  • 做法:脚本遍历 ID,抓取流程名称、创建/修改时间、当前状态,生成 Excel 清单。
  • 价值:快速定位冗余流程进行清理,减轻系统负担,实现资产数字化。

2. 自动化导出流程说明书 (应对审计)

  • 痛点:ISO 审计或合规检查需要整理《流程管理手册》,人工截图排版效率极低。
  • 做法:自动化打开该链接 → 高清截图 → 抓取流程描述 → 利用 python-docx 自动排版生成 Word 文档。
  • 价值:一键生成标准化流程手册,大幅降低文档维护成本。

3. 底层 XML 备份与环境迁移

  • 原理:前端绘图依赖后台返回的 流程定义 XML
  • 做法:逆向数据接口,批量下载所有流程的 XML 文件。
  • 价值
  • 一键备份/迁移:新环境直接导入 XML 即可还原成百上千个流程。
  • 版本控制:将 XML 存入 Git,实现“流程即代码”(Flow as Code),保留历史修改痕迹。

4. 安全与逻辑审计

  • 场景:排查流程中是否遗留硬编码密码、敏感 Key 或废弃字段。
  • 做法:脚本批量解析导出的 XML 内容,进行正则匹配或 AST 分析。
  • 价值:发现潜在的安全隐患(如明文密码)、逻辑死锁或引用已删除的字段 ID,提前修复线上报错。

⚠️ 注意事项

  • 接口鉴权:爬虫需携带有效的 OA Session/Cookie,建议仅在内网环境运行。
  • 频率控制:批量请求时注意控制并发频率,避免触发 Resin/WAF 限制或影响正常业务。
  • 生产规范:任何批量导出/操作建议在测试环境验证后,于业务低峰期执行。

流程时效分析与性能排查 (SQL)

📊 此部分数据可直接用于 流程运营月报 的效率指标统计。

流程时效分析是运维日常排查“流程为什么慢”以及为流程优化提供数据支撑的核心手段。 📊 此部分数据可直接用于 流程运营月报 的效率指标统计。

流程时效分析是运维日常排查“流程为什么慢”以及为流程优化提供数据支撑的核心手段。### 1. 节点级耗时明细查询 (基础版) 用于查询特定时间段内,已归档流程在各个节点的流转耗时、操作人及接收时间明细。

SELECT 
    wb.workflowname AS '流程名称',
    req.requestmark AS '请求编号',
    req.requestid AS '请求ID',
    req.workflowid AS '流程ID',
    fl.nodeid AS '节点ID',
    nb.nodename AS '节点名称',
    fl.nodeoperator AS '操作人ID',
    hr.lastname AS '操作人姓名',
    dep.departmentname AS '所属部门', -- 优化:增加部门维度
    req.createdate AS '发起日期',
    fl.receivedate AS '节点接收日期',
    fl.receivetime AS '节点接收时间',
    -- 优化:处理 NULL 值并格式化耗时
    CASE 
        WHEN fl.flowtime IS NULL THEN '处理中'
        WHEN fl.flowtime < 60 THEN CAST(fl.flowtime AS VARCHAR) + '秒'
        WHEN fl.flowtime < 3600 THEN CAST(fl.flowtime / 60.0 AS DECIMAL(10, 1)) + '分'
        ELSE CAST(fl.flowtime / 3600.0 AS DECIMAL(10, 1)) + '小时'
    END AS '节点耗时',
    req.currentnodetype AS '当前状态' -- 3:归档, 2:退回, 0/1:审批中
FROM 
    workflow_requestbase req
INNER JOIN 
    workflow_base wb ON req.workflowid = wb.id
LEFT JOIN 
    workflow_node_fix_flowtime fl ON req.workflowid = fl.workflowid AND req.requestid = fl.requestid
LEFT JOIN 
    hrmresource hr ON fl.nodeoperator = hr.id
LEFT JOIN 
    hrmdepartment dep ON hr.departmentid = dep.id -- 优化:关联部门表
LEFT JOIN 
    workflow_nodebase nb ON fl.nodeid = nb.id
WHERE 
    req.createdate >= '2024-08-01' AND req.createdate <= '2024-12-31'
    AND req.lastnodetype = 1 -- 限制为结束节点
    AND req.currentnodetype = '3' -- 限制为已归档流程
ORDER BY 
    req.requestmark, fl.receivetime DESC; -- 优化:按请求编号分组,避免同一流程记录分散
e = '3' -- 限制为已归档流程 ORDER BY req.requestmark, fl.receivetime DESC; -- 优化:按请求编号分组,避免同一流程记录分散 ```### 2. 流程瓶颈分析 (聚合统计版) 用途:不查具体某个人,而是从宏观角度找出哪个节点是瓶颈(平均耗时最长、最大耗时离谱)。

SELECT 
    wb.workflowname AS '流程名称',
    nb.nodename AS '节点名称',
    COUNT(*) AS '流转次数',
    -- 平均耗时 (小时)
    ROUND(AVG(fl.flowtime) / 3600.0, 2) AS '平均耗时(H)',
    -- 最大耗时 (小时) -> 重点关注
    ROUND(MAX(fl.flowtime) / 3600.0, 2) AS '最大耗时(H)',
    -- 最小耗时 (小时)
    ROUND(MIN(fl.flowtime) / 3600.0, 2) AS '最小耗时(H)'
FROM 
    workflow_node_fix_flowtime fl
INNER JOIN 
    workflow_requestbase req ON fl.workflowid = req.workflowid AND fl.requestid = req.requestid
INNER JOIN 
    workflow_base wb ON req.workflowid = wb.id
LEFT JOIN 
    workflow_nodebase nb ON fl.nodeid = nb.id
WHERE 
    req.createdate >= '2024-01-01' 
    AND req.currentnodetype = '3' -- 仅统计已完成流程
GROUP BY 
    wb.workflowname, nb.nodename
HAVING 
    AVG(fl.flowtime) > 3600 -- 筛选平均耗时超过 1 小时的节点
ORDER BY 
    '平均耗时(H)' DESC;
b.nodename HAVING AVG(fl.flowtime) > 3600 -- 筛选平均耗时超过 1 小时的节点 ORDER BY '平均耗时(H)' DESC; ```### 💡 优化说明 (对比原版)

优化点 原版问题/局限 完善后的改进 运维价值
维度缺失 缺少部门信息,无法分析“哪个部门流程慢”。 关联 hrmdepartment 表,增加部门维度 支持按部门出具流程效率报告,定位管理瓶颈。
数据展示 耗时仅显示小数小时,不直观。 增加 CASE WHEN 逻辑,自动转换为 “秒/分/小时” 单位,并处理未结束节点的 NULL 值。 结果更人性化,一眼看出是卡了几分钟还是几天。
排序逻辑 按日期排序会导致同一流程的节点记录分散。 增加按 requestmark 排序,确保同一流程的流转记录聚合在一起 方便排查单个流程的全链路路径,不被打断。
状态标识 仅查了已归档。 保留归档过滤,但增加了 currentnodetype 输出,方便修改条件查询退回进行中的流程。 灵活排查异常流程(如:查询所有被退回的流程)。
宏观分析 仅有明细,难以发现共性问题。 新增 聚合统计版 SQL,按节点统计平均/最大耗时。 核心价值:快速定位系统中的“性能瓶颈节点”,为优化流程(删减节点、加签转并签)提供数据依据。

流程权限穿透与特殊配置

1. 流程穿透 (Workflow Penetration)

核心文件ecology\WEB-INF\prop\workflow_E9noCheckRightWf.properties

💡 什么是“流程穿透”? 在泛微 E9 默认机制中,如果用户没有权限(未参与、无查看权),点击关联流程链接会提示“无权访问”。 流程穿透通过配置文件建立“权限免检白名单”,允许特定流程被关联访问时跳过权限校验

🔧 配置方法workflow_E9noCheckRightWf.properties 文件中添加目标流程 ID:

# 示例:允许查看关联的报销流程(123)和合同流程(456)
workflowid=123,456
(修改后无需重启 Resin,通常即时生效,部分版本需清理缓存)

⚠️ 高风险警告 (必读) - 安全降级:配置在此处的流程 ID 将不再校验访问权限。任何能通过链接或关联入口访问的用户,均可查看/操作该流程。 - 严禁配置敏感流程绝对不要将涉及薪资、人事、高管审批等敏感流程 ID 写入,否则会导致严重的数据泄露。 - 适用场景: - 强关联流程跳转(如:报销单关联的合同,审批报销的领导需查看合同详情)。 - 公开性质的流程(如行政通知、公共会议室预订)。 - 第三方报表/门户集成跳转。


泛微 E9 运维工具与高阶技巧

转(如:报销单关联的合同,审批报销的领导需查看合同详情)。 - 公开性质的流程(如行政通知、公共会议室预订)。 - 第三方报表/门户集成跳转。


泛微 E9 运维工具与高阶技巧### 1. E9 系统升级工具 (V6.4.2)

  • 文件名称E9升级工具V6.4.2.zip
  • 工具简介:泛微官方提供的 Ecology 9 系统升级/补丁工具,包含核心 classbean 更新脚本。
  • 主要用途
  • 用于在线或离线升级泛微 OA 系统至特定补丁版本。
  • 修复已知系统 Bug 或增强底层功能。
  • 运维建议
  • 备份优先:升级前务必备份 ecology 目录及数据库。
  • 环境测试:强烈建议先在测试环境验证,确认业务流程无异常后再升级生产环境。
  • 重启服务:升级完成后需重启 Resin/WebLogic 服务使新 Class 生效。 据库。
  • 环境测试:强烈建议先在测试环境验证,确认业务流程无异常后再升级生产环境。
  • 重启服务:升级完成后需重启 Resin/WebLogic 服务使新 Class 生效。### 2. 表单明细表 Excel 复制粘贴增强 需求描述: 允许用户在 Excel 中复制多行多列数据,然后在 OA 流程表单的明细表中按 Ctrl+V 一键粘贴,自动填充数据。这比标准的“明细导入”功能更轻量(无需先保存流程,无需下载模板)。

实现原理: 1. 监听明细表字段的 paste 事件。 2. 获取剪贴板文本数据(Excel 复制的数据以 \t 分隔列,\n 分隔行)。 3. 解析数据并根据预定义的字段 ID 映射,将值填充到对应的明细行中。

代码示例 (经典版)

// 1. 定义明细表字段映射
var fieldA = "field5830"; // 例如:会议名称
var fieldB = "field5826"; // 例如:会议日期
// ... 其他字段定义

// 2. 监听明细表新增行事件,绑定粘贴功能
jQuery(document).ready(function(){
    jQuery("#indexnum0").bind("propertychange", function(){ bindPasteEvent(); });
});

function bindPasteEvent(){
    // 为目标字段绑定 onpaste 事件
    jQuery("input[id^=" + fieldA + "_]").each(function(){ this.onpaste = handlePaste; });
}

// 3. 处理粘贴数据
function handlePaste() {
    var clipboardData = window.clipboardData || (window.event && window.event.clipboardData);
    if (!clipboardData) return true;

    var text = clipboardData.getData('Text'); // 获取纯文本
    var rows = text.split("\\n"); // 按行分割

    // 解析并填充逻辑...
    // (需根据实际 Excel 列顺序映射到 fieldA, fieldB 等)
}

⚠️ 兼容性警告与改进: - 原版局限:原脚本使用了 window.clipboardData,这是 IE 浏览器专属 API。在现代浏览器(Chrome, Edge, Firefox)中,由于安全策略,该 API 已失效。 - 现代浏览器方案: - 推荐使用 navigator.clipboard.readText(),但这需要 HTTPS 环境和用户授权。 - 更佳方案:使用泛微较新版本自带的 WeaTable 组件或“明细表导入”标准功能,它们已原生支持现代浏览器的数据导入。 - 如果必须用 JS 实现:建议引入第三方剪贴板库(如 ClipboardJS)或监听 input 事件配合隐藏的 textarea 来捕获粘贴内容。 持现代浏览器的数据导入。 - 如果必须用 JS 实现:建议引入第三方剪贴板库(如 ClipboardJS)或监听 input 事件配合隐藏的 textarea 来捕获粘贴内容。部署步骤: 1. 登录 OA 系统 -> 后端应用中心 -> 流程引擎 -> 路径管理。 2. 找到目标流程 -> 节点信息 -> 出口信息 -> 插入 JS 代码块。 3. 将修改好的 JS 代码粘贴进去,保存即可。