用NCO調(diào)用RFC

需要的工具:
開(kāi)發(fā)工具:Microsoft Visual Studio 2010 C#環(huán)境
NCO3.0:sapnco30dotnet40P_8-20007347.zip(VS2010環(huán)境下必須這個(gè)版本)
可到此下載:http://download.csdn.net/detail/szlaptop/4635144
數(shù)據(jù)庫(kù):ORACLE10g

示例目的:將Oracle的某表數(shù)據(jù)通過(guò)RFC插入SAP自建表。

第一步:在SAP里自建表
進(jìn)入SAP界面:使用T- CODE:SE11 打開(kāi)建表界面:表名為:ZCHANNEL_MESSAG

Paste_Image.png

自建如下表:(詳細(xì)建表過(guò)程略),針對(duì)自身業(yè)務(wù),命名關(guān)鍵字段。



第二步:針對(duì)自建表ZCHANNEL_MESSAG創(chuàng)建RFC。
使用T- CODE:SE37 打開(kāi)建RFC界面:命名為:ZCHANNEL_RFC_MESSAGE


RFC如下表:(建立RFC詳細(xì)過(guò)程略),在TABLE參數(shù)里設(shè)置IT_CHANNELLIKE 剛才自建的表ZCHANNEL_MESSAG。

Paste_Image.png

在EXPORT里設(shè)置出參R_SUBRC.

Paste_Image.png

在SOURCE CODE里寫(xiě)代碼:


[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這邊的工作已經(jīng)就緒。

第三步:接下來(lái),我們?cè)趏racle10g下建表WW_TRANS:與SAP自建表字段對(duì)應(yīng)。

[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下完成:

打開(kāi)VS2010新建一個(gè)WINDOWS窗體應(yīng)用程序:WindowsFormsApplication2

Paste_Image.png

拖動(dòng)一個(gè)按鈕控件到主窗體:

Paste_Image.png

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

Paste_Image.png

右擊項(xiàng)目名稱(chēng)WindowsFormsApplication2,點(diǎn)擊“屬性”,打開(kāi)屬性面板:將目標(biāo)框架里默認(rèn)的.NET Framework 4 Client Profile 改為:.NET Framework 4。(很重要)

Paste_Image.png

在解決方案資源管理器里打開(kāi)配置文件APP.CONFIG,配置如下:

Paste_Image.png

[html] view plain copy

<?xmlversionxmlversion="1.0"?>
<configuration>
<configSections>
<sectionGroupnamesectionGroupname="SAP.Middleware.Connector">
<sectionGroupnamesectionGroupname="ClientSettings">
<sectionnamesectionname="DestinationConfiguration"type="SAP.Middleware.Connector.RfcDestinationConfiguration,sapnco"/>
</sectionGroup>
</sectionGroup>
</configSections>

<SAP.Middleware.Connector>  
    <ClientSettings>  
        <DestinationConfiguration>  
            <destinations>  
                <addNAMEaddNAME="DEV"USER="WUWEI"PASSWD="WUWEI"CLIENT="500"  
                     LANG="EN"ASHOST="198.16.0.66"SYSNR="00"  
                     MAX_POOL_SIZE="10"IDLE_TIMEOUT="10"/>  
            </destinations>  
        </DestinationConfiguration>  
    </ClientSettings>  
</SAP.Middleware.Connector>  

<startup>  
    <supportedRuntimeversionsupportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.0"/>  
</startup>  

</configuration>

雙擊剛拖動(dòng)的Button1按鈕進(jìn)入代碼編輯器:
手工引用:using SAP.Middleware.Connector;

Paste_Image.png

因?yàn)槭褂玫氖?a target="_blank" rel="nofollow">oracle數(shù)據(jù)庫(kù),所以也必須引用oracle10g的System.Data.OracleClient.dll,只要安裝了oracle10g客戶端
usingSystem.Data.OracleClient;

Paste_Image.png

接下來(lái)看代碼:

[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); //執(zhí)??行D函?¥數(shù)oy  
        string RETURNStr = myfun.GetString("R_SUBRC");  
        MessageBox.Show(RETURNStr);  

執(zhí)行結(jié)果:

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 【2017年最新】? iOS面試題及答案 設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式,并簡(jiǎn)要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)...
    紫色冰雨閱讀 624評(píng)論 0 1
  • MVC 具有什么樣的優(yōu)勢(shì),各個(gè)模塊之間怎么通信,比如點(diǎn)擊 Button 后 怎么通知 Model?[iOS] MV...
    Lost_693d閱讀 157評(píng)論 0 1
  • 酷暑的余威還在,已是過(guò)渡 天漸涼,心不躁 豐收的期盼日濃 不得已的守舊,最是無(wú)奈 程序化的陳詞爛調(diào) 無(wú)以觸及季節(jié)的...
    橘子sandglass閱讀 198評(píng)論 0 0
  • 這是在OC中利用數(shù)組和字典的相互套用解析的,附一張思維圖。
    Miss_差不多閱讀 794評(píng)論 0 0
  • 1 小時(shí)候,媽媽指著律政佳人里面的白骨精曹穎對(duì)KK說(shuō),做個(gè)學(xué)霸長(zhǎng)大后就可以變成這個(gè)樣子。于是,她努力地學(xué)習(xí),以一種...
    bnngoo冰狗閱讀 187評(píng)論 0 0