news 2026/10/28 5:06:58

Tiptop与Easyflow单据签核集成:从抛转到回写全流程实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tiptop与Easyflow单据签核集成:从抛转到回写全流程实战

简介:面向 Tiptop ERP 与 Easyflow 电子签核系统对接实施人员的技术说明文档,聚焦单据签核环节的双向集成:Tiptop 作业审核时将待签核单据以 XML 抛转至 Easyflow 生成电子表单,签核结果再回写 Tiptop。内容覆盖环境配置、数据表签核栏位确认、Schema 更新、单据性质设置、抛转信息维护与源文件修改、PER 与 4GL 程序调整、AWS 模块公共与抛转程序说明,以及集成测试与常见错误排查,适合具备一定 Tiptop 开发基础的工程师按步骤落地。资源包共 1 个 PDF 文件,约 1.94MB,以图文步骤与界面说明呈现完整集成流程。已有 1515 人学习,可帮助读者理清对接思路、减少配置与数据格式类问题。

1. 单据签核打通:Tiptop 与 Easyflow 集成到底要解决什么

一张工单在 Tiptop 里点下“审核”,签核人却在另一个系统里收不到单;或者签核人在 OA 里批完了,Tiptop 这边的状态还停在“送签中”——这类单据签核断链,是很多使用 Tiptop 的团队在推进电子签核时最先撞上的墙。这套方案要解决的正是这件事:把 Tiptop 作业里的待签核单据,以 XML 字符串送到 Easyflow,在签核人收件箱里以电子表单呈现,签核结果再通过 Tiptop 提供的服务回写栏位。适合正在做 Tiptop OA 接口对接的开发者、需要交付一份集成方案的顾问,以及拿它当课程设计或毕设参考的学生。整套流程围绕“单据抛转—表单呈现—结果回写”三段展开,下面按 Tiptop 端、Easyflow 端、联调验收逐层拆开。

2. 总体设计:两端职责与数据流向的划分

2.1 集成边界与前置沟通

动手写代码之前,有一件事比任何配置都重要:和 Easyflow 顾问把流程对齐。需要确认三件事——Easyflow 侧的大致审批流程、Tiptop 单据在 Easyflow 中的位置、以及 Tiptop 作业在 Easyflow 中对应的单据名称。比如工单作业在 Tiptop 中的单据编号是 TT_WO1,这个编号会贯穿后续表单目录、数据表、XML 配置的命名。命名没对齐,后面每一步都会返工,这是血泪经验。

从数据流看,两端的分工很清晰。Tiptop 端负责“抛”:作业执行审核时,把单据信息组装成 XML 字符串,通过 Appserver 发往 Easyflow。Easyflow 端负责“收与批”:把 XML 解析进电子表单,走审批流程,签核完成后调用 Tiptop 提供的服务回写栏位。所以 Tiptop 端的工作量集中在数据表栏位、抛转程序、标准作业改造;Easyflow 端集中在表单目录、数据表、配置文件和流程设定。两端通过 XML 的栏位名称严格对应,任何一侧改名,另一侧必须同步。

2.2 Tiptop 端模块划分

Tiptop 里有一个专门的 AWS 模块存放集成程序,目录结构与其他模块一致,4gl 目录下的程序分两类。公共模块以函数形式封装底层操作,包括aws_efcfg.4gl(签核信息维护窗体)、aws_efsrv.4gl、aws_efcli.4gl、aws_efstat.4gl、aws_xml.4gl、aws_efgw.4gl等,负责配置、服务调用、状态查询和 XML 组装。抛转模块则与各支作业一一对应,比如aws_asfi301.4gl对应 asfi301 工单作业,aws_aapt110.4gl对应请购作业,数量随需要签核的单据数量增长。

这种划分的好处是公共逻辑只写一次。新增一张单据要签核,只需要用aws_efcfg维护栏位、生成一支新的aws_xxx.4gl抛转程序,再改对应的标准作业,公共模块完全不用动。我一般会先把公共模块的接口签名过一遍,确认aws_efcli的入参顺序,再动手生成抛转程序,避免生成出来的代码和实际调用对不上。

2.3 Easyflow 端模块划分

Easyflow 端围绕“表单”组织。表单文件放在Program Files\EF2Kweb\ASP\CHT\Forms下,每张单据一个目录,目录内是若干 ASP 文件;表单数据存在 SQL Server 里,每张表单一张数据表;配置文件EF2Kweb.XML和ColumnSet.xml负责把表单 ID 和 XML 栏位映射起来;流程设定向导负责配审批关卡和审批人;易拓集成向导负责建立 Tiptop 程序代号与 Easyflow 表单代号的关联。这五块各管一段,缺一块表单就显示不出来或者流程走不通。

