ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Tiptop与Easyflow单据签核集成:从配置到联调的完整指南

Tiptop与Easyflow单据签核集成:从配置到联调的完整指南

简介:面向 Tiptop ERP 与 Easyflow 电子签核系统对接实施人员的技术说明文档,聚焦单据签核环节的双向集成:Tiptop 作业审核时将待签单据以 XML 抛转至 Easyflow 生成电子表单,签核结果再回写 Tiptop。内容覆盖环境配置、数据表签核字段确认、Schema 更新、单据性质设置、抛转信息维护与源文件修改、PER 与 4GL 档调整、AWS 模块公共与抛转程序说明,以及集成测试与常见错误排查,适合具备一定 Tiptop 开发基础的工程师按步骤落地。资源包共 1 个 PDF 文件,约 1.94MB,以图文步骤与目录结构组织,便于对照操作。已有 1515 人学习,可作为新单据集成样例与排错参考。

1. 从一张工单卡在“送签中”说起:Tiptop 与 Easyflow 单据签核集成到底在做什么

一张工单在 Tiptop 里点了审核,界面提示“送签中”,然后就没有然后了——签核人收件箱里空空如也,单据状态卡在 S 不动。这类问题我在做 Tiptop OA 接口对接时遇到过不止一次,翻到最后往往不是代码写错,而是某个栏位没建、某个 XML 节点名对不上、或者表单权限没开。这份《Tiptop&Easyflow 集成说明_新单据集成样例.pdf》讲的正是这条链路的完整落地路径:Tiptop 作业执行审核时,把待签核单据组装成 XML 字符串,通过 Appserver 抛给 Easyflow,Easyflow 渲染成电子表单投递到签核人收件箱,签核结果再通过调用 Tiptop 提供的服务回写栏位。它适合正在做 ERP 与 OA 单据签核打通的 4GL 开发者、实施顾问,也适合需要判断“这张单能不能接进签核流”的运维。下面按 Tiptop 端改造、Easyflow 端配置、联调排错三段拆开讲,参数和坑都落到具体栏位与文件上。

2. Tiptop 端改造:七个签核栏位与抛转作业的生成逻辑

Tiptop 侧的集成不是“加个按钮”那么简单,它要求单据数据表、单据性质、抛转程序、标准作业四处同时到位,缺一处就是静默失败。这一章按实际动手顺序拆:先确认环境与数据表,再用 aws_efcfg 生成抛转骨架,最后改标准作业的审核分支。

2.1 环境三件套与 .profile 里的三个变量

交互走 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

这三个变量的含义要分清:EFSITEIP是 Easyflow 服务器地址,EFSITENAME是站点名,EFSOAP是网关 WSDL 的完整路径。改完必须重新登录 shell 让变量生效,只改文件不重进会话是常见翻车点。另外要确认 Easyflow 服务器端已装 Tiptop&Easyflow 集成包,没装的话后面所有抛转都会在网关层被拒。IP 随服务器不同而变,别照抄示例地址。

2.2 数据表七个栏位:两个关键、五个辅助

一张单据要进签核流,对应数据表必须存在七个栏位。以请购单单头档为例:

栏位含义是否关键
pmkmksg是否签核关键
pmk25签核状态关键
pmksign签核等级(多级签核用)非关键
pmkdays签核完成天数非关键
pmkprit签核优先顺序非关键
pmksseq已签核顺序(系统维护)非关键
pmksmax应签核顺序(系统维护)非关键

两个关键栏位每支作业都必须有,其中“签核状态”在各表里名字可能不同,检查时按语义找而不是按名字找。单身档一般不放签核栏位。缺栏位就按客制规范补建,补完记得更新 schema 资料(r.s2 dsx),否则 4GL 编译时认不到新栏位。签核状态的取值要记牢:0 开立、1 已核准、6 结案、9 作废、S 送签中、R 送签退回、W 抽单;出现 2 之类通常是作业内部特殊含义(如转采购单),别当成脏数据清掉。

2.3 用 aws_efcfg 生成抛转骨架,再手工改三处

