263 lines
12 KiB
VB.net
263 lines
12 KiB
VB.net
Imports ERPConnect
|
|
Imports ERPConnect.Utils
|
|
|
|
Public Class ClassSAP
|
|
Public Shared SAPConnectionString
|
|
Public Shared SAP_CONNECTION As New R3Connection()
|
|
|
|
Private Shared _NewDatatable As DataTable
|
|
Public Shared Function ConnectionInit(Host As String, SysNumber As String, Username As String, PW As String, Client As String, Lang As String)
|
|
Try
|
|
LOGGER.Debug("")
|
|
LOGGER.Debug("SAP Connect started:")
|
|
SAPConnectionString = String.Format("USER={0} LANG={1} CLIENT={2} SYSNR={3} ASHOST={4} PASSWD={5}", Username, Lang, Client, SysNumber, Host, PW)
|
|
Dim con As New R3Connection()
|
|
ERPConnect.LIC.SetLic("W86DWC992C")
|
|
LOGGER.Debug("SAP Connectionstring: " & SAPConnectionString)
|
|
con.Open(SAPConnectionString)
|
|
SAP_CONNECTION.Open(SAPConnectionString)
|
|
LOGGER.Debug("SAP-Connection created!")
|
|
LOGGER.Debug("")
|
|
Return True
|
|
Catch ex As Exception
|
|
MsgBox("Error in SAP ConnectionInit: " & ex.Message, MsgBoxStyle.Critical)
|
|
LOGGER.Warn("Error in SAP ConnectionInit: " & ex.Message)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Public Shared Function FuBa_Returndatatable_Seperated(FuBaName As String, SplitCharacter As String, Optional RowLimit As Integer = 0)
|
|
Try
|
|
Dim RESULT_TABLE As DataTable = New DataTable
|
|
|
|
LOGGER.Debug("Get data from FuBa-Function")
|
|
Dim func As RFCFunction
|
|
Try
|
|
func = SAP_CONNECTION.CreateFunction(FuBaName)
|
|
LOGGER.Debug("func.Execute")
|
|
func.Execute()
|
|
LOGGER.Debug("function was executed")
|
|
Catch ex As Exception
|
|
LOGGER.Warn("Unexpected Error in Create SAP Function: " & ex.Message)
|
|
MsgBox("Error in Create SAP Function: " & ex.Message, MsgBoxStyle.Critical)
|
|
Return Nothing
|
|
End Try
|
|
Dim FUNCT_ROW_COUNT As Integer = 1
|
|
Dim RowMaskresult As String = ""
|
|
Try
|
|
LOGGER.Debug("Checking FunctionExecute")
|
|
'Den ersten Wert ausgeben lassen um die Spalten zu splitten
|
|
|
|
For Each row As RFCStructure In func.Tables("T_INDEX").Rows
|
|
Try
|
|
If row.Item(1).ToString.Contains(SplitCharacter) Then
|
|
RowMaskresult = row.Item(1).ToString
|
|
LOGGER.Debug("RowMask result: " & RowMaskresult)
|
|
FUNCT_ROW_COUNT = 2
|
|
End If
|
|
Catch ex As Exception
|
|
RowMaskresult = "ErrorInGetSeperatedResult: " & ex.Message
|
|
End Try
|
|
If FUNCT_ROW_COUNT = 2 Then Exit For
|
|
Next
|
|
Catch ex As Exception
|
|
LOGGER.Warn("Unexpected Error in Checking FunctionExecute: " & ex.Message)
|
|
MsgBox("Error in Checking FunctionExecute: " & ex.Message, MsgBoxStyle.Critical)
|
|
SAP_CONNECTION.Close()
|
|
Return Nothing
|
|
End Try
|
|
FUNCT_ROW_COUNT = 1
|
|
Dim ColCount As Integer
|
|
If SplitCharacter <> "" And RowMaskresult.Contains(SplitCharacter) Then
|
|
Try
|
|
LOGGER.Debug("Define Datatable with SplitCharacter method")
|
|
Dim split() = RowMaskresult.Split(SplitCharacter)
|
|
If split.Length > 0 Then
|
|
ColCount = split.Length - 1
|
|
CURRENT_COL_COUNT = ColCount
|
|
|
|
LOGGER.Debug("ColCount: " & ColCount.ToString)
|
|
LOGGER.Debug("Split-Results: ")
|
|
For Each s As String In split
|
|
LOGGER.Debug(" # " & s)
|
|
Next
|
|
|
|
For x = 0 To ColCount
|
|
' Declare DataColumn and DataRow variables.
|
|
Dim column As DataColumn
|
|
column = New DataColumn()
|
|
column = New DataColumn()
|
|
column.DataType = Type.GetType("System.String")
|
|
column.ColumnName = "Column " & x.ToString
|
|
RESULT_TABLE.Columns.Add(column)
|
|
Next
|
|
LOGGER.Debug("Datatable Columns after Split created")
|
|
' Create new DataRow objects and add to DataTable.
|
|
'Jetzt die Zeilen der Function durchlaufen
|
|
For Each row As RFCStructure In func.Tables("T_INDEX").Rows
|
|
Dim new_row As DataRow
|
|
If RowLimit <> 0 Then
|
|
If RowLimit = FUNCT_ROW_COUNT Then
|
|
LOGGER.Debug("RowCount limited to" & RowLimit.ToString & " rows. Exit SAP Function")
|
|
Exit For
|
|
End If
|
|
End If
|
|
new_row = RESULT_TABLE.NewRow()
|
|
Dim Rowresult As String = row.Item(1).ToString
|
|
If Rowresult.Contains(SplitCharacter) Then
|
|
Dim RowSplit() = Rowresult.Split(SplitCharacter)
|
|
Dim col_index = 0
|
|
'Jetzt die Spaltenwerte in die NewRow eintragen
|
|
For x = 0 To ColCount
|
|
new_row(x) = RowSplit(x)
|
|
Next
|
|
FUNCT_ROW_COUNT += 1
|
|
RESULT_TABLE.Rows.Add(new_row)
|
|
End If
|
|
Next
|
|
LOGGER.Debug("RowCount FuBa: " & RESULT_TABLE.Rows.Count.ToString)
|
|
Return RESULT_TABLE
|
|
Else
|
|
Return Nothing
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Warn("Unexpected Error in Create Datatable with split-method: " & ex.Message)
|
|
MsgBox("Unexpected Error in Create Datatable with split-method: " & ex.Message, MsgBoxStyle.Critical)
|
|
SAP_CONNECTION.Close()
|
|
Return Nothing
|
|
End Try
|
|
Else
|
|
Return Nothing
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Warn("Unexpected Error in Function FuBa_ReturnDatatable Seperated: " & ex.Message)
|
|
MsgBox("Unexpected Error in Function FuBa_ReturnDatatable Seperated: " & ex.Message, MsgBoxStyle.Critical)
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
Private Shared WithEvents oReadTbl As New ReadTable(SAPConnectionString)
|
|
Private Shared Sub OnIncomingPackage(ByVal Sender As ReadTable, ByVal PackageResult As DataTable) Handles oReadTbl.IncomingPackage
|
|
Try
|
|
LOGGER.Debug("Processing data package with " +
|
|
PackageResult.Rows.Count.ToString() + " rows")
|
|
If _NewDatatable Is Nothing Then
|
|
_NewDatatable = PackageResult.Clone
|
|
LOGGER.Debug("...NewDatatable initialized!")
|
|
End If
|
|
_NewDatatable.Merge(PackageResult, False)
|
|
LOGGER.Debug("...Datatable merged with PackageResult!")
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message)
|
|
LOGGER.Error(ex)
|
|
End Try
|
|
End Sub
|
|
Public Shared Function Return_Datatable_for_Table(pTablename As String, pWhere_clause As String, pRaisIncomPack As Boolean, RowLimit As Integer)
|
|
Try
|
|
_NewDatatable = New DataTable
|
|
LOGGER.Debug("Get data from SAP Table")
|
|
Dim oReadTable As New ERPConnect.Utils.ReadTable(SAP_CONNECTION)
|
|
If pRaisIncomPack = True Then
|
|
LOGGER.Debug("IncomingPackage = True")
|
|
oReadTable.PackageSize = 10000
|
|
oReadTable.RaiseIncomingPackageEvent = True
|
|
End If
|
|
|
|
If pWhere_clause <> "" Then
|
|
oReadTable.WhereClause = pWhere_clause
|
|
End If
|
|
oReadTable.TableName = pTablename
|
|
If RowLimit <> 0 Then
|
|
LOGGER.Debug("RowLimit included!")
|
|
oReadTable.RowCount = RowLimit
|
|
End If
|
|
LOGGER.Debug("Table.Run executing.....")
|
|
oReadTbl = oReadTable
|
|
oReadTbl.Run()
|
|
|
|
LOGGER.Debug("Table.Run executed")
|
|
'RESULT_TABLE = oReadTbl.Result
|
|
If Not IsNothing(_NewDatatable) Then
|
|
LOGGER.Debug($"Got [{_NewDatatable.Rows.Count}] rows")
|
|
End If
|
|
|
|
SAP_CONNECTION.Close()
|
|
Return _NewDatatable
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
LOGGER.Warn("Unexpected Error in SAP Table Result: " & ex.Message)
|
|
MsgBox("Unexpected Error in SAP Table Result: " & ex.Message, MsgBoxStyle.Critical)
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
|
|
|
|
Public Shared Function LINK_ARC_OBJECT(table As String, barcode As String, contrep As String, docid As String, ardate As String, doctype As String)
|
|
Try
|
|
LOGGER.Debug("CREATE_ARC_OBJECT")
|
|
Dim sapfunc As RFCFunction = SAP_CONNECTION.CreateFunction("BAPI_BARCODE_SENDLIST")
|
|
|
|
'Create and fill the frist row
|
|
Dim row As RFCStructure = sapfunc.Tables(table).AddRow()
|
|
row("BARCODE") = barcode
|
|
row("CONTREP") = contrep
|
|
row("DOCID") = docid
|
|
row("ARDATE") = ardate
|
|
row("DOCTYPE") = doctype
|
|
|
|
' Execut e the function
|
|
sapfunc.Execute()
|
|
|
|
' process return structure
|
|
Dim ret As RFCStructure = sapfunc.Imports("RETURN").ToStructure()
|
|
|
|
If (ret("TYPE").ToString().Equals("")) Then
|
|
Console.WriteLine("No error reported")
|
|
Return ""
|
|
Else
|
|
Return ret("MESSAGE")
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Warn("Unexpected Error in SAP Table Result: " & ex.Message)
|
|
MsgBox("Unexpected Error in CREATE_ARC_OBJECT: " & ex.Message, MsgBoxStyle.Critical)
|
|
Return ex.Message
|
|
End Try
|
|
End Function
|
|
Public Shared Function INSERT_ARCHIVE_OBJECT(ARCHIV_ID As String, ARC_DOC_ID As String, AR_OBJECT As String, OBJECT_ID As String, SAP_OBJECT As String, DOC_TYPE As String, table As String)
|
|
Try
|
|
LOGGER.Debug("INSERT_ARCHIVE_OBJECT")
|
|
Dim sapfunc As RFCFunction = SAP_CONNECTION.CreateFunction("ARCHIV_CONNECTION_INSERT")
|
|
|
|
'Create and fill the frist row
|
|
'Dim row As RFCStructure = sapfunc.
|
|
sapfunc.Exports("ARCHIV_ID").ParamValue = ARCHIV_ID
|
|
sapfunc.Exports("ARC_DOC_ID").ParamValue = ARC_DOC_ID
|
|
sapfunc.Exports("AR_OBJECT").ParamValue = AR_OBJECT
|
|
sapfunc.Exports("OBJECT_ID").ParamValue = OBJECT_ID
|
|
sapfunc.Exports("SAP_OBJECT").ParamValue = SAP_OBJECT
|
|
sapfunc.Exports("DOC_TYPE").ParamValue = DOC_TYPE
|
|
' row("AR_DATE") = AR_DATE
|
|
' Execut e the function
|
|
Try
|
|
sapfunc.Execute()
|
|
Catch ex As Exception
|
|
MsgBox("Unexpected Error in sapfunc.Execute: " & ex.Message, MsgBoxStyle.Critical)
|
|
Dim ret As RFCStructure = sapfunc.Imports("RETURN").ToStructure()
|
|
|
|
If (ret("TYPE").ToString().Equals("")) Then
|
|
Console.WriteLine("No error reported")
|
|
Return "ERROR in Function Execute"
|
|
Else
|
|
Return ret("MESSAGE")
|
|
End If
|
|
End Try
|
|
' process return structure
|
|
Return ""
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Warn("Unexpected Error in INSERT_ARCHIVE_OBJECT: " & ex.Message)
|
|
MsgBox("Unexpected Error in INSERT_ARCHIVE_OBJECT: " & ex.Message, MsgBoxStyle.Critical)
|
|
Return ex.Message
|
|
End Try
|
|
End Function
|
|
End Class
|