3. Tiptop 端落地:从环境配置到标准作业改造

3.1 环境设置与数据表栏位确认

两端交互走 Appserver,所以第一步是确认 Tiptop for Browser 版已安装,并且已运行startweb启动 Appserver。接着改.profile,把 Easyflow 相关的地址写进去:

# EasyFlow Server IP EFSITEIP=192.168.0.250; export EFSITEIP # EasyFlow Server Name EFSITENAME=EF2KWeb; export EFSITENAME # EasyFlow SOAP Location EFSOAP=http://192.168.0.250/EF2KGateWay/EF2KGateWay.WSDL; export EFSOAP

三个变量的含义分别是 Easyflow 服务器地址、服务器名和 SOAP 网关的 WSDL 位置,IP 随实际服务器不同而变。同时要确认 Easyflow 服务器端已安装 Tiptop&Easyflow 集成包,没装这个包,后面的调用全部无从谈起。

数据表这一关最容易漏。一张单据要签核,其单头档必须包含 7 个签核相关栏位,以请购单单头档 pmk_file 为例:pmkmksg是否签核、pmk25签核状态,这两个是每支作业都必须维护的关键栏位;pmksign签核等级、pmkdays签核完成天数、pmkprit签核优先顺序、pmksseq已签核顺序、pmksmax应签核顺序,这四个是非关键栏位,简单签核可以不维护。检查时 7 个栏位要逐一确认存在,缺的按客制规范补建。单身档一般不包含签核栏位。签核状态的取值要记牢:0 开立、1 已核准、6 结案、9 作废、S 送签中、R 送签退回、W 抽单,出现其他字符通常是作业内部特殊用途。

3.2 单据性质与抛转程序生成

同一支单据作业,靠单据性质决定某张具体单据是否走电子签核。在各子系统的单据性质设置作业里都有“是否签核”选项,以通用单据性质设置作业 asmi300 为例,先选或新建“是否签核”为选中状态的单据别,否则后续操作全部无效。这里有个坑:单据性质档随子系统不同而不同,制造模块用 smy_file,销售子系统用 oay_file,设置前一定要进具体子系统确认准确的资料表名和栏位名。

抛转程序用aws_efcfg生成。这个维护窗体里先设界面栏位,再维护单头和单身栏位。单头栏位维护时,左边填要经 XML 传递的栏位,右边“参照字段”填需要 JOIN 其他表来替换的字段——比如传客户信息通常传客户名称 occ02 而不是客户编码 oga04,就在字段填 oga04、参照字段填 occ02,生成的程序会自动 JOIN occ_file 表并用 occ02 的值替换 oga04 的位置。单身栏位操作相同。维护完点“产生范式程序”,在 aws/4gl 目录下生成aws_xxx.4gl,再在其基础上改。

生成的抛转程序结构固定:声明 RECORD sr 存中间信息,组 l_sql 取数赋值到 sr,循环按 sr 记录拼 XML 字符串。默认情况下 sr、sql、xml 三者一致,需要改的情况有两类:栏位不能直接从库里取、需要中间处理;或者选取栏位与 XML 传递栏位数量有差异。下面这段是典型改法:

CASE WHEN sr.oga00='1' CALL cl_getmsg('aws-003',g_lang) RETURNING g_msg WHEN sr.oga00='2' CALL cl_getmsg('aws-004',g_lang) RETURNING g_msg END CASE LET l_oga00 = g_msg # 地址栏位特殊处理:拼省市区 CALL s_addr(sr.oga01,sr.oga04,sr.oga044) RETURNING l_oap.oap041,l_oap.oap042,l_oap.oap043 LET sr.addr = l_oap.oap041 CLIPPED,' ',l_oap.oap042 CLIPPED,' ',l_oap.oap043 CLIPPED LET g_strXMLInput = g_strXMLInput CLIPPED, " <oga00>", l_oga00 CLIPPED, "</oga00>", ASCII 10, " <oga04>", sr.occ02 CLIPPED, "</oga04>", ASCII 10, " <addr>", sr.addr CLIPPED, "</addr>", ASCII 10, " </head>", ASCII 10, " <body>", ASCII 10