aws 模块下aws_efcfg.4gl是一支维护窗体,用来定义某支单据的签核信息。界面上配好单头、单身要传的栏位后,点“产生范式程序”会在aws/4gl下生成aws_xxx.4gl,整个文件就是一个函数aws_efcli_cf(),结构固定三步:声明 RECORD sr 存中间信息、组 l_sql 取数赋给 sr、循环 sr 拼 XML 字符串。

默认情况下 sr、sql、xml 三者一致,需要动手改的只有三类情况:栏位要经过处理才能传(比如代码转名称)、选取栏位与 XML 栏位数量不一致、需要 JOIN 其他表取值。第三类在 aws_efcfg 里就能配:左边填本表栏位(如 oga04 客户编码),右边填参照字段(如 occ02 客户名称),生成的程序会自动 JOIN occ_file 并用 occ02 的值替换 oga04 的位置。手工改的典型写法如下:

# 示意:4GL 中代码转名称与地址拼接的处理逻辑 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

逻辑说明:第一段把代码值经cl_getmsg转成显示文本存进中间变量,XML 里输出中间变量而不是原始栏位;第二段调s_addr拼完整地址;第三段拼 XML 时每个节点后跟ASCII 10换行,方便排查时肉眼读。参数上注意CLIPPED去尾空格,否则 XML 里会带一串空白,Easyflow 端解析后栏位值看着“多了空格”多半就是这里漏了。窗体上还有个“传送栏位资讯”按钮会按资料库设置重建 Columnset.xml,不建议用——它假设库结构和文件完全一致,实际很难保证,手工维护更稳。

2.4 标准作业改造:审核分支让位给签核

标准作业(以出货单 axmt620 为例)要加一个xxx_ef()函数调用抛转函数,核心是设置签核状态为 S、审核状态为 Y,再刷新界面图标:

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' # 审核状态:已审核 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 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

然后在原审核函数里、所有判断做完但事务性操作还没开始的位置插一段分流:若g_oga.ta_ogamksg='Y'且ogaconf='N',调t600_ef(),成功就直接 RETURN,不再走原审核流程。这里有个必须想清楚的设计后果:单据一旦走电子签核,原审核代码基本作废,审核按钮只承担“送签”职责。原审核段里若有事务性操作,正确做法是把被屏蔽的代码拷贝成新函数(拷贝不是移动),新增一个 Action(如 confirm_ef),仅当签核状态为 1 时允许执行。另外“取消审核”“作废”也要加签核状态判断:需签核且状态不为 1 的单据不允许作废和取消审核。改造时建议照着一支成熟签核作业抄,请购单 apmt420 是现成参照。

3. Easyflow 端配置:表单目录、ColumnSet 与流程向导

Tiptop 把 XML 抛出来只是半程,Easyflow 侧要接得住:表单文件、数据表、XML 映射、表单性质、审批流程、表单关联六件事,任何一件没配好,表现都是“单据发出去了但收件箱看不到”。

3.1 复制表单目录与三处 ID 替换

在Program Files\EF2Kweb\ASP\CHT\Forms下,拷一个已有 Tiptop 单据目录改成新单号(如 TT_SO1 复制为 TT_WO1),目录内所有文件名同步改名。然后进三个 Init 结尾的 ASP(Approve_Init、Create_Init、Display_Init)以及 Grid.ASP,把里面所有旧单号字符串替换成新单号。这一步漏一个文件,表单加载时就会报找不到模板或串到旧单的表单上,属于典型的“看着像缓存问题其实是漏改”。

3.2 表单控件 ID 命名规则:xxx_1 与 xxx_2

用网页编辑工具调 Forms.ASP 的布局,控件一般只用两种:多行文本框和选择框(日期用后者)。关键是 ID 规则:标签 ID 为xxx_1(如 sfb01_1),控件 ID 为xxx_2(如 sfb01_2),系统按栏位名解析 ID 后从 XML 取值填充。这两组 ID 弄错,表单能打开但栏位全是空的,而且不报错,排查时极耗时间。单身表格用 OCX 嵌入,不需要单独设 ID。

3.3 数据表、EF2Kweb.xml 与 ColumnSet.xml

