2024-05-06 13:38:52 +02:00

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