结构:
安装NuGet包:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
using SAP.Middleware.Connector; using System.Data; namespace DFDN.SDK.ServiceInterface { public class RfcDemo { public void Loading() { RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination(GetParameters()); //连接字符串 RfcDestination SapRfcDestinationForConfig = RfcDestinationManager.GetDestination( "dad" ); //连接字符串 从App.config配置 RfcRepository SapRfcRepository = SapRfcDestination.Repository; DataTable dt = new DataTable(); //数据源 dt.Columns.Add( "DATA1" , typeof ( string )); dt.Columns.Add( "DATA2" , typeof ( string )); dt.Columns.Add( "DATA3" , typeof ( string )); IRfcFunction func = SapRfcRepository.CreateFunction( "Z_RFC_XXXX" ); IRfcTable tSAP = func.GetTable( "INPUT_TABLE" ); for ( int i = 0; i < dt.Rows.Count; i++) { string str1 = dt.Rows[i][0].ToString(); string str2 = dt.Rows[i][1].ToString(); string str3 = dt.Rows[i][2].ToString(); IRfcStructure struSAP = tSAP.Metadata.LineType.CreateStructure(); struSAP.SetValue( "str1" , str1); struSAP.SetValue( "str2" , str2); struSAP.SetValue( "str3" , str3); tSAP.Append(struSAP); } func.SetValue( "INPUT_TABLE" , tSAP); //table 参数 func.SetValue( "WERKS" , "A" ); //单个参数 func.SetValue( "STATUS" , "B" ); //单个参数 func.Invoke(SapRfcDestination); //调用 IRfcTable SAPDataTable = func.GetTable( "RETURN_TABLE" ); //获取表格结果 DataTable table = ToDataTable(SAPDataTable); //转换DataTable string result = func.GetValue( "X" ).ToString(); //获取指定返回结果 } /// <summary> /// RfcTable 转换为 DataTable /// </summary> /// <param name="myrfcTable"></param> /// <returns></returns> public DataTable ToDataTable(IRfcTable myrfcTable) { DataTable loTable = new DataTable(); int liElement; for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++) { RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement); loTable.Columns.Add(metadata.Name); } foreach (IRfcStructure Row in myrfcTable) { DataRow ldr = loTable.NewRow(); for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++) { RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement); ldr[metadata.Name] = Row.GetString(metadata.Name); } loTable.Rows.Add(ldr); } return loTable; } /// <summary> /// SAP RFC 连接信息设置 /// </summary> /// <returns></returns> public RfcConfigParameters GetParameters() { RfcConfigParameters parms = new RfcConfigParameters(); parms.Add(RfcConfigParameters.AppServerHost, "192.168.0.114" ); //SAP主机IP parms.Add(RfcConfigParameters.SystemNumber, "01" ); //SAP实例 parms.Add(RfcConfigParameters.User, "RFC_EDI" ); //用户名 parms.Add(RfcConfigParameters.Password, "init1" ); //密码 parms.Add(RfcConfigParameters.Client, "300" ); // Client parms.Add(RfcConfigParameters.Language, "ZH" ); //登陆语言 parms.Add(RfcConfigParameters.PoolSize, "10" ); parms.Add(RfcConfigParameters.IdleTimeout, "600" ); parms.Add(RfcConfigParameters.Name, "DAP" ); return parms; } } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<? xml version = "1.0" ?> < configuration > < configSections > < sectionGroup name = "SAP.Middleware.Connector" > < sectionGroup name = "ClientSettings" > < section name = "DestinationConfiguration" type = "SAP.Middleware.Connector.RfcDestinationConfiguration,sapnco" /> </ sectionGroup > </ sectionGroup > </ configSections > < SAP.Middleware.Connector > < ClientSettings > < DestinationConfiguration > < destinations > < add NAME = "dad" USER = "ddac" PASSWD = "qwe" CLIENT = "110" SYSNR = "00" ASHOST = "192.168.0.111" LANG = "ZH" GROUP = "PUBLIC" MAX_POOL_SIZE = "10" IDLE_TIMEOUT = "600" ></ add > </ destinations > </ DestinationConfiguration > </ ClientSettings > </ SAP.Middleware.Connector > </ configuration > |
以上就是C# 如何调用SAP RFC的详细内容,更多关于C# 调用SAP RFC的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/Liyuting/p/14132187.html