SQL Server 里以原表单数据表为底复制新表、改栏位名,导入导出方式最省事。然后到EF2KwebPackages\tiptop下改两个文件:EF2Kweb.xml 增加新单据 ID(复制现有条目改);ColumnSet.xml 增加 Program 段,内容与 Tiptop 端aws_xxx抛转的 XML 格式完全一致。XML 栏位顺序不必和 Tiptop 字符串相同,但名称必须一一对应。这里有个硬性要求:XML 里必须抛一个资料所有者xxxuser栏位,它不显示在表单上,但 Easyflow 靠它解析填单人、驱动流程,漏了它流程根本起不来。

3.4 表单性质、权限与流程向导

进“管理程序清单 → 流程基本数据 → 表单性质维护”,把新表单的显示否、生效日、失效日设对——显示否没勾或日期设错,表单就是不出来。设完还要滚到页面底部新建权限文件,否则表单依然不可见。接着走“自动向导 → 流程设定向导”,给表单加审批关并指定审批人,Tiptop 抛来的单据就会进该审批人收件夹,审批完流程结束回写 Tiptop。最后用“易拓集成向导 → 新增表单关联”,选 Tiptop 程序代号、工厂代号(选完会自动列出单据性质里勾了签核的单别),再选对应电子表单代号,点新增关联。到这一步,两端才算真正接上。

4. 联调避坑:五条从现场带回来的排查记录

4.1 现象:点审核提示成功,收件箱没有单据

原因:单据性质里该单别“是否签核”没勾,或勾了但没选对单别。解决:回 asmi300 一类单据性质作业确认单别签核标志,改完重新抛一张新单测试,旧单不会自动补发。

4.2 现象:表单能打开,栏位全空

原因:控件 ID 不符合xxx_1/xxx_2规则,或 ColumnSet.xml 里节点名与 Tiptop XML 不一致。解决:先比对两边节点名逐字核对(大小写、下划线都算),再检查 Forms.ASP 里标签与控件 ID 是否成对。

4.3 现象:抛转报错或 XML 内容错位

原因:抛转程序里 SELECT 的栏位顺序与 XML 拼接顺序不一致,或该 CLIPPED 的没 CLIPPED 导致值带空格。解决:打开生成的aws_xxx.4gl,把 l_sql 的栏位列表和 XML 拼接段逐行对照,中间变量赋值处重点看。

4.4 现象:签核完成但 Tiptop 状态不回写

原因:Easyflow 回写调用的 Tiptop 服务没起,或.profile里 EFSOAP 地址写错、改完没重登。解决:确认 Appserver 在跑,用新会话验证三个环境变量已生效,再看网关日志里回写请求是否到达。

4.5 现象:单据作废或取消审核后流程错乱

原因:标准作业只判断了审核状态,没加签核状态判断。解决:在作废、取消审核分支补上“需签核且状态不为 1 则拒绝”的判断,这是改造时最容易漏的一处。

5. 进阶验证:用一张单跑通全链路再批量铺开

新单据集成最稳的验证方式不是看代码,而是拿一张单走完整生命周期。我的习惯是:先建一张单别已勾签核的工单(asfi301),保存后确认审核状态 N、签核状态 0、提示“开立”;点审核选“是”,看是否提示抛转成功、状态变 S;登录指定审批人账号确认收件箱有单、表单栏位值与 Tiptop 一致;审批通过后回 Tiptop 查签核状态是否变 1、回写栏位是否正确;最后再测一遍作废与取消审核是否被正确拦截。这套动作跑通,才说明七个栏位、抛转程序、ColumnSet 映射、流程关联四处都对上了。

批量铺开时建议做一个对照表,把每支单据的作业代号、抛转程序名、Easyflow 表单代号、单别签核标志列清楚,逐行验收:

验收项通过标准
抛转审核后状态变 S,无报错弹窗
收件箱指定审批人可见,栏位值一致
回写审批后 Tiptop 状态变 1,关键栏位正确
拦截未核准单据不可作废、不可取消审核

还有个小技巧:调试期在 XML 拼接处临时把g_strXMLInput落一份到日志文件,比对 Easyflow 端实际收到的内容,比在两端界面来回猜快得多。从那以后我每次接新单据,都强制先把这张全链路验收表走一遍再动第二支作业——跳过这步省下的时间,后面都会以翻倍的形式还回去。希望帮到你。

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进