用友EAI对接操作手册

一、环境准备

1.1 找提供一台部署代理程序的电脑,要求
    a. 该电脑允许被外网访问(为了安全可以让这个服务器指定纷享的ip可以访问,一定要跟用户说,不然出现安全问题,自己负责);
    b. 当前系统不会经常关闭【最好是linux系统,或者跳板机类的】;
1.2 提供部署代理程序的服务器的IP+端口或者域名【步骤1部署代理服务所在的服务器】;
1.3 提供一下测试账套的服务器的ip【U8测试账套所在电脑,图标如下】:
1.4 提供一下U8数据库的IP和数据库名称,可以查询对应账套的数据库用户(只有查询权限就行了,正常只需要查询的权限就行,会有安全问题。);
1.5 提供一下测试账套的账套和账套密码【用于测试和配置对接信息】;
1.6 让客户IT在需要对接的账套执行如下创建临时表的sql:
CREATE TABLE [dbo].[sync_obj_record] ( [id] bigint NOT NULL, [obj_name] varchar(100) COLLATE Chinese_PRC_CI_AS NOT NULL, [md_str] varchar(32) COLLATE Chinese_PRC_CI_AS NOT NULL, [data_id] varchar(100) COLLATE Chinese_PRC_CI_AS NOT NULL, [data_body] text COLLATE Chinese_PRC_CI_AS NOT NULL, [version] int NOT NULL, [create_time] bigint NOT NULL, [update_time] bigint NOT NULL, CONSTRAINT [PK__sync_obj__3213E83F46CC8028] PRIMARY KEY CLUSTERED ([id]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO ALTER TABLE [dbo].[sync_obj_record] SET (LOCK_ESCALATION = TABLE) GO CREATE UNIQUE NONCLUSTERED INDEX [sync_obj_record_u1] ON [dbo].[sync_obj_record] ( [obj_name] ASC, [data_id] ASC )

二、配置对接环境

2.1 客户环境配置

2.1.1 配置EAI

在客户的U8服务器找到EAI 程序,打开EAI接口设置,配置账套,并且【取消勾选忽略自定义拓展信息】,涉及到权限问题可以让客户自己配置

2.1.2 配置运行环境

代理服务下载见乐享文章【研发培训】连接器-用友U8 EAI
配置代理服务
1. 在外网调用/adapt/proxy/api/test接口测试。如果接口测试成功则说明外网访问权限已经正常;
服务器基础路径:http://ip:端口/start.bat中server.servlet.context-path的值/adapt/proxy/api
服务器登陆接口:http://ip:端口/start.bat中server.servlet.context-path的值/adapt/proxy/api/login
服务器新增接口:http://ip:端口/start.bat中server.servlet.context-path的值/adapt/proxy/api/create
服务器更新接口:http://ip:端口/start.bat中server.servlet.context-path的值/adapt/proxy/api/udpate
服务器批量接口:http://ip:端口/start.bat中server.servlet.context-path的值/adapt/proxy/api/queryMasterBatch
服务器单个接口:http://ip:端口/start.bat中server.servlet.context-path的值/adapt/proxy/api/queryMasterById
验证登陆接口:

2.3 配置集成平台

2.3.1 厂商配置

ERP服务路径:填写服务器基础路径:http://ip:端口/start.bat中server.servlet.context-path的值/adapt/proxy/api
EAI接收方:默认u8就行
EAI调用方:EAI配置中的注册码(见2.1.2 配置EAI部分)
代理服务账号密码:填写配置文件中的Security节点中的账号密码。这个账号密码设置复杂一点。(指2.1.3.1 步骤配置密码)

2.3.2 配置支持对接的对象

​ 参考U8openApi: http://open.yonyouup.com/apiCenter/index openApi能支持的新增和更新。EAI都是支持的。查询走的数据库的查询逻辑。所以如果知道表。所有对象从erp到crm都是支持。下载U8客户端或者直接下载如下附件:
META-INF.zip
824.6 KB
目录的文件可以找到查询的sql。以及未预置的对象的字段:

2.3.3 EAI调试  

三、通用规则

3.1 配置流程

​     打开ERP对象配置,配置对象(常用对象已经预置)。需要操作的是修改相关的下拉选项字段的选项值(因为每家企业的单选枚举,都不同所以没有预置)。另外U8的单选有些是可以作为查找关联字段对接。但是需要先把选项值先同步到CRM的某个对象里面;具体配置步骤如下:
1. 对接字段都选择编码字段对接;
2. 如果预置中没有对接的字段,需要自己手动预置,字段规则请到【META-INF.zip】附件中的xml文件中查找(可能在对象的query。add或者edit文件中);
3. 配置对接的同步策略和字段映射(通用不赘述,不清楚的请查看【集成平台手册 】),额外说明的一点:必填字段和默认值需要传【配置文件模板中的有值字段】。不传会报错;
4. U8新增拓展字段CRM同步到U8【所有的带明细的对象,明细都要求新增一个拓展字段对接CRM的明细编码或者唯一性字段】;
5. 主键规则:主对象的主键以编码作为ERP主键,从对象的主键以从对象的数据库id作为主键。所以从对象id都是需要通过sql的反查出来的。需要配置查询明细id的sql;
6. 修改EAI配置。修改场景:
  1. 新增非预置对象ERP到crm方向;
  2. CRM到ERP的明细查询主键Sql;
  3. 插入数据库操作(危险操作,建议不要操作。可能搞蹦客户系统,正常跑没问题。异常情况可能整个系统崩溃,需要使用请和客户签署协议)
  4. 修改查询sql语句
打开生成API,进入配置:
进入生成api里面:
表主键字段:同步对象在U8对应的表里面的主键;
接口主键字段:接口中的主键字段(和ERP对象配置的字段中的主键是同一个字段名称);
批量查询sql:可以在METE-INF附件中的文件中找到。主和明细的sql是分开的
查询主键sql:主对象如果是走EAI报文新增的(没有批量新增的语句)就不需要填写。EAI报文默认是code作为主键。明细必须填写
新增/更新sql:sql语句语法参考sqlserver语法, 新增和更新中涉及到的字段值需要以'#对象中的字段名称'格式进行编写,如果sql中需要传入父级类的id,则对应的值写法为'#pid' ;
sql编写规则:sql语法为sqlserver的标准语法。sql中的值替换规则使用'#字段'。字段为ERP对象列表中的字段。

3.2 单据配置

需要传的U8字段参考如下,具体字段值映射根据实际客户的选项配置:

​3.2.1 客户对象

如果是使用crm的客户编码作为ERP客户编码则正常映射字段对接就行;如果是需要使用erp的客户编码流水号生成规则,则按下步骤:
​ 1. 先配置U8客户使用自动生成编码:
2. 配置字段映射需要在crm新建一个ERP客户编码字段。然后ERP客户编码和U8的客户编码字段做对接。并且设置默认值,还需要在同步后函数把接口返回的客户编码字段写入到CRM的ERP客户编码字段里面

3.2.2 销售订单

在U8新建一个拓展字段,参考【通用规则第5点截图】。依赖产品对象,需要先同步产品对象;完成通用规则里面的配置流程:ERP对象配置→字段配置→策略配置。进入字段映射配置。配置的字段请在U8查看哪些字段是必填。
a. 所有的必填字段【U8中带*号】都需要对接;需要传的U8字段参考如下,具体字段值映射根据实际客户的选项配置:
订单对接注意事项:
1. 表头税率和表体的税率需要保持一致;
2. 如果订单明细传入了价税合计,则表体需要传入【本币价税合计】不然会报错【程序错误未设置对象变量或 With block 变量,这个错一般都是字段少传导致的】需要在U8和集成平台配置里面增加一个拓展字段用来对接crm的订单产品编码。同时需要修改ERP字段配置生成api里面的查询明细id(数据库里面订单明细的id)的sql语句;

3.2.3 发货单

请注意:CRM同步发货单到U8暂时不支持通过发货单上查订单,无法通过订单下查发货单!需要传的U8字段参考如下,具体字段值映射根据实际客户的选项配置:
需要在U8和集成平台配置里面增加一个拓展字段用来对接crm的订单产品编码。同时需要修改ERP字段配置生成api里面的查询明细id的sql语句。
create TRIGGER [shengchengdingdanhao] ON [dbo].[DispatchList] after insert,update AS begin update DispatchList set DispatchList.cSOCode= (select DispatchLists.cordercode from DispatchLists inner join inserted on DispatchLists.DLID=inserted.DLID and DispatchLists.irowno=1) from DispatchList inner join inserted on DispatchList.DLID=inserted.DLID and inserted.cVouchType=05 end

3.2.4 收款单

需要传的U8字段参考如下,具体字段值映射根据实际客户的选项配置:

3.2.5 销售发票

3.2.6 产品

U8到CRM产品对象对接比较常规,正常对接。U8的产品名称可能是会重复。但是crm的产品名称不允许重复,所以可以用一个产品编码+产品名称的格式对接到crm的产品。
当然这个字段具体的格式可以自己定义。只需要修改查询的sql就行了;  
映射字段配置参考:

3.2.7 导入产品分类

产品分类导入参考:产品手册

3.2.8 库存明细

U8的库存是即时库存明细,所以对接到crm也是需要开启库存明细才能对接。不能直接对接到库存对象
在CRM开启库存明细对象:
配置策略明细字段映射参考如下配置:

四、常见问题

4.1 启动start.bat日志报错 run.log中日志出现:parse String to Object error: UnExpected character

这个问题是因为配置文件的字符集有问题,可以通过下载文档中的 AdaptConnectConfig 进行修改。或者启动的时候增加参数:-DconfigCharset=当前文件的字符集
windows记事本默认的字符集编码是ANSI编码
start javaw -jar MidProxyServer.jar -Dserver.port=xxxx-Dserver.servlet.context-path=/xxx -DconfigCharset=ANSI
简单处理方式:把文本复制处理。用utf8的编辑器重新保存一下。确保文件的格式是utf8就行。默认加载的字符集就是utf8

4.2 启动策略报null

这类型的问题排查步骤:
  1. 请检查部署在客户的电脑上的服务是否正常启动。如果未启动会报这个错。需要手动启动服务,如果有其他代理程序。则需要启动其他的代理程序
  2. 请检查部署在客户的电脑上的服务对应的IP和端口是不是有对外访问的权限,如果没有会报这个错
  3. 这类型的问题,可以让客户开放外网权限后直接在外网调用:http://ip:端口/start.bat中server.servlet.context-path的值/adapt/proxy/api/test 进行访问。如果正常请求则说明服务启动。并且可以正常请求:

4.3 EAI执行出现未知异常

调用ERP接口报错:调用外部http接口失败,错误信息:20005,U8 服务调用失败:key='';EAI执行出现未知异常,错误已捕获。异常信息:错误文件名或数(错误号:52 错误源:U8Distribute 错误位置:15)
解决方法:参考当前文档的对象的配置。这个报错问题原因是存在一些必传字段没有传导致的。参考示例的文档字段配置后验证;

4.4 EAI服务异常:null

调用外部http接口失败,错误信息:EAI服务异常:问题是调用EAI接口没有正常的返回信息,原因一般都是EAI服务器异常了,可能是EAI服务挂了或者EAI服务器和代理服务的网络发生了变化。
排查方式:
在部署的代理服务器上面调用:AdaptConnectConfig.json中的EAI接口路径http://EAI服务的ip(默认在U8企业应用平台软件的电脑,客户环境准备中步骤3的ip)/u8eai/import.asp
看下服务器是否能正常访问。返回如下是正常:

4.5 登陆认证失败,请重试

这类型的报错:先用postman调一下接口,看能不能正常访问,调试方式参考【配置集成平台】中postman测试登陆接口;

4.6 列名'cbdefine11'无效

这类型报错请打开接口详情:
  1. 查看报错的字段在报文中对应的sql;
  2. 检查配置流程4中的配置的拓展字段是不是有问题。每个客户生成的拓展字段的字段名称如果不一样。则手动修改字段名称,同时需要修改EAI配置里面的查询Id的sql;
  3. 检查配置流程5.1的明细id的sql

4.7 程序错误未设置对象变量或 With block 变量

一般是报文传参格式不正常。请参考对应的对象crm到erp的案例字段配置。
2024-09-12
9 15