代码里cl_getmsg把代码值翻成中文描述再进 XML,s_addr把地址拆成省市区拼接,XML 合成语句里用中间变量l_oga00、sr.occ02、sr.addr替代原始栏位。注意ASCII 10是换行符,每个栏位一行,方便排查时肉眼比对。改完记得 XML 里的栏位名必须和 Easyflow 端 ColumnSet.xml 完全对应,顺序可以不同,名称不能错。

3.3 标准作业改造与审核流程分流

标准作业要增加对抛转的支持,以 axmt620 出货单为例,核心是新增一个xxx_ef()函数调用抛转函数:

IF aws_efcli(l_title, g_oga.oga01[1, 3], g_oga.oga01, '', '', '', '', '') THEN LET g_success = 'Y' LET g_oga.ta_ogaefstat = 'S' # 签核状态置为送签中 LET g_oga.ogaconf = 'Y' # 审核状态置为已审核 IF g_oga.ogaconf='X' THEN LET g_chr='Y' ELSE LET g_chr='N' END IF IF g_oga.ta_ogaefstat='1' OR g_oga.ta_ogaefstat='2' THEN LET g_chr2='Y' ELSE LET g_chr2='N' END IF IF g_oga.ta_ogaefstat='6' THEN LET g_chr3='Y' ELSE LET g_chr3='N' END IF CALL cl_set_field_pic(g_oga.ogaconf,g_chr2,g_oga.ogapost,g_chr3,g_chr,"") DISPLAY BY NAME g_oga.ta_ogaefstat,g_oga.ogaconf CALL cs_ogasta('oga',g_oga.ta_ogaefstat,g_oga.ogaconf,g_oga.ta_ogamksg) RETURNING g_sta DISPLAY g_sta TO FORMONLY.desc2 UPDATE oga_file SET ta_ogaefstat = g_oga.ta_ogaefstat, ogaconf = g_oga.ogaconf WHERE oga01 = g_oga.oga01 COMMIT WORK ELSE LET g_success='N' END IF

两个 LET 是手工维护的关键:签核状态置 S(送签中),审核状态置 Y(已审核)。cl_set_field_pic按状态设界面图标,确认未签核显示“确”,签核通过显示“核”。cs_ogasta是客制作业,放 CSUB 目录,把状态码翻成中文提示如“送签中”。最后直接 UPDATE 并 COMMIT。

更关键的是改原有审核函数,在完成所有判断但未开始事务性操作的位置插入分流:

IF g_success = 'Y' THEN IF g_oga.ta_ogamksg = 'Y' AND g_oga.ogaconf = 'N' THEN CALL t600_ef() IF g_success = 'N' THEN ROLLBACK WORK END IF RETURN # 走签核流程,原审核过程不再自动执行 END IF END IF

这段的含义是:需要签核且当前未确认时,调xxx_ef()送签后直接 RETURN,原审核代码不再往下走。也就是说,需要电子签核的单据,原审核操作退化成“送签”动作。原审核段里的事务性操作不能丢,建议把被屏蔽的部分拷贝成新函数(是拷贝不是移动),新增一个 Action 比如confirm_ef,只在签核完成且核准(ta_ogaefstat='1')时允许执行;不走签核的单据仍走原审核代码,对程序影响最小。此外还要改“取消审核”“作废”等代码,增加签核状态判断:需签核的不允许作废和取消审核,签核状态不为 1 的不能做事务性操作。改造时建议仿照一支标准签核作业,apmt420 请购单作业是很好的参照。

3.4 界面档与链接维护

界面层要改 per 档增加签核栏位显示,有客制栏位还要跑p_perlang维护栏位显示。p_link里增加对 aws 的链接,新增作业还要维护p_zz;p_ze里维护新增的提示信息。最后编译执行。这几步琐碎但漏一步就报错,我一般按清单逐项打勾,编译前再核对一遍 per 档和 4gl 档的栏位名是否一致。

4. Easyflow 端落地:表单、数据表与流程配置

4.1 表单目录生成与样式设计

在 Forms 目录下拷贝任一已有 Tiptop 单据目录为新目录名,比如把 TT_SO1 复制为 TT_WO1。进入目录后,把其中所有文件名按新单号改掉,再进三个 Init 结尾的 ASP 文件(TT_WO1_Approve_Init.ASP、TT_WO1_Create_Init.ASP、TT_WO1_Display_Init.ASP)以及 Grid.ASP,把里面所有旧单号替换成新单号。这一步是纯体力活,但漏改一个文件,表单加载就会报错。

