编辑人 修改时间 修改内容 文档状态
张小猛 2020619 代理接口的编写 soap代理(待完善)

1. 代理接口

代理接口是指EBS系统后端请求调用第三方提供的应用程序接口,这些接口默认是不会自动调用的,需要:

1.通过浏览器JavaScript通过接口条用

2.Java定时自动调用

具体需要哪种方式,按需要确定。

1.1. 类型

  • 简单 HTTP 代理接口
  • SAP RFC 代理接口
  • web service soap 代理接口(待完善)

1.2. http请求代理

1.2.1. 接口授权(pub_weixin)

image-20190425174410727

1.2.2. 接口定义

image-20200313170415037

image-20200313155725553

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": ""
        }
    ]
}

results matching ""

    No results matching ""