用NCO调用RFC

需要的工具:
开发工具:Microsoft Visual Studio 2010 C#环境
NCO3.0:sapnco30dotnet40P_8-20007347.zip(VS2010环境下必须这个版本)
可到此下载:http://download.csdn.net/detail/szlaptop/4635144
数据库:ORACLE10g

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

第一步:在SAP里自建表
进入SAP界面:使用T- CODE:SE11 打开建表界面:表名为:ZCHANNEL_MESSAG

用NCO调用RFC_第1张图片
Paste_Image.png

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


用NCO调用RFC_第2张图片

第二步:针对自建表ZCHANNEL_MESSAG创建RFC。
使用T- CODE:SE37 打开建RFC界面:命名为:ZCHANNEL_RFC_MESSAGE

用NCO调用RFC_第3张图片

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

用NCO调用RFC_第4张图片
Paste_Image.png

在EXPORT里设置出参R_SUBRC.

用NCO调用RFC_第5张图片
Paste_Image.png

在SOURCE CODE里写代码:


用NCO调用RFC_第6张图片

[csharp] view plain copy

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自建表字段对应。

[sql] view plain copy

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

用NCO调用RFC_第7张图片
Paste_Image.png

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

用NCO调用RFC_第8张图片
Paste_Image.png

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

用NCO调用RFC_第9张图片
Paste_Image.png

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

用NCO调用RFC_第10张图片
Paste_Image.png

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

用NCO调用RFC_第11张图片
Paste_Image.png

[html] view plain copy









  
      
          
              
                  
              
          
      
  

  
      
  

双击刚拖动的Button1按钮进入代码编辑器:
手工引用:using SAP.Middleware.Connector;

用NCO调用RFC_第12张图片
Paste_Image.png

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

用NCO调用RFC_第13张图片
Paste_Image.png

接下来看代码:

[csharp] view plain copy

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);  

执行结果:

用NCO调用RFC_第14张图片
Paste_Image.png

你可能感兴趣的:(用NCO调用RFC)