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 '' AND AR_DATE GE ''" 'Dim sSearchDate1 = "20160101" 'cWhereClause = Replace(cWhereClause, "", Objekttyp.Text) 'cWhereClause = Replace(cWhereClause, "", 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