U开发之EAI接口Word文档格式.docx
《U开发之EAI接口Word文档格式.docx》由会员分享,可在线阅读,更多相关《U开发之EAI接口Word文档格式.docx(22页珍藏版)》请在冰点文库上搜索。
采用JNI、JCOM、JACOB技术调用EAI服务代理COM组件,下面以JACOB为例:
import
classTest
{
publicstaticvoidmain(String[]args)
//创建EAI服务代理接口对象
DispatcheaiBroker=newDispatch("
U8Distribute.iDistribute"
);
//调用EAI服务代理的数据交换方法Process,传入Request交换消息,并获取EAI
//返回的Response消息。
StringresponseXml=
Dispatch.call(eaiBroker,"
Process"
newVariant(requestXml));
......//处理返回结果
}
远程HTTP接口
EAI远程数据交换采用HttpPOST的方式。
访问网址:
http:
//U8应用服务器IP或机器名/U8EAI/import.asp。
POST上传的数据交换请求消息与本地调用一样。
开发者可以用SOAP协议向装有U8-EAI的IIS服务器发送XML数据,类似本地调用分析返回的XML回执,如下:
DimxmlhttpAsObject
Setxmlhttp=CreateObject(“MSXML2.XMLHTTP”)‘创建XMLHTTP对象
Callxmlhttp.open(“POST”,“”,False)‘使用XMLHTTP对象打开网络连接
xmlhttp.sendrequestXml‘发送Request消息
responseXml=xmlhttp.responseText‘获取返回Response消息
注意:
URL:
//u8appsrv/u8eai/import.asp中的u8appsrv应填U8应用服务器IP或机器名。
2).NET调用代码
3)
//引用
MSXML2.XMLHTTPClassxmlHttp=newMSXML2.XMLHTTPClass();
//创建XMLHTTP对象
xmlHttp.open(“POST”,“”,false,null,null);
//打开网络连接
xmlHttp.send(dom.OuterXml);
//发送Request消息
StringresponseXml=xmlHttp.responseText;
//获取返回Response消息
//COM释放
JAVA调用代码
URLurl=newURL(“”);
HttpURLConnectioncon=(HttpURLConnection)url.openConnection();
con.setConnectTimeout(3000000);
con.setReadTimeout(3000000);
con.setDoInput(true);
con.setDoOutput(true);
con.setAllowUserInteraction(false);
con.setUseCaches(false);
con.setRequestMethod("
POST"
con.setRequestProperty("
Content-type"
"
application/x-www-form-urlencoded"
//发送Request消息
OutputStreamout=con.getOutputStream();
DataOutputStreamdos=newDataOutputStream(this.out);
dos.write(requestXml.getBytes("
UTF-8"
));
//获取Response消息
InputStreamin=con.getInputStream();
BufferedReaderbr=newBufferedReader(newInputStreamReader(in));
StringBuildersb=newStringBuilder();
Strings=null;
while((s=br.readLine())!
=null){
sb.append(s);
}
StringresponseXml=sb.toString();
调用U8API接口
满足现有U8EAI做不到的业务单据操作,如销售报价单增删改,以及业务操作,如审核、弃审,将现有U8API的功能整合进U8EAI,将两者糅合在一起,形成功能互补,为企业应用集成和二次开发提供更强大的支持。
通过参照U8API请求XML模板,填入相应的API参数值,即可实现通过U8EAI统一接口调用U8API服务。
详细内容请参见文档《U8API和U8EAI整合》。
1、请求XML格式
<
?
xmlversion="
1.0"
encoding="
utf-8"
>
ufinterfaceroottag="
u8api"
receiver="
u8"
sender="
001"
proc="
add"
u8apiservice>
apiurlvalue="
U8API/PurchaseOrder/VoucherSave"
/>
apiParams>
paramname="
VoucherState"
value="
2"
datatype="
int"
CurDom"
IXMLDOMDocument2"
UserMode"
0"
/apiParams>
bo>
headtype="
bo"
bodytype="
bo“/>
/bo>
returnParams>
curID"
/returnParams>
/u8apiservice>
/ufinterface>
其中,proc填入操作类型,添加:
add;
编辑:
edit;
删除:
delete;
查询:
query;
审核:
verify;
弃审:
unverify。
2、返回XML格式
以上为查询返回XML格式,新增成功后,还会返回新增单据或档案的ID。
3、返回错误信息
按传入顺序返回批量操作的执行结果,调用一次API的过程中若出现错误,不影响其他调用的执行。
通用SQL查询接口
由于EAI接口返回的数据格式是固定的标准格式,很有可能返回的数据中没有用户所需要的字段;
另外,对于U8中的业务数据,EAI接口也不是100%覆盖的。
针对以上情况,EAI提供了一个灵活的数据查询通用接口--EAI通用SQL查询接口,该接口支持向EAI数据交换代理传递SQL语句进行查询操作,可以查询当前U8帐套的所有数据,用户不用直接访问U8帐套库。
查询返回的结果为.NET中的Dataset的XML格式的数据。
调用该接口只需给EAI数据交换服务代理传递特殊的Request消息即可。
1、请求Request消息格式
其中,框架部分的roottag值必须固定为“SQLEXE”,proc的值用来标识Dataset的行节点,可以是任意字符串;
内容部分<
sqlvalue=“sql语句”/>
节点为SQL查询语句。
2、应答Response消息格式
其中,根节点的proc的值用来标识Dataset的行节点,一般为表名。
数据交换格式
U8EAI提供了一整套完整的基本档案和单据的数据交换模版(在EAI\XML\Template目录下),模板中定义了消息内容部分的格式和字段。
请求消息格式
EAI数据交换请求消息格式分为框架和内容两部分:
框架部分包含数据交换的控制信息,其中主要包括:
1)billtype系统用,可填空;
2)docid:
唯一编号,可空;
3)sender:
发送方,填外部系统注册码(必填);
4)receiver:
接收方,可填U8;
5)roottag:
档案或单据模版名,填档案或单据的唯一标识,如:
客商档案:
customer,客商分类:
customerclass,具体名称由总体确定,在数据交换中该名称要经常使用;
6)proc:
操作类型,分为“增删改查”,对应填Add/Delete/Edit/Query(必填),该字段导入操作,请填写Add/Delete/Edit,导出操作,请填写Query;
7)dynamicdate:
业务账套登录日期,如果不填,则取U8应用服务器所在操作系统的当前日期,否则取指定的登录日期进行业务账套登录;
8)codeexchanged:
编码是否已转换,该字段在导入的时候使用,如果已转换即已和U8基础数据编码一致填Y,将不会通过对照表的转换,如果没有转换即和U8基础数据编码不一致填N,将会自动通过对照表转换之后,进行相应的操作;
9)exportneedexch:
导出是否需要根据对照表进行转换,需要填“Y”,不需要填“N”,导出的时候使用;
10)timestamp:
时间戳标志,在导出数据时,导出此时间戳的所有以后的数据,若为空,则导出只有过滤条件的数据。
内容部分:
指数据请求或响应消息中携带的档案或单据等业务数据,如:
单据模板指的U8中各个基础档案和业务档案用XML存储时的格式。
目前放在U8Soft\EAI\XML\Template中。
模板的下部注释中有模板中各个节点的相应说明,主要是供二次开发人员和客户了解U8单据格式使用。
在U8SOFT\EAI\XML\Samples有各个模板的详细例子供参考。
回执消息格式
从U8导出数据成功的回执就是业务数据。
导入情况的回执如下所示:
返回字段描述:
1)key:
单据表体行数据的编号,比如:
销售订单表体的存货编码;
2)succeed:
成功标识:
0:
成功;
非0:
失败;
3)dsc:
失败的描述信息;
4)docid:
消息号;
5)proc:
操作码;
6)u8key:
成功后U8系统对应的关键字。
凭证的add操作的Response格式比较特殊,返回格式如下:
ufinterface?
roottag="
voucheraddreturn"
docid="
"
item?
accounting_period="
10"
voucher_type="
记"
voucher_id="
888"
u8voucher_id="
1138"
entry_id="
succeed="
dsc="
凭证已成功保存"
u8accounting_period="
/item>
1)acc_period:
会计期间,0为期初往来明细帐,21为期初待核银行帐,20为银行帐科目调整前余额,1-12为凭证及明细帐
2)vouch_type:
凭证类别字
3)vouch_id:
凭证号(由系统分配凭证号,期初时可为空)
4)row_id:
行号(由系统赋值,期初时为1)
5)u8vouch_id:
U8凭证号
6)u8acc_period:
U8凭证会计期间
7)succeed:
EAI接口设置
在使用EAI之前的第一步必须进行一个接口配置。
检查有没有进行EAI接口配置(“开始”->
“程序”->
“用友U8V*”->
“企业应用集成(EAI)”->
“EAI接口设置”),如果没有则需要进行配置。
一般配置好后就不要动了,除非出现服务器迁移或重新安装的情况。
基本设置
需要指定U8服务器、EAI登录身份验证、EAI数据源。
如果进行数据交换的数据包比较大,则需要点“自动设置IIS”更改IIS的大数据限制。
建议:
EAI的登录身份验证和U8业务帐套的身份验证分开使用。
在此将EAI登录用户配置成一个独立用户,不要与其他人使用的账号相同,如demo,并赋予该用户适当的权限以进行EAI数据交换,如帐套主管,配置完后重启IIS。
外部系统注册
在“EAI接口设置”中切换到外部系统注册页签进行外部系统注册。
可以注册多个外部系统注册码。
在数据交换中,需要明确指定外部系统与U8的某个业务账套的对应关系,该对应关系由一个唯一的注册码标识。
数据交换时需要在请求消息的头指定一个注册码:
ufinterfacesender="
注册码"
…>
。
数据导入
基础导入
EAI的数据导入,传入的参数为根据XML模板制作的XML数据。
比如,要导入部门档案,传入的sXml如下:
011"
department"
Add"
codeexchanged="
n"
exportneedexch="
N"
paginate="
display="
部门档案"
family="
timestamp="
0x000000000027B59C"
department>
code>
0<
/code>
endflag>
/endflag>
name>
基建中心<
/name>
rank>
1<
/rank>
manager/>
…
/department>
001<
基建投资部<
2<
prop/>
...
导入时,单据头中的proc必须为Add/Edit/Delete之一,并不是所有单据都支持这三种操作。
凭证导入
由于凭证导入的特殊性,凭证导入时单据头中增加了renewproofno、import、newadd三个属性,含义如下:
proc=”add”//追加
proc=”edit”//覆盖
renewproofno=”y”//重新编号
renewproofno=”n”//不重新编号
import=”y”//导入式
newadd=”y”//新增式
并且,导入时只有下面六种组合
1.序号
1.1.操作
1.2.单据头
1.3.说明
2.1
3.重新编号+追加+新增式
4.Proc=”add”renewproofno=”y”
5.newadd=”y”
6.import=”n”
7.追加生成的凭证记录为生成态。
即刚编写完的凭证状态。
8.凭证编号重新排序
9.2
10.不重新编号+追加+新增式
11.Proc=”add”renewproofno=”n”
12.newadd=”y”
13.import=”n”
14.追加生成的凭证记录为生成态。
15.凭证编号不重新排序
16.3
17.重新编号+追加+导入式
18.Proc=”add”renewproofno=”y”
19.newadd=”n”
20.import=”y”
21.保持除记账、预算审批标志外的所有导入前输出状态。
22.凭证号重新编号
23.4
24.不重新编号+追加+导入式
25.Proc=”add”renewproofno=”n”
26.newadd=”n”
27.import=”y”
28.保持除记账、预算审批标志外的所有导入前输出状态。
29.凭证号不重新编号
30.5
31.不重新编号+覆盖+新增式
32.Proc=”edit”renewproofno=”n”
33.newadd=”y”
34.import=”n”
35.覆盖生成的凭证记录为生成态。
36.凭证号不重新编号
37.6
38.不重新编号+覆盖+导入式
39.Proc=”edit”renewproofno=”n”
40.newadd=”n”
41.import=”y”
42.保持除记账、预算审批标志外的,所有导入前输出状态。
43.凭证号不重新编号
XML是对大小写敏感的,在EAI标准中所有的元素名都为小写字母
EAI标准数据中的有些元素可以为空元素,有些则不得为空,根据具体业务不同而不同。
但所规定的元素一个也不能多,一个也不能少
数据导出
操作码为Query,可加入导出条件。
格式例子(以导出部门档案为例):
Query"
基础档案"
departmentimportfile="
exportfile="
code="
bincrementout="
fielddisplay="
部门编码"
name="
cDepCode"
operation="
="
logic="
And("
部门名称"
cDepName"
)"
元素department表示为部门档案:
属性importfile:
保存的是导入文件路径
属性exportfile:
保存的是导出文件路径
属性code:
外部系统的注册号
元素Field表示每个条件:
属性display:
中文含义
属性name:
字段名
属性operation:
是比较运算符
属性value:
比较值
属性logic:
是连接的逻辑运算符。
and:
并且;
or:
或者
每次导出一种单据,这里为部门档案,如果需要导出收款单则需要再一次导出。
条件Field可以有多条。
这个调用返回的XML回执为U8的标准数据。
并不是导出数据会自动保存到Importfileexportfile指定的路径,这两个参数是EAI工具保存数据使用的。
应用案例
案例背景
A公司是一家专业办公设备经销商。
在企业创建之初,由于规模和业务量都不大,在管理上并没有出现多大问题。
随着公司的发展,在财务上采用传统手工处理的方式逐渐暴露出越来越多的问题。
于是公司引进了一套U8财务系统来有效管理企业的应收账款和出入现金流。
为了更好的拓展和辐射外地市场,提高市场占有率和客户服务水平,公司逐步在全国许多城市建立了自己的经销网点和客户服务中心,为了提高运营效率,降低成本,加强管控,公司决定为整个分销网络部署一套综合业务系统,通过资源共享与实时调度提高整个销售网络的灵活度和有效应对市场变化的能力,并为客户提供一流的服务水平。
但问题随之产生,由于A公司的外地营销网点规模普遍很小,不具备独立核算能力,而且公司即将部署的综合业务系统并不具备专业的财务管理功能,在财务上仍然必须由公司集中管控。
而且,多年来,公司在U8财务软件的帮助下已逐步形成了一套严谨高效的财务管理流程和制度,如果摈弃U8,去开发和部署新的能连接业务系统的财务软件,不仅会浪费公司现有的IT资产,增加IT投资成本,更重要的是会浪费公司积累起来的适合自己实情的宝贵管理经验。
A公司老总认为,如果能将综合业务系统与现有的U8财务软件实现整合,必将带来双赢的利益:
一方面降低了IT投资成本,节约了时间;
另一方面促进了公司财务管理的持续完善和创新。
需求分析
A公司的综合业务系统能有效管理经销网点的销售和售后业务帐以及仓库台帐:
能开具发票,进行收款结算;
能管理发货和收货,进行商品盘点和结存;
能统计和分析销售状况;
能处理退货、维修等售后业务。
这些业务活动为公司带来的盈利或亏损,必须要通过公司总部的会计系统(U8财务系统)进行记账、核算、以及财务报表分析,才能正确反