样式设计改 Forms.ASP,建议用网页编辑工具操作。主要两件事:一是调控件位置布局,使之美观且与 Tiptop 表单尽量一致,一般用多行文本框和选择框两种控件,日期用选择框,其余用文本框;二是调控件 ID,这里有两组 ID,标签的命名规则是xxx_1(如 sfb01_1),控件的命名规则是xxx_2(如 sfb01_2),系统按 ID 从 XML 取栏位名和数据填充,弄错就填不上值。单身表格用 OCX 嵌入,不需要特别设置。

4.2 数据表与配置文件

在 SQL Server 里以原表单数据表为基础复制生成新表,改对应栏位名,建议用导入导出方法。然后改EF2KwebPackages\tiptop目录下的EF2Kweb.XML,增加新单据 ID,复制现有单据项目改即可。再改同目录的ColumnSet.xml,增加 Program 段,填充 XML 档内容,格式必须与 Tiptop 端aws_xxx抛转模块的 XML 完全一致。栏位顺序不必相同,名称必须完全对应。

提示:XML 里必须抛转一个资料所有者xxxuser栏位,它不显示在电子表单上,但 Easyflow 要靠它解析填单人、驱动流程。这个栏位漏了,流程就找不到发起人。

4.3 表单开放与审批流程设定

开放新增单据走“管理程序清单 → 流程基本数据 → 表单性质维护操作”。查询后点相应表单,在表单性质里按规范设置各项,特别注意“显示否”和生效日、失效日,没设或设错表单就显示不出来,永久生效可忽略失效日。设完还要配权限属性,否则表单依然不显示,方法是将屏幕滚到最下面点新建权限文件,保存退出后左侧清单就能看到新表单。

审批流程走“电子表单模块 → 管理程序清单 → 自动向导 → 流程设定向导”,选表单后新增审批关卡并设审批人,比如设为 439,从 Tiptop 抛来的单据就直接进 439 的收件夹,439 批完流程结束回写 Tiptop。最后建立表单关联,走“自动向导 → 易拓集成向导”,点“新增表单关联”,选 Tiptop 程序代号(系统自动列出有抛转机制的作业)、工厂代号(选完自动列出已设签核的单据类别)、Easyflow 表单代号,点“新增关联”完成。

5. 避坑与排查:集成联调中最容易翻车的五处

5.1 单据性质没选“是否签核”

现象是点审核后毫无反应,既不报错也不送签。原因是单据别在单据性质设置里没勾“是否签核”,后续所有配置都成了摆设。解决方法是回到对应子系统的单据性质设置作业,确认该单别“是否签核”为选中状态,再重新测试。

5.2 ColumnSet.xml 与抛转 XML 栏位名不一致

现象是表单能打开但栏位空白,或者流程找不到填单人。原因是 ColumnSet.xml 里的栏位名和aws_xxx.4gl拼出的 XML 标签对不上,顺序不同没关系,名称必须一字不差。解决方法是拿实际抛出的 XML 字符串和 ColumnSet.xml 逐项比对,重点检查xxxuser是否抛转。

5.3 表单显示否或权限没配

现象是 Easyflow 左侧清单里看不到新表单。原因是表单性质里“显示否”设错,或生效日失效日设置不当,或权限属性没建。解决方法是逐项核对表单性质,滚到页面底部确认权限文件已新建,永久生效的把失效日留空。

5.4 控件 ID 命名错位

现象是表单上某些栏位显示成空白或串值。原因是标签 ID 应为xxx_1、控件 ID 应为xxx_2,写反或写错系统就解析不到。解决方法是逐个核对 Forms.ASP 里的两组 ID,与 XML 栏位名一一对应。

5.5 审核流程分流后原事务操作丢失

现象是签核通过后单据状态对了,但原本审核时该做的库存、账务动作没执行。原因是改造审核函数时直接 RETURN,把原事务性代码屏蔽了却没补回来。解决方法是将被屏蔽代码拷贝成新函数,新增confirm_efAction,限定签核核准后才允许执行,不走签核的单据仍走原逻辑。

6. 验收与答辩:怎么证明这套集成真的跑通了

验收这套集成,我一般按一条完整链路走一遍,而不是只看某个界面。第一步,在 Tiptop 工单作业 asfi301 新增一张工单,单别选需要签核的,保存后确认审核状态为 N、签核状态为 0、提示“开立”。第二步,点“审核”,提示框选“是”,观察是否弹出抛转成功提示,同时去数据库确认签核状态已变 S、审核状态变 Y。第三步,登录 Easyflow 对应审批人账号,确认收件箱里出现该单据的电子表单,且单头单身栏位值与 Tiptop 一致,尤其核对参照字段替换后的客户名称、拼接后的地址。第四步,在 Easyflow 完成签核,回到 Tiptop 刷新,确认签核状态回写为 1、界面图标变“核”,再执行confirm_ef验证事务性操作正常。第五步,反向测试:对需签核单据点“作废”或“取消审核”,应被拦截;对签核状态非 1 的单据做事务操作,也应被拦截。

