跳转到内容
首页/文章/泛微 E10

专栏 02

泛微 E10

E10 的二次开发笔记:表单、接口与前端定制经验。

泛微 E102026-10-21
[泛微 Ecology10] Ones 万能组件 V1:让表单组件变成任何你想要的样子
Ones 万能组件是 E10 表单组件,不是 EB 页面组件。它在表单设计器组件管理中创建,配置 4 项:单文件 HTML、运行 JS、调试、AI 生成(默认折叠)。运行态用 Shadow DOM 渲染,脚本只注入 ctx;ctx 统一封装 WeFormSDK 与 formStore,提供字段读写、只读/必填/隐藏、初始值、选项显示名映射、明细 rowId、字段变化/属性变化/保存前 hook。AI 面板用内置模板 + 需求 + 字段清单生成提示词,AI 返回的 HTML 粘回即可。V1 已实测渲染、字段读写、只读拦截、固定选项 valueKey 写值、明细写入、保存拦截、hook 去重;打印模板、整表单只读、真实移动端 H5、超大配置、多实例压力未完成。源码与示例在 GitHub:OnesZhang/e10-ones-ufc。
泛微 E102026-10-15
[泛微 Ecology10] 流程按钮说明浮标:绑定操作码而不是按钮名,改名和切语言都不失效
泛微 E10(e-cology10)流程页右上角有一排操作按钮(提交/保存/删除/更多),「更多」菜单里还有十几项操作,业务用户看不懂;而按钮名称既可以被管理员自定义、也会随界面语言变化,因此任何按名称匹配的说明方案都会失效。本文给出的做法是做一个悬浮的 i 入口 + 下拉面板,数据来自平台官方口子 window.weappWorkflow.getFlowPageSDK().baseStore.operMenus,其字段 menutype 是稳定操作码(SUBMIT、SAVE_DATA、DELETE、REMIND 等),istop===1 表示渲染在右上角、否则进「更多」菜单,title 是平台当前显示名。实现上:面板每行的名称取平台 title(改名后与屏幕一致),释义按 menutype 查一张中英对照表;语言用 window.weappUtils.getLang(),zh* 走中文、其余走英文,每 800ms 重读一次,因此切换界面语言无需刷新页面;入口 top 不写死,取动作条内按钮的真实 bottom+8px,因为带「第 N 条(共 M 条)」条幅的页面会把工具条从约 30px 撑到 54px(实测写死 52px 会压住「更多」),而贴容器底边又会偏下(实测容器底部比按钮低 13px)。页面判定同样不看 URL:同一流程可以是 /sp/workflow/flowpage/view/{id},也可以是 e-builder 流程卡片页 /sp/ebdfpage/card/0/{objId}/{requestId},因此改用平台注入的流程上下文 getFlowPageSDK().baseStore.baseParam.workflowId 作为判据;实测 getFlowPageSDK() 在任何页面都返回对象(连门户都是),而动作条 .ui-title-right-container 在 e-builder 设计器页也存在,两者都不能用来判断;发起流程页 /sp/workflow/newflow、流程列表 /workflow/list/mine 与 /workflow/list/center、设计器页、门户均无 workflowId,判定为 false。降级链:拿不到 getFlowPageSDK() 时退回读 DOM(动作条 button)与 __WEAPP_AGENT_BRIDGE__.describe(menuId) 按名称匹配;表里没有的操作不渲染;页面无流程上下文或无动作条则不注入任何节点;节点被平台整块替换时下次 tick 自愈重挂。实测环境 @weapp/ecodesdk 0.1.54、@weapp/ui 0.0.389-hotfix11、agent bridge 0.2.0,面板层级 1050/1040(高于平台下拉 999、低于平台弹窗)。
泛微 E102026-10-09
[泛微 Ecology10] 流程提交失败提示弹窗化:不改平台 DOM,只加一个类名
泛微 E10 流程详情页(PC /sp/workflow/flowpage/*)提交失败时,平台会在页面顶部渲染一条内联红色横幅 div.wffp-operate-msgTip.form-msgtip,页面 URL 带 operResultType=FAIL_SHOW_ERROR_MSG,同时占用表单顶部位置。文章给出的做法是复写官方二开插槽 weappWorkflow.FPDevBlockSlot:只在 blockType === 'Prompts' 且 slotPlace === 'after' 时挂载自定义组件,其余插槽原样透传 <Com {...props} ref={ref} />。组件不重写平台 DOM、不复制平台文案,只给平台已渲染的提示节点挂一个类名 wffp-submit-fail-modal-card,由 CSS 把它变成居中弹窗,因此平台原有文案、出口条件明细和「点击这里进行设置」跳转逻辑全部保留;平台若改了该类名,补丁只是静默失效退回内联提示,不会报错。文章还记录了 hidden/open/closed 状态机与 MutationObserver 同步、遮罩/×/Esc 关闭与右下角重开入口,以及两个取值细节:卡片需 position: fixed(实测祖先无 transform)、z-index 1100 要高于页面右侧悬浮工具(实测 998/999)。最容易踩的坑是平台「条件」悬浮提示 .ui-trigger-popupInner 为 z-index 999,会被卡片(1100)/遮罩(1050) 盖住而「悬停或点击没反应」,需在 body.wffp-submit-fail-modal-open 作用域下把它抬到 1200。实测环境 @weapp/ecodesdk 0.1.53、@weapp/ui 0.0.387-hotfix7,最终 JS 91 行 + CSS 109 行。
泛微 E102026-09-20
[泛微 Ecology10] e-builder「隐式传参」拆解:参数不进 URL,藏在 sessionStorage
泛微 E10 e-builder 设计器里按钮配置「打开页面」并选择隐式传参时,参数不会拼到 URL 上,而是以目标链接地址为 key 写入 sessionStorage.jumplinkParams,URL 只带一个 jumplinkParamKey。文章先给出平台「隐式传参」选项的三条官方原文(URL 不拼参数、非 EB 内部地址不支持隐式传参、URL 自定义拼接参数优先级高于参数设置),再基于线上实测与运行时 JS 源码验证拆解写入端与读取端逻辑。关键突破:尽管官方称目标地址非 EB 内部地址(页面、布局、报表、视图、多级填报等)时不支持隐式传参,但写入端并不区分目标类型,e-code 自定义页面(/sp/custom/...)可通过手动读取 sessionStorage 突破该限制,附可直接复用的读取工具函数与 URL 传参对比。
展开全部 15 篇收起全部文章
[泛微 Ecology10] Ones 万能组件 V1:让表单组件变成任何你想要的样子
Ones 万能组件是 E10 表单组件,不是 EB 页面组件。它在表单设计器组件管理中创建,配置 4 项:单文件 HTML、运行 JS、调试、AI 生成(默认折叠)。运行态用 Shadow DOM 渲染,脚本只注入 ctx;ctx 统一封装 WeFormSDK 与 formStore,提供字段读写、只读/必填/隐藏、初始值、选项显示名映射、明细 rowId、字段变化/属性变化/保存前 hook。AI 面板用内置模板 + 需求 + 字段清单生成提示词,AI 返回的 HTML 粘回即可。V1 已实测渲染、字段读写、只读拦截、固定选项 valueKey 写值、明细写入、保存拦截、hook 去重;打印模板、整表单只读、真实移动端 H5、超大配置、多实例压力未完成。源码与示例在 GitHub:OnesZhang/e10-ones-ufc。
[泛微 Ecology10] 流程按钮说明浮标:绑定操作码而不是按钮名,改名和切语言都不失效
泛微 E10(e-cology10)流程页右上角有一排操作按钮(提交/保存/删除/更多),「更多」菜单里还有十几项操作,业务用户看不懂;而按钮名称既可以被管理员自定义、也会随界面语言变化,因此任何按名称匹配的说明方案都会失效。本文给出的做法是做一个悬浮的 i 入口 + 下拉面板,数据来自平台官方口子 window.weappWorkflow.getFlowPageSDK().baseStore.operMenus,其字段 menutype 是稳定操作码(SUBMIT、SAVE_DATA、DELETE、REMIND 等),istop===1 表示渲染在右上角、否则进「更多」菜单,title 是平台当前显示名。实现上:面板每行的名称取平台 title(改名后与屏幕一致),释义按 menutype 查一张中英对照表;语言用 window.weappUtils.getLang(),zh* 走中文、其余走英文,每 800ms 重读一次,因此切换界面语言无需刷新页面;入口 top 不写死,取动作条内按钮的真实 bottom+8px,因为带「第 N 条(共 M 条)」条幅的页面会把工具条从约 30px 撑到 54px(实测写死 52px 会压住「更多」),而贴容器底边又会偏下(实测容器底部比按钮低 13px)。页面判定同样不看 URL:同一流程可以是 /sp/workflow/flowpage/view/{id},也可以是 e-builder 流程卡片页 /sp/ebdfpage/card/0/{objId}/{requestId},因此改用平台注入的流程上下文 getFlowPageSDK().baseStore.baseParam.workflowId 作为判据;实测 getFlowPageSDK() 在任何页面都返回对象(连门户都是),而动作条 .ui-title-right-container 在 e-builder 设计器页也存在,两者都不能用来判断;发起流程页 /sp/workflow/newflow、流程列表 /workflow/list/mine 与 /workflow/list/center、设计器页、门户均无 workflowId,判定为 false。降级链:拿不到 getFlowPageSDK() 时退回读 DOM(动作条 button)与 __WEAPP_AGENT_BRIDGE__.describe(menuId) 按名称匹配;表里没有的操作不渲染;页面无流程上下文或无动作条则不注入任何节点;节点被平台整块替换时下次 tick 自愈重挂。实测环境 @weapp/ecodesdk 0.1.54、@weapp/ui 0.0.389-hotfix11、agent bridge 0.2.0,面板层级 1050/1040(高于平台下拉 999、低于平台弹窗)。
[泛微 Ecology10] 流程提交失败提示弹窗化:不改平台 DOM,只加一个类名
泛微 E10 流程详情页(PC /sp/workflow/flowpage/*)提交失败时,平台会在页面顶部渲染一条内联红色横幅 div.wffp-operate-msgTip.form-msgtip,页面 URL 带 operResultType=FAIL_SHOW_ERROR_MSG,同时占用表单顶部位置。文章给出的做法是复写官方二开插槽 weappWorkflow.FPDevBlockSlot:只在 blockType === 'Prompts' 且 slotPlace === 'after' 时挂载自定义组件,其余插槽原样透传 <Com {...props} ref={ref} />。组件不重写平台 DOM、不复制平台文案,只给平台已渲染的提示节点挂一个类名 wffp-submit-fail-modal-card,由 CSS 把它变成居中弹窗,因此平台原有文案、出口条件明细和「点击这里进行设置」跳转逻辑全部保留;平台若改了该类名,补丁只是静默失效退回内联提示,不会报错。文章还记录了 hidden/open/closed 状态机与 MutationObserver 同步、遮罩/×/Esc 关闭与右下角重开入口,以及两个取值细节:卡片需 position: fixed(实测祖先无 transform)、z-index 1100 要高于页面右侧悬浮工具(实测 998/999)。最容易踩的坑是平台「条件」悬浮提示 .ui-trigger-popupInner 为 z-index 999,会被卡片(1100)/遮罩(1050) 盖住而「悬停或点击没反应」,需在 body.wffp-submit-fail-modal-open 作用域下把它抬到 1200。实测环境 @weapp/ecodesdk 0.1.53、@weapp/ui 0.0.387-hotfix7,最终 JS 91 行 + CSS 109 行。
[泛微 Ecology10] e-builder「隐式传参」拆解:参数不进 URL,藏在 sessionStorage
泛微 E10 e-builder 设计器里按钮配置「打开页面」并选择隐式传参时,参数不会拼到 URL 上,而是以目标链接地址为 key 写入 sessionStorage.jumplinkParams,URL 只带一个 jumplinkParamKey。文章先给出平台「隐式传参」选项的三条官方原文(URL 不拼参数、非 EB 内部地址不支持隐式传参、URL 自定义拼接参数优先级高于参数设置),再基于线上实测与运行时 JS 源码验证拆解写入端与读取端逻辑。关键突破:尽管官方称目标地址非 EB 内部地址(页面、布局、报表、视图、多级填报等)时不支持隐式传参,但写入端并不区分目标类型,e-code 自定义页面(/sp/custom/...)可通过手动读取 sessionStorage 突破该限制,附可直接复用的读取工具函数与 URL 传参对比。
[泛微 Ecology10] Ecology10使用ESB动作流&连接器使用doCreateRequest创建流程接口
这篇文章介绍在泛微 Ecology10 多租户场景下,如何借助 ESB 动作流配合开放平台连接器的 doCreateRequest 接口实现跨组织创建流程。内容涵盖连接器与接口配置、字段映射表维护、自定义函数组装传参,以及 fieldId、附件权限和文件上传等关键参数处理,适合做 E10 二开的开发人员参考,作者也说明这只是个人思路而非官方最佳实践。
[泛微 Ecology10] 国际化与日期字段 displayFormat 冲突排查实录
泛微 Ecology10 中同一日期字段出现两种显示格式,排查确认并非数据源或字段配置问题,而是全局国际化日期与字段 displayFormat 在前端渲染时发生双重格式化:预格式化后的字符串二次解析失败便回退原值,导致格式不一甚至月日互换,ecode 适配也因输出路径不稳定而失效。文章给出抓 DOM、API 与运行时函数的排查思路,并指出应统一日期输入语义与格式化入口。
[泛微 Ecology10] "对不起,没有使用权限" 解决办法
泛微 E10 升级到基线 10.0.2512.01 后,部分人员虽已获得角色或群组权限,访问资源时仍提示没有使用权限,原因是权限缓存未同步刷新。文章给出临时方案:调用权限缓存刷新接口,传入租户 ID 和人员 ID 即可立即刷新该人员权限。作者提醒这只是临时处理,彻底解决需联系总部客服与技术排查,二次开发导致的问题可尝试调用刷新权限接口。
[泛微 Ecology10] 自定义一个可控的 Loading Message
泛微 Ecology10 的 UI 层改用 weappUi 后,只保留了全屏遮罩式的 Spin,缺少 E9 中 antd.message.loading 那种轻量可控的加载提示。文章利用 weappUi.Dialog.message 搭配 Spin 封装了一个伪 message.loading,返回可手动销毁的实例,避免全屏遮罩阻断操作,适合接口查询、短轮询等轻量异步场景,并指出 E10 虽移除了部分顺手的组件,却给前端扩展留下更多空间。
[泛微 Ecology10] 浏览按钮搜索按钮样式处理(真按钮)
泛微 Ecology10 中可通过自定义 CSS 将浏览按钮的搜索图标改造成真按钮,包括调整输入框最小宽度、设置蓝色背景与圆角、用伪元素补充按钮文字并增加悬停效果。使用时需按实际编辑提示语和字段 ID 替换对应选择器,适合需要美化搜索入口的二次开发场景。
[泛微 Ecology10] 获取当前表单所有字段值的方法
介绍泛微 Ecology10 表单前端二次开发中获取当前表单全部字段值的做法演变:早期需要先遍历字段信息,再分别读取主表字段与明细表数据,如今只需调用表单数据仓库提供的方法,即可一次性取出包含主表与明细在内的全部数据。适合需要批量取值的开发场景,新写法明显更简洁。
[泛微 Ecology10] 丸子的 Ecology10 小本本
汇总泛微Ecology10前端二开常见技巧,涵盖表单数据状态检查、静默保存与数据获取、图片上传样式优化、ESB动作流调用、自定义弹窗及当前用户信息获取等。针对表单渲染后操作DOM的时机问题,给出基于React字段组件的处理思路,并记录矩阵维护入口、组织日志表与报表空白滚动优化方法,适合E10开发人员查阅。
[泛微 Ecology10] 明细表处理示例JS 1:字段联动后判断明细表数据隐藏选项
针对泛微 E10 表单中明细表的动态选项控制,文章以学生成绩表为例,介绍在数据联动事件触发后遍历明细表各行,判断分数为空或零时移除成绩类型下拉中的优秀与良好选项。核心是利用表单 SDK 获取字段标识、行标识并操作选项,适用于明细表联动场景,实际可按业务条件灵活调整。
[泛微 Ecology10] 批量下载当前表单内所有附件
泛微 E10 表单默认只能按单个附件字段逐个下载,字段较多时效率低下。文章给出前端批量下载方案:借助 WeFormSDK 遍历指定字段收集附件 ID,调用平台异步批量下载接口创建任务,再轮询任务状态,完成后自动触发 ZIP 打包下载,并配有错误处理与消息提示,适合需要一次性导出表单全部附件的二次开发场景。
[泛微 Ecology10] 记首次发布APIdemo测试接口~
记录首次在泛微Ecology10中按官方ecode文档搭建后端二开环境并发布API测试接口的过程。针对3.1.3节未说明如何创建接口文件的问题,作者补充了在secondev-md-demo项目里新建package和HelloController、粘贴示例代码、处理报错后编译打包部署的步骤,适合二开新手参考。
丸子开始泛微e9和e10并行开搞啦~
作者宣布自己已开始同时推进泛微 e-cology 9 与 e-cology 10 的相关工作,并为此新建了泛微 ecology10 讨论交流群,邀请正在使用 e10 的伙伴加入,以便集中交流与互助。内容偏向公告性质,主要面向泛微 OA 二次开发与运维人员。

向本站提问

常见问题Esc 关闭 · 向本站提问