I recently had reason to perform an operation on a bunch of files in a directory. I wanted to view a running average iteration time. It would have been easy to use a collection / generic / array, sum the contents and divide by the collection / generic / array length, but I knew there was a simpler way, having done it before. Linq to the rescue! Here the function :
Public Function IterateFiles(path As String) As Double
Dim iterationDurations As New List(Of Double)
For Each fileName As String In IO.Directory.GetFiles(path, "*.*", IO.SearchOption.AllDirectories)
Dim iterationStartTime As Date = Now
' ... Your operation here...
Dim iterationEndTime As Date = Now
iterationDurations.Add((iterationEndTime - iterationStartTime).TotalMilliseconds)
Console.Write("{0} Avg Iteration Time {1}", vbCr, System.Linq.Enumerable.Average(iterationDurations).ToString("F2"))
Next
Return System.Linq.Enumerable.Average(iterationDurations)
End Function
In the first of (hopefully) many (providing I keep the momentum going) posts regarding coding, I have documented the VB.NET code required to connect and return a SAP Business One Company. So here we go.
Private Function Company(server As String, userName As String, SecurePW As Security.SecureString, _
companyDB As String, dbUsername As String, dbPassword As String, _
ByRef errorMsg As String) As SAPbobsCOM.Company
Company = New SAPbobsCOM.Company
' Get the secure password
Dim ptr As IntPtr = Runtime.InteropServices.Marshal.SecureStringToBSTR(SecurePW)
' Set up the connection to SAP
Dim returnCode, errorCode As Integer
With Company
.Server = server
.CompanyDB = companyDB
.UserName = userName
.Password = Runtime.InteropServices.Marshal.PtrToStringBSTR(ptr)
.language = SAPbobsCOM.BoSuppLangs.ln_English
.DbUserName = dbUsername
.DbPassword = dbPassword
.UseTrusted = False
.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2008
End With
' Try and connect to the database
returnCode = Company.Connect
If returnCode = 0 AndAlso Company.Connected = True Then
' Success!
Else
Company.GetLastError(errorCode, errorMsg)
If Company.Connected Then Company.Disconnect()
Company = Nothing
End If
End Function
We’re assuming that we are connecting to a SQL Server 2008 instance. Also, the SAP User password is passed in via a SecureString for maximum security. I’ll post the code for a login form that exposes the SecureString password at a later date.
More graphics coding… The screen recorder was not up to much, so the quality’s not great. Although to be fair it could be the speed of my development machine…