231 lines
12 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
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
If LogErrorsOnly = False Then ClassLogger.Add(" >> CREATE_ARC_OBJECT", False)
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
ClassLogger.Add(">> Unexpected Error in SAP Table Result: " & ex.Message, False)
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
If LogErrorsOnly = False Then ClassLogger.Add(" >> INSERT_ARCHIVE_OBJECT", False)
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
ClassLogger.Add(">> Unexpected Error in INSERT_ARCHIVE_OBJECT: " & ex.Message, False)
MsgBox("Unexpected Error in INSERT_ARCHIVE_OBJECT: " & ex.Message, MsgBoxStyle.Critical)
Return ex.Message
End Try
End Function
End Class