与SAP RFC连接,电脑上必须要安装SAP软件,否则会报错ActiveX
输入工单号,无法带出SAP内接口RFC信息。
确认原因为:RFC接口需求的工单参数需要在前面加两位00,例如:1000541078(10个字符)改为 001000541078(12个字符),解决办法:使用string.PadLeft(12, "0")函数,自动补全左边两位00
RFC调用方法案例:
Public SAPojb As Object
Public SAPConn As Object
Public StrSAPIP As String = ""
Public StrSAPClient As String = ""
Public StrSAPNo As String = ""
Public StrSAPAcc As String = ""
Public StrSAPPwd As String = ""
Public ObjSAPFunc As Object
Public theFunc As Object
Dim R_AUFNR As String = ""
Dim R_NUM As String = ""
Private Sub MMF02_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadSAPpara() '加载SAP
End Sub
Public Sub SAPRFCClose() '关闭SAP
SAPConn = Nothing
End Sub
Public Function LoadSAPpara() As Boolean '加载SAP
Try
Dim file As String = "c:TMISsaprfc.ini"
Dim Input As String = ""
Using sr As IO.StreamReader = IO.File.OpenText(file)
Input = sr.ReadLine()
Input = UCase(Input)
While sr.Peek > -1 Or Len(Input) > 0
If InStr(Input, "SAPIP") > 0 Then
StrSAPIP = Trim(Mid(Input, InStr(Input, "=") + 1))
End If
If InStr(Input, "SAPCLIENT") > 0 Then
StrSAPClient = Trim(Mid(Input, InStr(Input, "=") + 1))
End If
If InStr(Input, "SAPNO") > 0 Then
StrSAPNo = Trim(Mid(Input, InStr(Input, "=") + 1))
End If
If InStr(Input, "SAPACC") > 0 Then
StrSAPAcc = Trim(Mid(Input, InStr(Input, "=") + 1))
End If
If InStr(Input, "SAPPWD") > 0 Then
StrSAPPwd = Trim(Mid(Input, InStr(Input, "=") + 1))
End If
Input = sr.ReadLine()
Input = UCase(Input)
End While
End Using
Return True
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function
Public Function SAPRFCLink() As Boolean
Dim NonErr As Boolean = False
SAPojb = CreateObject("SAP.LogonControl.1")
SAPConn = SAPojb.NewConnection
Try
SAPConn.applicationserver = StrSAPIP
SAPConn.client = StrSAPClient
SAPConn.user = StrSAPAcc
SAPConn.password = StrSAPPwd
SAPConn.language = "EN"
SAPConn.CodePage = "8300"
If SAPConn.logon(0, True) <> True Then
NonErr = False
Else
NonErr = True
End If
Catch er As Exception
MsgBox(er.ToString)
End Try
Return NonErr
End Function
Private Sub txtWkNo_KeyDown(sender As Object, e As KeyEventArgs) Handles txtWkNo.KeyDown
Dim str As String = ""
Dim str2 As String = ""
Dim RNUM As Double = 0
R_AUFNR = txtWkNo.Text.Trim
If e.KeyCode = Keys.Enter Then
If SAPRFCLink() Then
MsgBox("SAP连接成功")
ObjSAPFunc = CreateObject("SAP.FUNCTIONS")
ObjSAPFunc.Connection = SAPConn
theFunc = ObjSAPFunc.add("Z_SFC_WOSMT")
theFunc.EXPORTS("P_AUFNR") = R_AUFNR.PadLeft(12, "0")
If theFunc.call Then
MsgBox("OK,RFC有回传资料")
str = theFunc.imports("R_AUFNR").value.ToString()
str2 = theFunc.imports("R_NUM").value.ToString()
RNUM = Convert.ToDouble(str2) - 2
End If
Else
MsgBox("SAP连接错误,请检查SAP")
End If
lbSAP.Text = "工单:" & R_AUFNR & ",数量:" & RNUM
SAPRFCClose()
End If
End Sub
SAPRFC.ini配置如下:
[SAPRFC]
SAPIP=10.10.10.96
SAPClient=888
SAPNo=00
SAPAcc=RFC
SAPPwd=123456