首先接到SAP PI给提供的WSDL 解析WSDL 图片看不清没时间弄 找我wx18681014349
解析方法 有两种 (利用eclipse解析 和利用myeclipse解析,注意利用myeclipse解析需要xfire jar包)
1利用eclipse 解析
首先将wsdl 文件复制到SRC后面
如下
然后创建 web service client 选择wsdl 文件
解析形成如下文件
利用这些接口类传输OA数据 代码如
这里注意要修改一下原始类
原始代码如下 有泛微的一些类信息
package derucci.com.oa.pda;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import mm.oa.com.derucci.DT_PR_Approve_Status_ReqItem;
import mm.oa.com.derucci.DT_PR_Approve_Status_Resp;
import mm.oa.com.derucci.SI_PR_Approve_Status_OutServiceLocator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.transport.Channel;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import weaver.workflow.request.RequestManager;
import com.dongbao.action.Hrutil;
import com.dongbao.util.DongBaoUtil;
import com.kingdee.action.BaseAction;
import derucci.com.oa.mm.DTPRApproveStatusReq;
import derucci.com.oa.mm.DTPRApproveStatusResp;
import derucci.com.oa.mm.Pi2oa;
import derucci.com.oa.mm.SI_PR_Approve_Status_Out;
import derucci.com.oa.mm.SI_PR_Approve_Status_OutServiceClient;
import derucci.com.oa.mm.DTPRApproveStatusReq.Item;
public class Pdachang2pi extends BaseAction{
Log log = LogFactory.getLog(Pdachang2pi.class);
public String execute(RequestInfo ri) {
Log log = LogFactory.getLog(Pdachang2pi.class);
DongBaoUtil dgUtil = new DongBaoUtil();
try{
Property[] mainprop = ri.getMainTableInfo().getProperty();
/* piutil p =new piutil();
p.getPasswordAuthentication();
p.pi_util();*/
RequestManager rm = ri.getRequestManager();
Map<String,String> mainField = dgUtil.array2map(mainprop);
// requestid=ri.getRequestid();
String requestname=ri.getRequestManager().getRequestname();
String PDA_ID=mainField.get("lx") == ""?"":mainField.get("lx");//单号;
//获取主表信息
String WERKS = mainField.get("gc") == ""?"":mainField.get("gc");//工厂
//String cgz = mainField.get("cgz")== ""?"":mainField.get("cgz");//采购组
String STA_DD = mainField.get("smrqq")== ""?"":mainField.get("smrqq");//申请日期
String STA_TM = mainField.get("smrqz")== ""?"":mainField.get("smrqz");//申购人
String END_DD = mainField.get("smsjq")== ""?"":mainField.get("smsjq");//申购人
String END_TM = mainField.get("smsjz")== ""?"":mainField.get("smsjz");//申购人
String POS_DD = mainField.get("ggsmrq")== ""?"":mainField.get("ggsmrq");//申购人
SI_ScanDateChange_OutServiceLocator local = new SI_ScanDateChange_OutServiceLocator();
SI_ScanDateChange_Out out = local.getHTTP_Port();
DT_ScanDateChange_ReqITEM[] MT_ScanDateChange_Req = new DT_ScanDateChange_ReqITEM[1];
DT_ScanDateChange_ReqITEM item = new DT_ScanDateChange_ReqITEM();
item.setEND_DD(END_DD);
item.setEND_TM(END_TM);
item.setPDA_ID(PDA_ID);
item.setPOS_DD(POS_DD);
item.setSTA_DD(STA_DD);
item.setSTA_TM(STA_TM);
item.setWERKS(WERKS);
MT_ScanDateChange_Req[0] = item;
DT_ScanDateChange_Resp resp = out.SI_ScanDateChange_Out(MT_ScanDateChange_Req);
// String stat = resp.getItem().getStatus();
String stat = resp.getITEM().getMESSAGE();
this.log.error("返回信息"+stat);
if("S".equals(stat)){
ri.getRequestManager().setMessagecontent("更新数据成功");
return Action.SUCCESS;
}else{
return Action.FAILURE_AND_CONTINUE;
}
}catch(Exception e){
log.error(" exception :",e);
e.printStackTrace();
ri.getRequestManager().setMessagecontent("修改SAP状态失败! "+e.getMessage());
return Action.FAILURE_AND_CONTINUE;
}
}
}
利用myeclipse 解析
同样是建李 web service client 选择XFire 还是ws我忘了 试试吧 在传入对方用户名密码时 的方法不同 代码会贴在下面
package com.sap.action;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import com.sap.pi.creaatepr.DTPRCreateReq;
import com.sap.pi.creaatepr.DTPRCreateResp;
import com.sap.pi.creaatepr.SI_PR_Create_Out;
import com.sap.pi.creaatepr.SI_PR_Create_OutServiceClient;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.dongbao.util.DongBaoUtil;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.transport.Channel;
import weaver.conn.RecordSet;
import weaver.formmode.setup.ModeRightInfo;
import weaver.interfaces.workflow.action.Action;
import weaver.interfaces.workflow.action.BaseAction;
import weaver.join.hrm.in.HrmResource;
import weaver.soa.workflow.request.DetailTable;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import weaver.soa.workflow.request.Row;
import weaver.workflow.form.FormManager;
import weaver.workflow.request.RequestManager;
/**
* 采购申请凭证创建
* @author huangjianjian
*
*/
public class CreatePr extends BaseAction{
Log log = LogFactory.getLog(getClass());
String mes="";
String mes1="";
String requestid="";
public String execute(RequestInfo ri){
boolean flag = false;
DTPRCreateReq data=new DTPRCreateReq();
try {
DongBaoUtil dgUtil = new DongBaoUtil();
Property[] mainprop = ri.getMainTableInfo().getProperty();
Map<String,String> mainField = dgUtil.array2map(mainprop);
requestid=ri.getRequestid();
String requestname=ri.getRequestManager().getRequestname();
String request1=mainField.get("dh") == ""?"":mainField.get("dh");//单号;
//获取主表信息
String BSART = mainField.get("BSART") == ""?"":mainField.get("BSART");//采购凭证类型
//String cgz = mainField.get("cgz")== ""?"":mainField.get("cgz");//采购组
String sqrq = mainField.get("sqrq")== ""?"":mainField.get("sqrq");//申请日期
String sgr = mainField.get("sgr")== ""?"":mainField.get("sgr");//申购人
String sqr = mainField.get("sqr")== ""?"":mainField.get("sqr");//申购人
RecordSet recordSet=new RecordSet();
recordSet.execute("select * from hrmresource where id="+sgr);
recordSet.next();
sgr=recordSet.getString("lastname");
recordSet.execute("select * from hrmresource where id="+sqr);
recordSet.next();
sgr+="-申请人:"+recordSet.getString("lastname");
String gc = mainField.get("sqrssgs")== ""?"":mainField.get("sqrssgs");//工厂
data.setTEXTHEADER(request1);
log.error(request1);
//获取明细
DetailTable[] detailTable = ri.getDetailTableInfo().getDetailTable();
DetailTable dt = null;
dt = detailTable[0];
Integer rows = dt.getRowCount();
Row row = null;
for(int i= 0;i<rows;i++){
DTPRCreateReq.REQUISITIONITEMS requisitionitems=new DTPRCreateReq.REQUISITIONITEMS();
row = dt.getRow(i);
Map<String,String> mapDetail = dgUtil.array2Row(row);
String cgz = dgUtil.getField(mapDetail,"cgz")== ""?"":dgUtil.getField(mapDetail,"cgz");//采购组
String wlz = dgUtil.getField(mapDetail,"wlz")== ""?"":dgUtil.getField(mapDetail,"wlz");//物料组
String TXZ01 = dgUtil.getField(mapDetail,"TXZ01")== ""?"":dgUtil.getField(mapDetail,"TXZ01");//物料描述
String MENGE = dgUtil.getField(mapDetail,"MENGE")== ""?"":dgUtil.getField(mapDetail,"MENGE");//数量
String MATNR = dgUtil.getField(mapDetail,"MATNR")== ""?"":dgUtil.getField(mapDetail,"MATNR");//物料编号
String kcdd = dgUtil.getField(mapDetail,"kcdd")== ""?"":dgUtil.getField(mapDetail,"kcdd");//库存地点
String danwei = dgUtil.getField(mapDetail,"danwei")== ""?"":dgUtil.getField(mapDetail,"danwei");//采购申请计量单位
String LFDAT = dgUtil.getField(mapDetail,"LFDAT")== ""?"":dgUtil.getField(mapDetail,"LFDAT");//交货日期
String PREIS = dgUtil.getField(mapDetail,"PREIS")== ""?"":dgUtil.getField(mapDetail,"PREIS");//采购需求中的价格
String cgsqlx = dgUtil.getField(mapDetail,"cgsqlx")== ""?"":dgUtil.getField(mapDetail,"cgsqlx");//采购申请类型
String xxms = dgUtil.getField(mapDetail,"xxms")== ""?"":dgUtil.getField(mapDetail,"xxms");//详细描述
String ANLN1 = dgUtil.getField(mapDetail,"ANLN1")== ""?"":dgUtil.getField(mapDetail,"ANLN1");//资产编号
String cbzx = dgUtil.getField(mapDetail,"cbzx")== ""?"":dgUtil.getField(mapDetail,"cbzx");//成本中心
if(cgsqlx.equalsIgnoreCase("0")) {
requisitionitems.setDOCTYPE("ZFY");
log.error("ZFY");
}else{
requisitionitems.setDOCTYPE("ZGZ");
log.error("ZGZ");
}
RecordSet set =new RecordSet();
set.execute("select pname from uf_purchase_select where id="+cgz);
if(set.next()) {
requisitionitems.setPURGROUP(set.getString("pname"));
log.error(set.getString("pname"));
}
requisitionitems.setSHORTTEXT(TXZ01);
log.error(TXZ01);
requisitionitems.setMATERIAL(MATNR);
log.error(MATNR);
set.execute("select pname from uf_purchase_select where id="+wlz);
if(set.next()) {
requisitionitems.setMATGRP(set.getString("pname"));
log.error(set.getString("pname"));
}
requisitionitems.setQUANTITY(MENGE);
log.error(MENGE);
set.execute("select pname from uf_purchase_select where id="+danwei);
if(set.next()) {
requisitionitems.setUNIT(set.getString("pname"));
log.error(set.getString("pname"));
}
gc="1010";
requisitionitems.setPLANT(gc);
log.error(gc);
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );
SimpleDateFormat sdf1 = new SimpleDateFormat( "yyyyMMdd" );
Date date = sdf.parse( LFDAT);
log.error(sdf1.format(date));
requisitionitems.setDELIVDATE(sdf1.format(date));
log.error(PREIS);
requisitionitems.setSTORELOC(kcdd);
requisitionitems.setCAMTBAPI(PREIS);
if(cgsqlx.equalsIgnoreCase("0")) {
requisitionitems.setACCTASSCAT("K");
log.error("K");
}else{
requisitionitems.setACCTASSCAT("A");
log.error("A");
}
requisitionitems.setPREQNAME(sgr);
log.error(sgr);
DTPRCreateReq.REQUISITIONITEMS.REQUISITIONACCOUNTASSIGNMENT requisitionaccountassignment=new DTPRCreateReq.REQUISITIONITEMS.REQUISITIONACCOUNTASSIGNMENT();
DTPRCreateReq.REQUISITIONITEMS.REQUISITIONITEMTEXT requisitionitemtext=new DTPRCreateReq.REQUISITIONITEMS.REQUISITIONITEMTEXT();
requisitionaccountassignment.setASSETNO(ANLN1);
log.error(ANLN1);
requisitionaccountassignment.setCOSTCTR(cbzx);
log.error(cbzx);
requisitionitems.getREQUISITIONACCOUNTASSIGNMENT().add(requisitionaccountassignment);
requisitionitemtext.setTEXTLINE(xxms);
requisitionitems.getREQUISITIONITEMTEXT().add(requisitionitemtext);
data.getREQUISITIONITEMS().add(requisitionitems);
}
SI_PR_Create_OutServiceClient client = new SI_PR_Create_OutServiceClient();
//create a default service endpoint
SI_PR_Create_Out service0 = client.getHTTP_Port();
Client client1=Client.getInstance(service0);
client1.setProperty(Channel.USERNAME, "POCONNECT");
client1.setProperty(Channel.PASSWORD, "Passw0rd");
DTPRCreateResp resp=service0.sI_PR_Create_Out(data);
mes1="";
for(DTPRCreateResp.Item a:resp.getItem())
{
mes1+=a.getMESSAGE()==null?"":a.getMESSAGE();
if(!a.getPREQNO().isEmpty()&&a.getTYPE().equalsIgnoreCase("S"))
{ mes+=a.getPREQNO()==null?"":a.getPREQNO()+" ";}
}
}
catch (Exception e) {
e.printStackTrace();
log.error("生成采购单失败!"+e.getMessage()+mes1);
log.error("生成采购单失败!"+e.getMessage()+mes);
ri.getRequestManager().setMessagecontent("生成采购单失败:"+e.toString());
return Action.FAILURE_AND_CONTINUE;
}
if(mes.isEmpty()){
ri.getRequestManager().setMessagecontent("生成采购单失败:"+mes1);
return Action.FAILURE_AND_CONTINUE;
}else {
RecordSet set1 =new RecordSet();
FormManager formManager = new FormManager();
String tablename = formManager.getTablename(ri.getRequestManager().getFormid());
set1.execute("update " + tablename + " set BANFN='"+mes+"' where requestid="+requestid);
log.error("生成采购单!"+mes1);
mes="";
return Action.SUCCESS;
}
}
}