Loading

VB.NET 与 SAP RFC连接问题点

与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:\TMIS\saprfc.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

posted @ 2019-11-08 14:32  云辰  阅读(365)  评论(0编辑  收藏  举报