需要的工具:
開(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
自建如下表:(詳細(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葡兑。
在EXPORT里設(shè)置出參R_SUBRC.
在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
拖動(dòng)一個(gè)按鈕控件到主窗體:
在解決方案資源管理器搭独,引用里引用NCO3.0的sapnco.dll和sapnco_utils
右擊項(xiàng)目名稱WindowsFormsApplication2牙肝,點(diǎn)擊“屬性”配椭,打開(kāi)屬性面板:將目標(biāo)框架里默認(rèn)的.NET Framework 4 Client Profile 改為:.NET Framework 4。(很重要)
在解決方案資源管理器里打開(kāi)配置文件APP.CONFIG,配置如下:
[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;
因?yàn)槭褂玫氖?a target="_blank" rel="nofollow">oracle數(shù)據(jù)庫(kù),所以也必須引用oracle10g的System.Data.OracleClient.dll瘾境,只要安裝了oracle10g客戶端
usingSystem.Data.OracleClient;
接下來(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é)果: