- 浏览: 458245 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yuan_bin1990:
您好,请问下demo如何运行啊,准备研究研究,但不知道入口啊。 ...
ssh2(struts2+spring2.5+hibernate3.3)自动生成代码程序 -
luyulong:
[b][/b][i][/i][ ...
jQuery进度条插件 jQuery progressBar -
txin0814:
mark..
读取文件目录 -
vurses:
[align=center][color=red][size= ...
include 与 jsp:include区别 -
Roshan2:
http://lijiejava.iteye.com/blog ...
Spring AOP 入门实例
JAVA与SAP数据交互的方式总结
RFC方式:Java程序直接通过RFC访问SAP的对象(或称函数,可能叫法不对)
SAP提供了BAPI(Business Application Programming Interface),BAPI是SAP系统对外提供的一系列接口,主要是使第三方程序通过这些接口来使用SAP,从而方便客户定制某些程序.VB,Java,C,C++等都可以通过BAPI来访问SAP.BAPI是通过R/3系统上的RFC(Remote function call)功能来实现的.因为BAPI的强大功能作为基础,SAP就完全可以选择Java在CRM上加强各种功能,比如可以用Java快速开发一个实现特定功能的客户端。针对Java,SAP也提供了一个API叫Java Connector(JCo),可以使用它方便的调用BAPI提供的接口。
举例说明 :在我们的某一个项目中,需要每个月从R3取出供应商的寄售和非寄售汇总结算数据和明细数据,展现在供应商信息平台上,供供应商开发票和财务部付款进行结算,那么可以做一个定时器,通过RFC在每个月的一号0点将结算数据取出。
private final static String FUNCTION_GET_NONVMI_DATA = "ZPUR_DATA_GET_TMP1";
/**
* 处理接口参数
*/
private JCO.ParameterList getNonVmiTableParameterList(
JCO.Client aConnection, String bukr, String month, String start,
String end, String lifnr) {
IRepository aRepository = new JCO.Repository("SAPRep", aConnection);
IFunctionTemplate functionTemplate = aRepository
.getFunctionTemplate(FUNCTION_GET_NONVMI_DATA);
logger.debug("FunctionTemplate=" + functionTemplate);
JCO.Function function = new JCO.Function(functionTemplate);
JCO.ParameterList input = function.getImportParameterList();
input.getField("BUKRS").setValue(bukr);
//input.getField("SPMON").setValue(month);
input.getField("LIFNR").setValue(lifnr);
input.getField("ZBUDATB").setValue(start);
input.getField("ZBUDATN").setValue(end);
logger.debug("ImportParameterList=" + input);
aConnection.execute(function);
JCO.ParameterList tableParams = function.getTableParameterList();
return tableParams;
}
2、Idoc方式
适用于中间文件的IDoc定义格式,是SAP企业系统软件的应用程序之间或SAP应用程序与外部程序之间电子数据交换用的标准数据格式。IDoc是SAP的应用程序连接系统的数据转换工具。IDoc用于数据异步处理:每个IDoc生成独立的文本文件,无需连接中央数据库,就可以传送给要求数据的工作平台。SAP的另一个系统业务应用程序接口则用于数据同步处理。 一个大公司的网络操作环境很可能需要各地分公司的电脑都能与公司的主数据库连接。这些电脑很可能是用不同的硬件或操作系统平台。因为IDoc对数据进行了压缩,所以它无需变换格式就能在不同的操作系统上使用。 IDoc类型指定不同种类的数据,比如说购买订单或发票,它们可能被划分为更细小的数据种类,即信息类型。更详细的分类意味着一个IDoc类型只能储存某一特定交易所需的数据,这样既提高了工作效率又降低了资源损耗。 在事务处理过程中,IDoc随时会生成。例如,在运货交易过程中,可能会产生打印货运清单所需数据的IDoc。客户在SAP系统执行完一项交易后,在数据传送过程中和经过ALE通讯层时,一个或多个IDoc会生成。通讯层执行远程功能调用,使用由客户模式规定得端口定义和RFC介面定义。IDoc的接收者可能为R/3、R/2或一些外部系统。
在采用IDOC方式的时候,可以采用IDOC落地或不落地的方式,一般只有在跟踪测试或做传输记录的时候的采用IDOC落地的方式,一般其他情况基本上都是采用不落地的方式。
public class JcoIdocServer extends JCoIDoc.Server {
private final Log logger = LogFactory.getLog(JcoIdocServer.class);
public JcoIdocServer(java.util.Properties properties,
IRepository jcoRepository, IDoc.Repository idocRepository) {
super(properties, jcoRepository, idocRepository);
}// constructor MyIDocServer
/**
* Overridden method of JCoIDoc.Server. Function requests that do not
* contain IDocs will be handled here. These requests will be stored as
* XML file in the incoming path. No other action will be done. The
* return values won't be filled and no exception will be thrown to the
* caller.
*/
protected void handleRequest(JCO.Function function) {
logger.error("error:incoming function request '"
+ function.getName() + "',but this should be not happen.");
}// method handleRequest
/**
* Overridden method of JCoIDoc.Server. Function requests that contain
* IDocs will be handled here. All IDocs will be stored as XML files in
* the incoming path. Additionally, IDocs that are part of an ORDERS
* message will be processed specifically. Some relevant information is
* extracted from these IDocs and will be stored in a text file in the
* incoming path.
*/
protected void handleRequest(IDoc.DocumentList documentList) {
logger.debug("Incoming IDoc list request containing "
+ documentList.getNumDocuments() + " documents...");
IDoc.DocumentIterator iterator = documentList.iterator();
IDoc.Document doc = null;
while (iterator.hasNext()) {
doc = iterator.nextDocument();
logger.debug("Processing document no. " + doc.getIDocNumber()
+ "...");
JcoIdocAudit jcoIdocAudit = new JcoIdocAudit();
jcoIdocAudit.setTabnam(doc.getTableStructureName());
jcoIdocAudit.setMandt(doc.getClient());
jcoIdocAudit.setDocnum(doc.getIDocNumber());
jcoIdocAudit.setDocrel(doc.getIDocSAPRelease());
jcoIdocAudit.setStatus(doc.getStatus());
jcoIdocAudit.setDirect(doc.getDirection());
jcoIdocAudit.setOutmod(doc.getOutputMode());
jcoIdocAudit.setExprss(doc.getExpressFlag());
jcoIdocAudit.setTest(doc.getTestFlag());
jcoIdocAudit.setIdoctyp(doc.getIDocType());
jcoIdocAudit.setCimtyp(doc.getIDocTypeExtension());
jcoIdocAudit.setMestyp(doc.getMessageType());
jcoIdocAudit.setMescod(doc.getMessageCode());
jcoIdocAudit.setMesfct(doc.getMessageFunction());
jcoIdocAudit.setStd(doc.getEDIStandardFlag());
jcoIdocAudit.setStdvrs(doc.getEDIStandardVersion());
jcoIdocAudit.setStdmes(doc.getEDIMessageType());
jcoIdocAudit.setSndpor(doc.getSenderPort());
jcoIdocAudit.setSndprt(doc.getSenderPartnerType());
jcoIdocAudit.setSndpfc(doc.getSenderPartnerFunction());
jcoIdocAudit.setSndprn(doc.getSenderPartnerNumber());
jcoIdocAudit.setSndsad(doc.getSenderAddress());
jcoIdocAudit.setSndlad(doc.getSenderLogicalAddress());
jcoIdocAudit.setRcvpor(doc.getRecipientPort());
jcoIdocAudit.setRcvprt(doc.getRecipientPartnerType());
jcoIdocAudit.setRcvpfc(doc.getRecipientPartnerFunction());
jcoIdocAudit.setRcvprn(doc.getRecipientPartnerNumber());
jcoIdocAudit.setRcvsad(doc.getRecipientAddress());
jcoIdocAudit.setRcvlad(doc.getRecipientLogicalAddress());
jcoIdocAudit.setCredat(doc.getCreationDateAsString());
jcoIdocAudit.setCretim(doc.getCreationTimeAsString());
jcoIdocAudit.setRefint(doc.getEDITransmissionFile());
jcoIdocAudit.setRefgrp(doc.getEDIMessageGroup());
jcoIdocAudit.setRefmes(doc.getEDIMessage());
jcoIdocAudit.setArckey(doc.getArchiveKey());
jcoIdocAudit.setSerial(doc.getSerialization());
jcoIdocAuditManager.create(jcoIdocAudit);
String[] result = new String[] {
JcoIdocAudit.OPERATION_FAILURE, "未知错误" };
String msgType = doc.getMessageType();
logger.debug("Processing message of type '" + msgType + "'...");
if ("MATMAS".equals(msgType)) {
logger.debug("idocManager.processMATMAS(doc),msgType="
+ msgType);
logger.debug("idocManager=" + idocManager);
result = idocManager.processMATMAS(doc);
} else {
logger.debug("invalid msgType:" + msgType);
return;
}
jcoIdocAudit.setOpcod(result[0]);
jcoIdocAudit.setOpmsg(result[1]);
jcoIdocAuditManager.update(jcoIdocAudit);
}
}// method handleRequest
/**
* The following 4 methods for transaction management are not
* implemented here in this sample program. For a description on how to
* implement them in real production scenarios please see the JCo API
* specification for the JCO.Server class.
*/
protected boolean onCheckTID(String tid) {
return true;
}// method onCheckTID
protected void onConfirmTID(String tid) {
}// method onConfirmTID
protected void onCommit(String tid) {
}// method onCommit
protected void onRollback(String tid) {
}// method onRollback
@Override
public String toString() {
return "gwhost=" + this.getGWHost() + ";gwserv=" + this.getGWServ()
+ ";progid=" + this.getProgID();
}
}
3、XI方式
XI 的集成又可以分为两个层次,第一个层次称为Integration Broker,以消息的方式进行的数据的交换;另外一个层次是 BPM,即业务流程管理。
在 XI 中,数据(可以使一条记录,比如单个的物料主数据;也可以是多条记录,比如含主单明细的供应商主数据)从某一个业务系统通过 XI 发送到另外一个业务系统,站在业务系统的角度,前者称为 Sender,后者称为 Receiver 。
适配器(Adapter)进行 XI-XML 格式与业务系统的特定类型的数据格式之间的转换。依据业务系统的数据格式的不同,适配器可以分为多种类型,比如 SOAP Adapter, JDBC Adapter, File Adapter, RFC Adapter 和 IDoc Adapter 等。通常说的实现方式,譬如 SOAP+RFC,是指Sender 与 XI 之间使用 SOAP Adapter,XI 与 Receiver 之间使用 RFC Adapter。
在我们其中的一个项目中,是java做一个接口部署为Web service,然后由XI通过这个web service向java程序输入相应数据
评论
你们的web servcie是用哪个技术框架实现的?是否部署到sap portal上的吗?
发表评论
-
在 Message Broker中使用 SAP JCO 连接 SAP 系统
2011-08-10 11:02 2119http://www.ibm.com/developerwor ... -
在Java中调用BAPI或RFC(转)
2011-08-10 10:55 2760JCo是一个高性能的,基于JNI的中间件,它实现了SAP的RF ... -
BW增量更新的理解(时间戳)
2011-08-09 17:53 1720在BW中,存在两种数据抽取方式,完全更新与增量更新,完全更 ... -
SAP BW 邮件发送监控策略
2011-08-09 17:53 1573SAP BW 邮件发送监控策略 ... -
BW与ECC系统连接设置
2011-08-09 17:51 2352第一步:分配逻辑系统 SCC4先查看逻辑系统->S ... -
如何查找DataSource和table的mapping?
2011-08-09 17:48 1535相信,大家在使用BI Content的时候,经常需要查找Dat ... -
Delta中不得不看的几个表
2011-08-09 17:47 855Delta中不得不看的几个表: RODELTAMT 说明每 ... -
BW中如何进行数据监控?
2011-08-04 19:12 1109这周轮到我值班,要凌 ... -
总结InfoCube的优势分析及维度选择技巧
2011-08-04 17:58 767一直以来,infocube都是一个很纠结的东西。 作为 ... -
总结InfoCube的优势分析及维度选择技巧
2011-08-04 17:55 1079一直以来,infocube都是一个很纠结的东西。 作为 ... -
BW:监控 TCODE
2011-08-04 17:38 1084SM21: 检查系统日誌 ST22: abap DUMP ... -
BW:对于非法字符的控制
2011-08-04 17:35 1092其实这也是个老生常 ... -
BW学习——权限
2011-08-02 21:32 1347根据顾问的要求,学习了BW权限。要点如下: 1,BW的权 ... -
偶尔会被人问到的Cube的几个数字
2011-08-02 21:05 8611. 事实表:最多能够容纳233个key figures ... -
SAP学习日志--SAP中常用且重要的数据库表
2011-08-02 21:00 1477MARA - Material Master: General ... -
BW数据源深入研究【转自WKingChen的博客】
2011-08-02 19:21 1609DataSource是BW中非常重要的部分,一个合格的BW顾问 ... -
SAP BW 例程(Routine)【开始例程、关键值或特性的例程、结束例程】
2011-08-01 13:42 3661定义 可以使用例程定义关键值或特性的复杂的转换规则. ... -
BW之R3数据源及PSA
2011-07-31 15:23 2457BW数据源主要有R3、文件 ... -
理解BW数据模型 - DSO模型
2011-07-31 13:55 2144DSO的用法有很多,比 ... -
所有归类于 ‘SAP BW’ 分类的日志
2011-07-31 13:35 5777BW:SAP STMS配置 1、SM59,删 ...
相关推荐
idoc 和 bapi 和 rfc 之间的区别,idoc是系统间利用message传递,不涉及底层函数调用,idoc的处理方式是用edi来执行的.
SAP ABAP与JAVA之间通过RFC传递数据实例
JAVA和SAP通信用到的jar包,sapjco3.jar sapidoc3.jar sapidocjco.jar sapjco.jar librfc32.dll sapjcorfc.dll都包含在内,下载这一个 IDoc和RFC方式 都足够了,需要的dll文件也是全的
Java 调用 SAP RFC 案例,附博客地址,SAP RFC开发一步一步 http://blog.csdn.net/iberr/article/details/40895453
包括示例代码,代码说明,所需要的资源(sapjco.jar)文件。
PI IDOC & RFC & ABAP Proxy三种适配器方案对比,关于PI的3种不同方案的对比,还是比较清晰不错的。
非常实用的例子,一看就会,最近使用java连接RFC,把这个例子保存,以后方便查看。
“Sap RFC联调测试工具”是用于第三方平台连接SAP RFC进行预先测试,在第三方平台未开发好程序,而进行预先联调测试已经开发好的RFC接口。也可以用来ABAP开发者在开发好RFC并且用SAP的SE37测试无误之后,进行第三方...
SAP Net调用SAP RFC接口读取数据RFC
Java 使用JCO远程调用SAP RFC java 连接示例 JCO Linux 下安装详细步骤配置 JCO windows下安装详细步骤及配置 JCO linux windwos 所用到地包文件
java连接sap RFC函数 所需文件 包含sapjco3.jar sapjco.jar sapjco3.dll
Java 调用SAP的 RFC 接口源码,附带 jco3.0 的动态链接库。
.netcore项目sap的rfc调用所需的sap组件。.netcore调用rfc需要使用SapNwRfc,开发环境需要SAP NetWeaver RFC Library 7.50 SDK引用。SapNwRfc使用请参考:https://github.com/huysentruitw/SapNwRfc
注意看清标题,是用来测试RFC接口的工具,不是给你模拟发布一个RFC接口的工具
DELPHI 调用SAP RFC 文档, 包含delphi调用sap rfc函数的代码
java调用sap通用工具类,支持window和linux; 使用步骤: 1。拷贝jar和 dll或者 so文件到项目的lib目录下 2.。初始化DefaultSAPService 3。调用方式为 defaultSAPService.execute("funcitionName", req, Resp.class)...
Java掉sap RFC
ASP.NET连接SAP 调用RFCASP.NET连接SAP 调用RFC
python连接sap需要的 sdk(SAP netweaver rfc)
SAP官方SDK Windows Server on IA32 32bit