答辩时最容易被问的是“为什么改审核流程而不是加个按钮”。回答要点是:电子签核的本质是把审核动作拆成送签和确认两段,原审核代码若继续自动执行,等于绕过了签核,所以必须分流;而原事务逻辑用拷贝成新函数的方式保留,既保证签核场景下不丢功能,又不影响不走签核的单据。把这条讲清楚,比演示十个界面都有说服力。

下面这张表可以当验收清单用:

验收项预期结果失败时先查
工单保存审核状态 N、签核状态 0单据性质是否签核
点审核送签状态变 S/Y,提示成功Appserver、.profile 地址
Easyflow 收件箱表单出现且栏位有值ColumnSet.xml、控件 ID
签核回写状态变 1,图标变“核”回写服务、栏位名对应
事务操作confirm_ef 正常执行分流代码是否 RETURN 过早
作废/取消审核需签核单据被拦截状态判断是否补全

从那以后我每次做这类集成,都会先把这张验收表打印出来,每过一项打个勾,全部勾完才敢说“能交付”。联调阶段最怕的就是只看界面不看数据表,界面显示对了、库里状态没变,这种假通过到上线才爆。希望这套流程和清单能帮到你,少走几趟返工的弯路。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 5:06:00

20+款真正原生的免费开源Mac应用深度评测

1. 项目概述&#xff1a;为什么这份清单值得你花5分钟认真读完“20款免费开源原生Mac应用”——光看标题&#xff0c;你可能下意识划走&#xff1a;又一个App推荐列表&#xff1f;但如果你真这么想&#xff0c;大概率会错过近两年Mac生态里最被低估的一批生产力杠杆。我从2021年…

作者头像 李华
网站建设 2026/10/28 5:05:58

ponytail 技能框架实战:从安装到落地的两周踩坑总结

1. 从“ponytail”这个标题说起&#xff1a;它到底是什么第一次看到“ponytail”这个词&#xff0c;大多数人脑子里浮现的是发型——马尾辫。但在技术圈和工具链语境里&#xff0c;ponytail 早就不是发型那么简单了。最近一段时间&#xff0c;ponytail skill、ponytail 插件、插…

作者头像 李华
网站建设 2026/10/28 5:05:39

YOLOv8建筑裂缝分割实战:从训练到部署全流程

1. 项目概述&#xff1a;YOLOv8在裂缝分割任务中的实战应用建筑结构健康监测领域对裂缝检测的需求日益增长&#xff0c;传统人工巡检方式效率低下且容易漏检。基于深度学习的实例分割技术为解决这一问题提供了新思路&#xff0c;其中YOLOv8作为YOLO系列的最新版本&#xff0c;在…

作者头像 李华
网站建设 2026/10/28 5:03:16

impeccable:用CLI与浏览器扩展约束AI生成前端的审美质量

1. 从"impeccable"这个词说起&#xff1a;它到底想解决什么问题第一次看到"impeccable"这个项目名&#xff0c;我下意识去查了它的词义——"无可挑剔的、完美的"。一个工具敢用这个词命名自己&#xff0c;要么是狂妄&#xff0c;要么是真的在某个…

作者头像 李华
网站建设 2026/10/28 5:02:57

神经网络中的线性代数原理与矩阵运算实践

1. 神经网络与线性代数的本质关联第一次接触神经网络时&#xff0c;很多人会被其复杂的结构和术语吓退。但当我真正深入理解后&#xff0c;发现神经网络的核心数学原理其实建立在基础的线性代数之上。就像乐高积木&#xff0c;看似复杂的神经网络架构&#xff0c;拆解到底层都是…

作者头像 李华
网站建设 2026/10/28 5:02:53

公园道路设计建模:1.4倍约束下的Prim/Floyd与Fermat优化

简介&#xff1a;《公园内道路设计问题》是一篇面向数学建模竞赛参赛者与图论应用学习者的论文&#xff0c;围绕矩形公园内道路最短化设计展开&#xff0c;要求在任意两入口间最短路径不超过直线距离1.4倍的前提下&#xff0c;使新建道路总长最小。资源包内仅含1个doc文档&…

作者头像 李华