| 编辑人 | 修改时间 | 修改内容 | 文档状态 |
|---|---|---|---|
| 张小猛 | 2020619 | 代理接口的编写 | soap代理(待完善) |
1. 代理接口
代理接口是指EBS系统后端请求调用第三方提供的应用程序接口,这些接口默认是不会自动调用的,需要:
1.通过浏览器JavaScript通过接口条用
2.Java定时自动调用
具体需要哪种方式,按需要确定。
1.1. 类型
- 简单 HTTP 代理接口
- SAP RFC 代理接口
- web service soap 代理接口(待完善)
1.2. http请求代理
1.2.1. 接口授权(pub_weixin)

1.2.2. 接口定义



1.2.3. 调用
/**
* 生成u8系统的应收和发货单,接口没有顺序,所以逐个依次成功后调用,并记录接口调用参数md5,
* 如果调用且成功过,就不在调用了,如果需要再调用,需要手工清理记录的md5字段
*/
function invokeInterface()
{
var deliverOrder = function()
{
var itf_title = "发货单";
if(browser.ismobile){
//不能手机上提交
alertold(不能手机上提交);
}else{
var hd = {} , domBody = [], error1 =[];
//是否可生成发票(0:不需要;1:需要),直接销售(渠道销售传1)
hd["iNeedBill"] = 1,
//发货日期 ord_date
hd["dDate"] = biz.$("span[name=ord_date],span[field=ord_date]").myval(),
//客户编码 ord_khbm
hd["cCusCode"] = biz.$("td[name=ord_khbm]").myval(),
//客户名称 ord_khdz
hd["cCusName"] = biz.$("td[name=ord_khdz]").myval(),
//部门编码 ord_bmbm
hd["cDepCode"] = biz.$("td[name=ord_bmbm]").myval(),
//业务员编码 ord_ywybm
hd["cPersonCode"] = biz.$("td[name=ord_ywybm]").myval(),
//销售类型编码 1
hd["cSTCode"] = 1,
//销项税=0
hd["iTaxRate"]=0,
//合同编号 ord_no
hd["cDefine14"]= biz.$("span[name=ord_no],span[field=ord_no]").myval(),
//项目编码 701
hd["cItemCode"] = 701,
//项目大类编码 97
hd["cItem_class"] = 97,
//操作员 ord_creator
hd["cMaker"]=biz.$("span[name=ord_creator],span[field=ord_creator]").myval();
biz.$("#table_1 > tbody[name=details_auto] > tr").each(function(i,e){
var tr_value = $(e).getAttr("value", "");
domBody[i] = {};
//仓库编码 01
domBody[i]["cWhCode"] = "01";
//存货编码 ord2_cpbh
domBody[i]["cInvCode"] = $(e).find("td[name='ord2_cpbh']").myval();
//数量 ord2_sl
domBody[i]["iQuantity"] = $(e).find("td[name='ord2_sl']").myval();
//单价 ord2_cjj
domBody[i]["iTaxUnitPrice"] = $(e).find("td[name='ord2_cjj']").myval();
});
hd["domBody"] = domBody;
var paramMD5 = md5(JSON.stringify(hd));
runwebservice4xml("u8deliverOrder",
{postdata:JSON.stringify(hd),extparam1:biz.order.ord_id,extparam2:paramMD5},
function(iseof,data,dsname){
if(!iseof&&dsname=="t1"){
if($f[_iTate]=="false") {
alertold("生成"+itf_title+"出错,请检查:"+$f[_strErr]);
}else{
ContractOrder();
}
}
});
}
}
//应收单
var ContractOrder = function(){
var itf_title = "应收单";
if(browser.ismobile){
//不能手机上提交
alertold(不能手机上提交);
}else{
var hd = {} , domBody = [], error1 =[];
//合同日期
hd["dDate"] = biz.$("span[name=ord_date],span[field=ord_date]").myval(),
//客户编码
hd["cCusCode"] = biz.$("td[name=ord_khbm]").myval(),
//客户名称
hd["cCusName"] = biz.$("td[name=ord_khdz]").myval(),
//应收科目编码 112201
hd["ARccode"] = "112201",
//收入科目编码
hd["Reccode"] = "5402",
//金额
hd["iSum"] = biz.$("td[name=ord_ssje]").myval(),
//合同编号
hd["cDefine14"] = biz.$("span[name=ord_no],span[field=ord_no]").myval(),
//操作员
hd["cMaker"] = biz.$("span[name=ord_creator],span[field=ord_creator]").myval();
var paramMD5 = md5(JSON.stringify(hd));
runwebservice4xml("u8ContractOrder",
{postdata:JSON.stringify(hd),extparam1:biz.order.ord_id,extparam2:paramMD5},
function(iseof,data,dsname){
if(!iseof&&dsname=="t1"){
if($f[_iTate]=="false") {
alertold("生成"+itf_title+"出错,请检查:"+$f[_strErr]);
}else{
applyjob_() ;//继续提交工作步骤
}
}
});
}
}
//调用发货单,回调完成后自动调用应收单,虽然没有逻辑先后顺序。
deliverOrder();
}
operation="abort";
if (wsstatus1=="结束")
{
invokeInterface();
}
1.3. SAP RFC 代理
1.3.1. 账号
--配置RFC账号
select wx_id,
wx_code 账号,
wx_appsecret 密码,
wx_tokenurl 额外参数,
wx_type 账号类型RFC就写RFC
from pub_weixin
where wx_type='RFC'
例如:
| wx_id | 账号 | 密码 | 额外参数 | 类型 |
|---|---|---|---|---|
| 6 | DEVOA | 123456 | ASHOST=ip& CLIENT=600& LANG=ZH& SYSNR=00& MAX_POOL_SIZE=10 |
RFC |
- rfc账号可选配置
| 前端使用的变量名 | java中使用的常量 | 实际值 |
|---|---|---|
| auth_type | DestinationDataProvider.JCO_AUTH_TYPE | jco.destination.auth_type |
| CONFIGURED_USER | DestinationDataProvider.JCO_AUTH_TYPE_CONFIGURED_USER | CONFIGURED_USER |
| CURRENT_USER | DestinationDataProvider.JCO_AUTH_TYPE_CURRENT_USER | CURRENT_USER |
| user_id | DestinationDataProvider.JCO_USER_ID | jco.destination.user_id |
| client | DestinationDataProvider.JCO_CLIENT | jco.client.client |
| user | DestinationDataProvider.JCO_USER | jco.client.user |
| alias_user | DestinationDataProvider.JCO_ALIAS_USER | jco.client.alias_user |
| passwd | DestinationDataProvider.JCO_PASSWD | jco.client.passwd |
| lang | DestinationDataProvider.JCO_LANG | jco.client.lang |
| codepage | DestinationDataProvider.JCO_CODEPAGE | jco.client.codepage |
| pcs | DestinationDataProvider.JCO_PCS | jco.client.pcs |
| ashost | DestinationDataProvider.JCO_ASHOST | jco.client.ashost |
| sysnr | DestinationDataProvider.JCO_SYSNR | jco.client.sysnr |
| mshost | DestinationDataProvider.JCO_MSHOST | jco.client.mshost |
| msserv | DestinationDataProvider.JCO_MSSERV | jco.client.msserv |
| r3name | DestinationDataProvider.JCO_R3NAME | jco.client.r3name |
| group | DestinationDataProvider.JCO_GROUP | jco.client.group |
| saprouter | DestinationDataProvider.JCO_SAPROUTER | jco.client.saprouter |
| mysapsso2 | DestinationDataProvider.JCO_MYSAPSSO2 | jco.client.mysapsso2 |
| getsso2 | DestinationDataProvider.JCO_GETSSO2 | jco.client.getsso2 |
| x509cert | DestinationDataProvider.JCO_X509CERT | jco.client.x509cert |
| extid_data | DestinationDataProvider.JCO_EXTID_DATA | jco.client.extid_data |
| extid_type | DestinationDataProvider.JCO_EXTID_TYPE | jco.client.extid_type |
| lcheck | DestinationDataProvider.JCO_LCHECK | jco.client.lcheck |
| delta | DestinationDataProvider.JCO_DELTA | jco.client.delta |
| snc_partnername | DestinationDataProvider.JCO_SNC_PARTNERNAME | jco.client.snc_partnername |
| snc_qop | DestinationDataProvider.JCO_SNC_QOP | jco.client.snc_qop |
| snc_myname | DestinationDataProvider.JCO_SNC_MYNAME | jco.client.snc_myname |
| snc_mode | DestinationDataProvider.JCO_SNC_MODE | jco.client.snc_mode |
| snc_sso | DestinationDataProvider.JCO_SNC_SSO | jco.client.snc_sso |
| snc_lib | DestinationDataProvider.JCO_SNC_LIBRARY | jco.client.snc_lib |
| dest | DestinationDataProvider.JCO_DEST | jco.client.dest |
| peak_limit | DestinationDataProvider.JCO_PEAK_LIMIT | jco.destination.peak_limit |
| pool_capacity | DestinationDataProvider.JCO_POOL_CAPACITY | jco.destination.pool_capacity |
| expiration_time | DestinationDataProvider.JCO_EXPIRATION_TIME | jco.destination.expiration_time |
| expiration_check_period | DestinationDataProvider.JCO_EXPIRATION_PERIOD | jco.destination.expiration_check_period |
| max_get_client_time | DestinationDataProvider.JCO_MAX_GET_TIME | jco.destination.max_get_client_time |
| repository_destination | DestinationDataProvider.JCO_REPOSITORY_DEST | jco.destination.repository_destination |
| user | DestinationDataProvider.JCO_REPOSITORY_USER | jco.destination.repository.user |
| passwd | DestinationDataProvider.JCO_REPOSITORY_PASSWD | jco.destination.repository.passwd |
| snc_mode | DestinationDataProvider.JCO_REPOSITORY_SNC | jco.destination.repository.snc_mode |
| cpic_trace | DestinationDataProvider.JCO_CPIC_TRACE | jco.client.cpic_trace |
| trace | DestinationDataProvider.JCO_TRACE | jco.client.trace |
| gwhost | DestinationDataProvider.JCO_GWHOST | jco.client.gwhost |
| gwserv | DestinationDataProvider.JCO_GWSERV | jco.client.gwserv |
| tphost | DestinationDataProvider.JCO_TPHOST | jco.client.tphost |
| tpname | DestinationDataProvider.JCO_TPNAME | jco.client.tpname |
| type | DestinationDataProvider.JCO_TYPE | jco.client.type |
| use_sapgui | DestinationDataProvider.JCO_USE_SAPGUI | jco.client.use_sapgui |
| deny_initial_password | DestinationDataProvider.JCO_DENY_INITIAL_PASSWORD | jco.client.deny_initial_password |
| repository_roundtrip_optimization | DestinationDataProvider.JCO_REPOSITORY_ROUNDTRIP_OPTIMIZATION | jco.destination.repository_roundtrip_optimization |
1.3.2. 定义
接口的定义
--配置RFC接口
select SVC_NAME [EBS接口名称],
SVC_URL [SAP接口名称],
svc_paramtype [参数列表],
/*SOHD:table[FBATCHNO|FCOMPNO|FORGNO|FSYSTEMDATE|FCUSTNAME|FCUSTTELNO|FSTORE|FANAME|FBNAME|FIMEI]={head},SOIT:table[FBATCHNO|FTRANTYPE|FCOMPNO|FORGNO|FITEMNO|FSERIALNO|FSELLPRICE|FQUANTITY|FMEMNO|FPAYID1|FPAYAMOUNT1|FTEXT]={details}*/
SVC_RESUlttype [返回结果类型],--RETURN:table或Z_OUTPUT:table
svc_language [编码格式?] ,--=default
SVC_ACCOUNT [账号] , --账号表pub_weixin的账号ID
SVC_TYPE [账号类型] -- RFC
from pub_webservice
1.3.3. 调用
var hd = ["WJ20180918000001(临)", "JH10", "JHCWZX", "2018-09-18", "啊啊啊", "15678902394", "", "", "系统管理员", ""]
var dt = ["WJ20180918000001(临)", "", "JH10", "JHCWZX", "000000000101200122", " ", "100.0", "1.0", " ", " ", "100.00", " ", "WJ20180918000001(临)", "", "JH10", "JHCWZX", "000000000107100021", " ", "200.0", "1.0", " ", " ", "200.00", " ", "WJ20180918000001(临)", "", "JH10", "JHCWZX", "000000000115000025", " ", "300.0", "1.0", " ", " ", "300.00", " "]
$.post("/api/execsaprfc", {
rfcname: "rfc_EBS接口名",
head: hd.join("\t"),
details: dt.join("\t"),
json: 0 /*xml=0*/
}, function(data) { console.log(data) });
返回结果
- xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<dataset>
<t1>
<TYPE>E</TYPE>
<ID></ID>
<NUMBER>111</NUMBER>
<MESSAGE>销售组 JHC 不存在</MESSAGE>
<LOG_NO></LOG_NO>
<LOG_MSG_NO>000000</LOG_MSG_NO>
<MESSAGE_V1></MESSAGE_V1>
<MESSAGE_V2></MESSAGE_V2>
<MESSAGE_V3></MESSAGE_V3>
<MESSAGE_V4></MESSAGE_V4>
<PARAMETER></PARAMETER>
<ROW>0</ROW>
<FIELD></FIELD>
<SYSTEM></SYSTEM>
</t1>
<t1>
<TYPE>E</TYPE>
<ID></ID>
<NUMBER>219</NUMBER>
<MESSAGE>销售凭证 没有修改</MESSAGE>
<LOG_NO></LOG_NO>
<LOG_MSG_NO>000000</LOG_MSG_NO>
<MESSAGE_V1></MESSAGE_V1>
<MESSAGE_V2></MESSAGE_V2>
<MESSAGE_V3></MESSAGE_V3>
<MESSAGE_V4></MESSAGE_V4>
<PARAMETER></PARAMETER>
<ROW>0</ROW>
<FIELD></FIELD>
<SYSTEM></SYSTEM>
</t1>
</dataset>
- json
{
"t1": [
{
"TYPE": "E",
"ID": "",
"NUMBER": "111",
"MESSAGE": "销售组 JHC 不存在",
"LOG_NO": "",
"LOG_MSG_NO": "000000",
"MESSAGE_V1": "",
"MESSAGE_V2": "",
"MESSAGE_V3": "",
"MESSAGE_V4": "",
"PARAMETER": "",
"ROW": 0,
"FIELD": "",
"SYSTEM": ""
},
{
"TYPE": "E",
"ID": "",
"NUMBER": "219",
"MESSAGE": "销售凭证 没有修改",
"LOG_NO": "",
"LOG_MSG_NO": "000000",
"MESSAGE_V1": "",
"MESSAGE_V2": "",
"MESSAGE_V3": "",
"MESSAGE_V4": "",
"PARAMETER": "",
"ROW": 0,
"FIELD": "",
"SYSTEM": ""
}
]
}