2016-06-22 16:06:34 +02:00

162 lines
8.9 KiB
VB.net

Imports ERPConnect
Public Class ClassSAP
Public Shared SAPConnectionString
Public Shared SAP_CONNECTION As New R3Connection()
Public Shared Function ConnectionInit(Host As String, SysNumber As String, Username As String, PW As String, Client As String, Lang As String)
Try
If LogErrorsOnly = False Then ClassLogger.Add("", False)
If LogErrorsOnly = False Then ClassLogger.Add(" >> SAP Connect started:", False)
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")
If LogErrorsOnly = False Then ClassLogger.Add(" >> SAP Connectionstring: " & SAPConnectionString, False)
con.Open(SAPConnectionString)
SAP_CONNECTION.Open(SAPConnectionString)
If LogErrorsOnly = False Then ClassLogger.Add(" >> SAP-Connection created!", False)
If LogErrorsOnly = False Then ClassLogger.Add("", False)
Return True
Catch ex As Exception
MsgBox("Error in SAP ConnectionInit: " & ex.Message, MsgBoxStyle.Critical)
ClassLogger.Add("Error in SAP ConnectionInit: " & ex.Message, True)
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
If LogErrorsOnly = False Then ClassLogger.Add(" >> Get data from FuBa-Function", False)
Dim func As RFCFunction
Try
func = SAP_CONNECTION.CreateFunction(FuBaName)
If LogErrorsOnly = False Then ClassLogger.Add(" >> func.Execute", False)
func.Execute()
If LogErrorsOnly = False Then ClassLogger.Add(" >> function was executed", False)
Catch ex As Exception
ClassLogger.Add(">> Unexpected Error in Create SAP Function: " & ex.Message, False)
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
If LogErrorsOnly = False Then ClassLogger.Add(" >> Checking FunctionExecute", False)
'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
If LogErrorsOnly = False Then ClassLogger.Add(" >> RowMask result: " & RowMaskresult, False)
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
ClassLogger.Add(">> Unexpected Error in Checking FunctionExecute: " & ex.Message, False)
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
If LogErrorsOnly = False Then ClassLogger.Add(" >> Define Datatable with SplitCharacter method", False)
Dim split() = RowMaskresult.Split(SplitCharacter)
If split.Length > 0 Then
ColCount = split.Length - 1
CURRENT_COL_COUNT = ColCount
If LogErrorsOnly = False Then
ClassLogger.Add(" >> ColCount: " & ColCount.ToString, False)
ClassLogger.Add(" >> Split-Results: ", False)
For Each s As String In split
ClassLogger.Add(" # " & s, False)
Next
End If
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
If LogErrorsOnly = False Then ClassLogger.Add(" >> Datatable Columns after Split created", False)
' 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
If LogErrorsOnly = False Then ClassLogger.Add(" >> RowCount limited to" & RowLimit.ToString & " rows. Exit SAP Function", False)
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
If LogErrorsOnly = False Then ClassLogger.Add(" >> RowCount FuBa: " & RESULT_TABLE.Rows.Count.ToString, False)
Return RESULT_TABLE
Else
Return Nothing
End If
Catch ex As Exception
ClassLogger.Add(">> Unexpected Error in Create Datatable with split-method: " & ex.Message, False)
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
ClassLogger.Add(">> Unexpected Error in Function FuBa_ReturnDatatable Seperated: " & ex.Message, False)
MsgBox("Unexpected Error in Function FuBa_ReturnDatatable Seperated: " & ex.Message, MsgBoxStyle.Critical)
Return Nothing
End Try
End Function
Public Shared Function Return_Datatable_for_Table(tablename As String, where_clause As String, Optional RowLimit As Integer = 0)
Try
Dim RESULT_TABLE As DataTable = New DataTable
If LogErrorsOnly = False Then ClassLogger.Add(">> Get data from SAP Table", False)
Dim table As New ERPConnect.Utils.ReadTable(SAP_CONNECTION)
'Dim cWhereClause = "SAP_OBJECT EQ '<ObjectType>' AND AR_DATE GE '<AR_DATE>'"
'Dim sSearchDate1 = "20160101"
'cWhereClause = Replace(cWhereClause, "<ObjectType>", Objekttyp.Text)
'cWhereClause = Replace(cWhereClause, "<AR_DATE>", sSearchDate1)
If where_clause <> "" Then
table.AddCriteria(where_clause)
End If
table.TableName = tablename
If RowLimit <> 0 Then
table.RowCount = RowLimit
End If
If LogErrorsOnly = False Then ClassLogger.Add(">>Table.Run executing.....", False)
table.Run()
If LogErrorsOnly = False Then ClassLogger.Add(">>Table.Run executed", False)
RESULT_TABLE = table.Result
SAP_CONNECTION.Close()
Return RESULT_TABLE
Catch ex As Exception
ClassLogger.Add(">> Unexpected Error in SAP Table Result: " & ex.Message, False)
MsgBox("Unexpected Error in SAP Table Result: " & ex.Message, MsgBoxStyle.Critical)
Return Nothing
End Try
End Function
End Class