diff --git a/GUIs.ZooFlow/ApplicationEvents.vb b/GUIs.ZooFlow/ApplicationEvents.vb
index ebcabca5..6adaa98c 100644
--- a/GUIs.ZooFlow/ApplicationEvents.vb
+++ b/GUIs.ZooFlow/ApplicationEvents.vb
@@ -2,6 +2,7 @@
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Config
Imports DigitalData.Modules.Logging.LogConfig
+Imports System.Text.RegularExpressions
Namespace My
' Für MyApplication sind folgende Ereignisse verfügbar:
@@ -39,6 +40,13 @@ Namespace My
_Logger = LogConfig.GetLogger()
_Logger.Debug("Starting Client Suite..")
+
+ Dim oCommandLineArgs As New ClassCommandlineArgs(LogConfig)
+ Dim oArgs = Environment.GetCommandLineArgs().Skip(1).ToList()
+ oCommandLineArgs.Parse(oArgs)
+
+ CommandLineFunction = oCommandLineArgs.FunctionName
+ CommandLineArgs = oCommandLineArgs.FunctionArgs
End Sub
Public Sub App_Shutdown(sender As Object, e As EventArgs) Handles Me.Shutdown
diff --git a/GUIs.ZooFlow/ClassCommandlineArgs.vb b/GUIs.ZooFlow/ClassCommandlineArgs.vb
new file mode 100644
index 00000000..3e16308e
--- /dev/null
+++ b/GUIs.ZooFlow/ClassCommandlineArgs.vb
@@ -0,0 +1,62 @@
+Imports System.Text.RegularExpressions
+Imports DigitalData.Modules.Logging
+
+'''
+''' Parses Commandline Arguments. Used to jump to a specific point in the application.
+'''
+''' Example: --start-search=id#7~doctype#ARE
+'''
+Public Class ClassCommandlineArgs
+ Private CommandLineArgTypes As New List(Of String) From {
+ "show-profile",
+ "start-search"
+ }
+ Private CommandLineArgTypeString As String = String.Join("|", CommandLineArgTypes)
+ Private CommandLineArgRegex As String = $"(?:-{{2}}(?:({CommandLineArgTypeString})+)=([a-zA-Z0-9~#]+)\s*)+"
+ Private CommandLineArgParameterRegex As String = "(?:~{0,1}([\w\d-]+#[\w\d-]+))+"
+
+ Public FunctionName As String
+ Public FunctionArgs As New Dictionary(Of String, String)
+
+ Private LogConfig As LogConfig
+ Private Logger As Logger
+
+ Public Sub New(pLogConfig As LogConfig)
+ LogConfig = pLogConfig
+ Logger = pLogConfig.GetLogger()
+ End Sub
+
+ Public Sub Parse(Args As List(Of String))
+ Dim oRegex = New Regex(CommandLineArgRegex)
+ Dim oArgRegex = New Regex(CommandLineArgParameterRegex)
+
+ Logger.Debug("Application started with {0} arguments", Args.Count)
+
+ For Each oArg In Args
+ Dim oMatch = oRegex.Match(oArg)
+ Dim oGroups = oMatch.Groups
+
+ If oMatch.Success = False Then
+ Logger.Warn("The Argument [{0}] did not match the required format and was discarded!", oArg)
+ Continue For
+ End If
+
+ Dim oParamName As String = oGroups.Item(1).Value.Replace("--", "")
+ Dim oParamValue As String = oGroups.Item(2).Value
+
+ If oArgRegex.IsMatch(oParamValue) Then
+ FunctionName = oParamName
+
+ For Each oValue As String In oParamValue.Split("~"c)
+ Dim oValueArray = oValue.Split("#"c).ToList
+ FunctionArgs.Add(oValueArray.Item(0), oValueArray.Item(1))
+ Next
+ Else
+ Throw New ArgumentException($"Parameters did not match the required format!", "pValue")
+ End If
+
+ Next
+ End Sub
+
+
+End Class
diff --git a/GUIs.ZooFlow/MyApplication.vb b/GUIs.ZooFlow/MyApplication.vb
index fd7f87ad..095ecb9d 100644
--- a/GUIs.ZooFlow/MyApplication.vb
+++ b/GUIs.ZooFlow/MyApplication.vb
@@ -50,7 +50,8 @@ Namespace My
Public Property GDPictureLicense As String
-
+ Public CommandLineFunction As String
+ Public CommandLineArgs As New Dictionary(Of String, String)
End Class
End Namespace
diff --git a/GUIs.ZooFlow/ZooFlow.vbproj b/GUIs.ZooFlow/ZooFlow.vbproj
index 66f1dac5..704a067d 100644
--- a/GUIs.ZooFlow/ZooFlow.vbproj
+++ b/GUIs.ZooFlow/ZooFlow.vbproj
@@ -106,6 +106,7 @@
+