oracle 调用sap.rfc,一步一步教你用SAP NCO3.0调用RFC(菜鸟必看)

一步一步教你用NCO调用RFC(菜鸟必看)

需要的工具:

开发工具:Microsoft Visual Studio 2010 C#环境

NCO3.0:sapnco30dotnet40P_8-20007347.zip(VS2010环境下必须这个版本)

数据库:ORACLE10g

示例目的:将oracle的某表数据通过RFC插入SAP自建表。

第一步:在SAP里自建表

进入SAP界面:使用T- CODE:SE11 打开建表界面:表名为:ZCHANNEL_MESSAG

1349924722_9563.png

自建如下表:(详细建表过程略),针对自身业务,命名关键字段。

1349924722_3004.png

第二步:针对自建表ZCHANNEL_MESSAG创建RFC。

使用T- CODE:SE37 打开建RFC界面:命名为:ZCHANNEL_RFC_MESSAGE

1349924722_9597.png

RFC如下表:(建立RFC详细过程略),在TABLE参数里设置IT_CHANNELLIKE 刚才自建的表ZCHANNEL_MESSAG。

1349924722_3020.png

在EXPORT里设置出参R_SUBRC.

1349924737_4181.png

在SOURCE CODE里写代码:

1349924737_4001.png

IF IT_CHANNEL[] IS NOT INITIAL.

MODIFY ZCHANNEL_MESSAG FROM TABLE IT_CHANNEL[].

IF SY-SUBRC = 0.

R_SUBRC = 'OK'.

ENDIF.

ENDIF.

ENDFUNCTION.

到此在SAP这边的工作已经就绪。

第三步:接下来,我们在oracle10g下建表WW_TRANS:与SAP自建表字段对应。

create table WW_TRANS

(

WW_TXDATE VARCHAR2(50),

WW_PLUID VARCHAR2(50),

WW_QTYSOLD VARCHAR2(1000),

WW_AMOUNT VARCHAR2(50),

WW_TELEPHONE VARCHAR2(50)

)

第四步:剩下的都在VS2010下完成:

打开VS2010新建一个WINDOWS窗体应用程序:WindowsFormsApplication2

1349924749_9794.png

拖动一个按钮控件到主窗体:

1349924749_1256.png

在解决方案资源管理器,引用里引用NCO3.0的sapnco.dll和sapnco_utils

1349924749_2930.png

右击项目名称WindowsFormsApplication2,点击“属性”,打开属性面板:将目标框架里默认的.NET Framework 4 Client Profile 改为:.NET Framework 4。(很重要)

1349924762_7128.png

在解决方案资源管理器里打开配置文件APP.CONFIG,配置如下:

1349924762_1555.png

LANG="EN"ASHOST="198.16.0.66"SYSNR="00"

MAX_POOL_SIZE="10"IDLE_TIMEOUT="10"/>

双击刚拖动的Button1按钮进入代码编辑器:

手工引用:using SAP.Middleware.Connector;

1349924763_7637.png

因为使用的是oracle数据库,所以也必须引用oracle10g的System.Data.OracleClient.dll,只要安装了oracle10g客户端

usingSystem.Data.OracleClient;

1349924773_6232.png

接下来看代码:

OracleDataReader reader = sqlCmd.ExecuteReader();

//读¨¢取¨?配?置?文?件t信?息¡é,ê?建¡§立¢¡é与®?SAP连¢?接¨®

RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination("DEV");

RfcRepository SapRfcRepository =SapRfcDestination.Repository;

// Create and invhuoke function moduleZCHANNEL_RFC_MESSAGE

IRfcFunction myfun =SapRfcRepository.CreateFunction("ZCHANNEL_RFC_MESSAGE");

// Set some input values for the structure.

IRfcStructure import = null;

IRfcTable table = myfun.GetTable("IT_CHANNEL");

while (reader.Read())

{

import = SapRfcRepository.GetStructureMetadata("ZCHANNEL_MESSAG").CreateStructure();

import.SetValue("WW_TXDATE",reader.GetString(0));

import.SetValue("WW_PLUID",reader.GetString(1));

import.SetValue("WW_QTYSOLD",reader.GetString(2));

import.SetValue("WW_AMOUNT",reader.GetString(3));

import.SetValue("WW_TELEPHONE",reader.GetString(4));

table.Insert(import);

}

myfun.Invoke(SapRfcDestination); //执¡ä行D函¡¥数ºy

string RETURNStr = myfun.GetString("R_SUBRC");

MessageBox.Show(RETURNStr);

执行结果:

1349924774_1565.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值