workflows

This commit is contained in:
Jonathan Jenne 2019-07-02 14:54:57 +02:00
parent 8a30f645f8
commit 507e67309f
14 changed files with 595 additions and 210 deletions

View File

@ -1,5 +1,6 @@
Imports System.IO Imports System.IO
Imports System.Security.Cryptography Imports System.Security.Cryptography
Imports System.Text.Encoding
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
''' <summary> ''' <summary>
@ -19,8 +20,6 @@ Public Class Encryption
Private ReadOnly _password As String Private ReadOnly _password As String
Private _logger As Logger Private _logger As Logger
Public Sub New(LogConfig As LogConfig, Password As String) Public Sub New(LogConfig As LogConfig, Password As String)
_logger = LogConfig.GetLogger() _logger = LogConfig.GetLogger()
@ -31,13 +30,24 @@ Public Class Encryption
_password = Password _password = Password
End Sub End Sub
Public Async Function EncryptAsync(oPlainTextBytes As Byte()) As Task(Of Byte()) Public Async Function EncryptAsync(PlainTextBytes As Byte()) As Task(Of Byte())
Return Await Task.Run(Function() As Byte() Return Await Task.Run(Function() As Byte()
Return Encrypt(oPlainTextBytes) Return Encrypt(PlainTextBytes)
End Function) End Function)
End Function End Function
Public Function Encrypt(oPlainTextBytes As Byte()) As Byte() Public Function Encrypt(PlainText As String) As String
Try
Dim oBytes As Byte() = UTF8.GetBytes(PlainText)
Dim oEncrypted As Byte() = Encrypt(oBytes)
Return UTF8.GetString(oEncrypted)
Catch ex As Exception
_logger.Error(ex)
Throw ex
End Try
End Function
Public Function Encrypt(PlainTextBytes As Byte()) As Byte()
Try Try
' Salt and IV is randomly generated each time, but is preprended to encrypted cipher text ' Salt and IV is randomly generated each time, but is preprended to encrypted cipher text
' so that the same Salt and IV values can be used when decrypting. ' so that the same Salt and IV values can be used when decrypting.
@ -53,7 +63,7 @@ Public Class Encryption
Using oEncryptor = oSymmetricKey.CreateEncryptor(oKeyBytes, oIvStringBytes) Using oEncryptor = oSymmetricKey.CreateEncryptor(oKeyBytes, oIvStringBytes)
Using oMemoryStream = New MemoryStream() Using oMemoryStream = New MemoryStream()
Using oCryptoStream = New CryptoStream(oMemoryStream, oEncryptor, CryptoStreamMode.Write) Using oCryptoStream = New CryptoStream(oMemoryStream, oEncryptor, CryptoStreamMode.Write)
oCryptoStream.Write(oPlainTextBytes, 0, oPlainTextBytes.Length) oCryptoStream.Write(PlainTextBytes, 0, PlainTextBytes.Length)
oCryptoStream.FlushFinalBlock() oCryptoStream.FlushFinalBlock()
' Create the final bytes as a concatenation of the random salt bytes, the random iv bytes and the cipher bytes. ' Create the final bytes as a concatenation of the random salt bytes, the random iv bytes and the cipher bytes.
Dim oCipherTextBytes = oSaltStringBytes Dim oCipherTextBytes = oSaltStringBytes
@ -79,16 +89,27 @@ Public Class Encryption
End Function) End Function)
End Function End Function
Public Function Decrypt(cipherTextBytesWithSaltAndIv As Byte()) As Byte() Public Function Decrypt(CipherTextPlainWithSaltAndIv As String) As String
Try
Dim oBytes As Byte() = UTF8.GetBytes(CipherTextPlainWithSaltAndIv)
Dim oDecrypted As Byte() = Decrypt(oBytes)
Return UTF8.GetString(oDecrypted)
Catch ex As Exception
_logger.Error(ex)
Throw ex
End Try
End Function
Public Function Decrypt(CipherTextBytesWithSaltAndIv As Byte()) As Byte()
Try Try
' Get the complete stream of bytes that represent: ' Get the complete stream of bytes that represent:
' [32 bytes of Salt] + [32 bytes of IV] + [n bytes of CipherText] ' [32 bytes of Salt] + [32 bytes of IV] + [n bytes of CipherText]
' Get the saltbytes by extracting the first 32 bytes from the supplied cipherText bytes. ' Get the saltbytes by extracting the first 32 bytes from the supplied cipherText bytes.
Dim oSaltStringBytes = cipherTextBytesWithSaltAndIv.Take(KEY_SIZE / 8).ToArray() Dim oSaltStringBytes = CipherTextBytesWithSaltAndIv.Take(KEY_SIZE / 8).ToArray()
' Get the IV bytes by extracting the next 32 bytes from the supplied cipherText bytes. ' Get the IV bytes by extracting the next 32 bytes from the supplied cipherText bytes.
Dim oIvStringBytes = cipherTextBytesWithSaltAndIv.Skip(KEY_SIZE / 8).Take(KEY_SIZE / 8).ToArray() Dim oIvStringBytes = CipherTextBytesWithSaltAndIv.Skip(KEY_SIZE / 8).Take(KEY_SIZE / 8).ToArray()
' Get the actual cipher text bytes by removing the first 64 bytes from the cipherText string. ' Get the actual cipher text bytes by removing the first 64 bytes from the cipherText string.
Dim oCipherTextBytes = cipherTextBytesWithSaltAndIv.Skip((KEY_SIZE / 8) * 2).Take(cipherTextBytesWithSaltAndIv.Length - ((KEY_SIZE / 8) * 2)).ToArray() Dim oCipherTextBytes = CipherTextBytesWithSaltAndIv.Skip((KEY_SIZE / 8) * 2).Take(CipherTextBytesWithSaltAndIv.Length - ((KEY_SIZE / 8) * 2)).ToArray()
Using oPassword = New Rfc2898DeriveBytes(_password, oSaltStringBytes, DERIVATION_ITERATIONS) Using oPassword = New Rfc2898DeriveBytes(_password, oSaltStringBytes, DERIVATION_ITERATIONS)
Dim oKeyBytes = oPassword.GetBytes(KEY_SIZE / 8) Dim oKeyBytes = oPassword.GetBytes(KEY_SIZE / 8)

View File

@ -205,6 +205,18 @@
<Compile Include="Workers\IWorker.vb" /> <Compile Include="Workers\IWorker.vb" />
<Compile Include="Workers\WorkerManager.vb" /> <Compile Include="Workers\WorkerManager.vb" />
<Compile Include="Workers\WorkflowOverviewWorker.vb" /> <Compile Include="Workers\WorkflowOverviewWorker.vb" />
<Compile Include="Workflow\GridOverview.Designer.vb">
<DependentUpon>GridOverview.vb</DependentUpon>
</Compile>
<Compile Include="Workflow\GridOverview.vb">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Workflow\NavControlOverview.Designer.vb">
<DependentUpon>NavControlOverview.vb</DependentUpon>
</Compile>
<Compile Include="Workflow\NavControlOverview.vb">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Workflow\WorkflowDetail.vb" /> <Compile Include="Workflow\WorkflowDetail.vb" />
<Compile Include="Workflow\WorkflowItem.vb" /> <Compile Include="Workflow\WorkflowItem.vb" />
<Compile Include="_TEST\DockManagerTest.Designer.vb"> <Compile Include="_TEST\DockManagerTest.Designer.vb">
@ -352,6 +364,12 @@
<EmbeddedResource Include="Panels\DocumentPanel.resx"> <EmbeddedResource Include="Panels\DocumentPanel.resx">
<DependentUpon>DocumentPanel.vb</DependentUpon> <DependentUpon>DocumentPanel.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Workflow\GridOverview.resx">
<DependentUpon>GridOverview.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Workflow\NavControlOverview.resx">
<DependentUpon>NavControlOverview.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="_TEST\DockManagerTest.resx"> <EmbeddedResource Include="_TEST\DockManagerTest.resx">
<DependentUpon>DockManagerTest.vb</DependentUpon> <DependentUpon>DockManagerTest.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>

View File

@ -52,4 +52,26 @@ Public Class ClassCommonViews
Throw ex Throw ex
End Try End Try
End Function End Function
Public Async Function VWIDB_GUI_WF_OVERVIEW(UserId As Int64, FormId As Int64) As Task(Of DataTable)
Try
My.Channel.CreateDatabaseRequest("Load Control Data", True)
Dim oSQL As String = $"SELECT * FROM VWIDB_GUI_WF_OVERVIEW WHERE USERID = {UserId} AND FORMID = {FormId}"
Dim oResult = Await My.Channel.ReturnDatatableAsync(oSQL)
Dim oTable = oResult.Table
If Not oResult.OK Then
_Logger.Error(New ApplicationException(oResult.ErrorMessage))
Return Nothing
End If
My.Channel.CloseDatabaseRequest()
Return oResult.Table
Catch ex As Exception
_Logger.Error(ex)
Throw ex
End Try
End Function
End Class End Class

View File

@ -0,0 +1,74 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class GridOverview
Inherits System.Windows.Forms.UserControl
'UserControl überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Wird vom Windows Form-Designer benötigt.
Private components As System.ComponentModel.IContainer
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.GridControl = New DevExpress.XtraGrid.GridControl()
Me.gvOverview = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.GridView1 = New DevExpress.XtraGrid.Views.Grid.GridView()
CType(Me.GridControl, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.gvOverview, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.GridView1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'GridControl
'
Me.GridControl.Dock = System.Windows.Forms.DockStyle.Fill
Me.GridControl.Location = New System.Drawing.Point(0, 0)
Me.GridControl.MainView = Me.gvOverview
Me.GridControl.Name = "GridControl"
Me.GridControl.Size = New System.Drawing.Size(626, 461)
Me.GridControl.TabIndex = 1
Me.GridControl.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.gvOverview, Me.GridView1})
'
'gvOverview
'
Me.gvOverview.GridControl = Me.GridControl
Me.gvOverview.Name = "gvOverview"
Me.gvOverview.OptionsFind.AlwaysVisible = True
Me.gvOverview.OptionsView.GroupDrawMode = DevExpress.XtraGrid.Views.Grid.GroupDrawMode.Office
Me.gvOverview.OptionsView.ShowGroupedColumns = True
Me.gvOverview.OptionsView.ShowVerticalLines = DevExpress.Utils.DefaultBoolean.[True]
'
'GridView1
'
Me.GridView1.GridControl = Me.GridControl
Me.GridView1.Name = "GridView1"
'
'GridOverview
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Controls.Add(Me.GridControl)
Me.Name = "GridOverview"
Me.Size = New System.Drawing.Size(626, 461)
CType(Me.GridControl, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.gvOverview, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.GridView1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
Friend WithEvents GridControl As DevExpress.XtraGrid.GridControl
Friend WithEvents gvOverview As DevExpress.XtraGrid.Views.Grid.GridView
Friend WithEvents GridView1 As DevExpress.XtraGrid.Views.Grid.GridView
End Class

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,27 @@
Public Class GridOverview
Private _DataSource As List(Of WorkflowItem)
Public Property DataSource As List(Of WorkflowItem)
Get
Return _DataSource
End Get
Set(value As List(Of WorkflowItem))
_DataSource = value
GridControl.DataSource = value
If Not IsNothing(value) Then
ApplyStyles()
End If
End Set
End Property
Private Sub ApplyStyles()
With gvOverview.Columns.Item("StateImage")
.VisibleIndex = 0
.MaxWidth = 20
.OptionsColumn.ShowCaption = False
End With
gvOverview.Columns.Item("Process").VisibleIndex = 1
gvOverview.Columns.Item("State").Visible = False
End Sub
End Class

View File

@ -0,0 +1,60 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class NavControlOverview
Inherits System.Windows.Forms.UserControl
'UserControl überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Wird vom Windows Form-Designer benötigt.
Private components As System.ComponentModel.IContainer
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.NavBarControl = New DevExpress.XtraNavBar.NavBarControl()
Me.NavBarGroup1 = New DevExpress.XtraNavBar.NavBarGroup()
CType(Me.NavBarControl, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'NavBarControl
'
Me.NavBarControl.ActiveGroup = Me.NavBarGroup1
Me.NavBarControl.Dock = System.Windows.Forms.DockStyle.Fill
Me.NavBarControl.Groups.AddRange(New DevExpress.XtraNavBar.NavBarGroup() {Me.NavBarGroup1})
Me.NavBarControl.Location = New System.Drawing.Point(0, 0)
Me.NavBarControl.Name = "NavBarControl"
Me.NavBarControl.Size = New System.Drawing.Size(150, 150)
Me.NavBarControl.TabIndex = 0
Me.NavBarControl.Text = "NavBarControl1"
'
'NavBarGroup1
'
Me.NavBarGroup1.Caption = "Workflow"
Me.NavBarGroup1.Expanded = True
Me.NavBarGroup1.Name = "NavBarGroup1"
'
'NavControlOverview
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Controls.Add(Me.NavBarControl)
Me.Name = "NavControlOverview"
CType(Me.NavBarControl, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
Friend WithEvents NavBarControl As DevExpress.XtraNavBar.NavBarControl
Friend WithEvents NavBarGroup1 As DevExpress.XtraNavBar.NavBarGroup
End Class

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,40 @@
Imports DevExpress.XtraNavBar
Public Class NavControlOverview
Private _DataSource As List(Of WorkflowItem)
Public Property DataSource As List(Of WorkflowItem)
Get
Return _DataSource
End Get
Set(value As List(Of WorkflowItem))
_DataSource = value
'TODO: Update Navbar Items
If Not IsNothing(value) Then
UpdateItems(value)
End If
End Set
End Property
Private Sub UpdateItems(WorkflowItems As List(Of WorkflowItem))
Dim oTotalItems = WorkflowItems.Count
Dim oGroupedItems = WorkflowItems.GroupBy(Function(Item As WorkflowItem)
Return Item.Process
End Function)
AddItem("Alle Workflows", oTotalItems)
For Each oGroupedItem As IGrouping(Of String, WorkflowItem) In oGroupedItems
AddItem(oGroupedItem.Key, oGroupedItem.Count)
Next
End Sub
Private Sub AddItem(Title As String, Count As Integer)
Dim oItem = New NavBarItem() With {
.Caption = $"{Title} ({Count})"
}
NavBarControl.Groups.First().ItemLinks.Add(oItem)
End Sub
End Class

View File

@ -4,35 +4,26 @@ Imports DigitalData.GUIs.ClientSuite
Public Class WorkflowItem Public Class WorkflowItem
Implements INotifyPropertyChanged Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Enum ItemState Private _state As String
Normal
Warning
Danger
End Enum
Public Property StateImage As Image
Public Property Title As String Public Property Title As String
Public Property CreatedAt As DateTime Public Property CreatedAt As DateTime
Public Property WorkflowName As String Public Property Process As String
Private _state As ItemState Public Property StateImage As Image
<Browsable(False)> Public Property State As String
Public Property State As ItemState
Get Get
Return _state Return _state
End Get End Get
Set(value As ItemState) Set(value As String)
_state = value _state = value
Select Case value Select Case value
Case ItemState.Normal Case "Start"
StateImage = My.Resources.ampel_gruen StateImage = My.Resources.
Case ItemState.Warning Case "Not started"
StateImage = My.Resources.ampel_gelb StateImage = My.Resources.ampel_gelb
Case ItemState.Danger
StateImage = My.Resources.ampel_rot
Case Else Case Else
StateImage = Nothing StateImage = Nothing
End Select End Select

View File

@ -1,6 +1,6 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class frmWorkflowOverview Partial Class frmWorkflowOverview
Inherits DevExpress.XtraBars.Ribbon.RibbonForm Inherits DigitalData.GUIs.ClientSuite.Base.BaseRibbonForm
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> <System.Diagnostics.DebuggerNonUserCode()>
@ -32,8 +32,8 @@ Partial Class frmWorkflowOverview
Dim TableRowDefinition3 As DevExpress.XtraEditors.TableLayout.TableRowDefinition = New DevExpress.XtraEditors.TableLayout.TableRowDefinition() Dim TableRowDefinition3 As DevExpress.XtraEditors.TableLayout.TableRowDefinition = New DevExpress.XtraEditors.TableLayout.TableRowDefinition()
Dim TableSpan1 As DevExpress.XtraEditors.TableLayout.TableSpan = New DevExpress.XtraEditors.TableLayout.TableSpan() Dim TableSpan1 As DevExpress.XtraEditors.TableLayout.TableSpan = New DevExpress.XtraEditors.TableLayout.TableSpan()
Dim TileViewItemElement1 As DevExpress.XtraGrid.Views.Tile.TileViewItemElement = New DevExpress.XtraGrid.Views.Tile.TileViewItemElement() Dim TileViewItemElement1 As DevExpress.XtraGrid.Views.Tile.TileViewItemElement = New DevExpress.XtraGrid.Views.Tile.TileViewItemElement()
Dim WindowsUIButtonImageOptions3 As DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions = New DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions() Dim WindowsUIButtonImageOptions1 As DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions = New DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions()
Dim WindowsUIButtonImageOptions4 As DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions = New DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions() Dim WindowsUIButtonImageOptions2 As DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions = New DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions()
Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl()
Me.BarCheckItem1 = New DevExpress.XtraBars.BarCheckItem() Me.BarCheckItem1 = New DevExpress.XtraBars.BarCheckItem()
Me.BarCheckItem2 = New DevExpress.XtraBars.BarCheckItem() Me.BarCheckItem2 = New DevExpress.XtraBars.BarCheckItem()
@ -43,15 +43,8 @@ Partial Class frmWorkflowOverview
Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar() Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.NavBarControl1 = New DevExpress.XtraNavBar.NavBarControl()
Me.NavBarGroup1 = New DevExpress.XtraNavBar.NavBarGroup()
Me.NavBarItem1 = New DevExpress.XtraNavBar.NavBarItem()
Me.NavBarItem2 = New DevExpress.XtraNavBar.NavBarItem()
Me.NavBarItem3 = New DevExpress.XtraNavBar.NavBarItem()
Me.SplitContainerControl1 = New DevExpress.XtraEditors.SplitContainerControl() Me.SplitContainerControl1 = New DevExpress.XtraEditors.SplitContainerControl()
Me.GridWorkflowOverview = New DevExpress.XtraGrid.GridControl() Me.NavControlOverview = New DigitalData.GUIs.ClientSuite.NavControlOverview()
Me.gvOverview = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.GridView1 = New DevExpress.XtraGrid.Views.Grid.GridView()
Me.GridWorkflowDetails = New DevExpress.XtraGrid.GridControl() Me.GridWorkflowDetails = New DevExpress.XtraGrid.GridControl()
Me.tvDetails = New DevExpress.XtraGrid.Views.Tile.TileView() Me.tvDetails = New DevExpress.XtraGrid.Views.Tile.TileView()
Me.LayoutControl1 = New DevExpress.XtraLayout.LayoutControl() Me.LayoutControl1 = New DevExpress.XtraLayout.LayoutControl()
@ -61,13 +54,10 @@ Partial Class frmWorkflowOverview
Me.LayoutControlItem2 = New DevExpress.XtraLayout.LayoutControlItem() Me.LayoutControlItem2 = New DevExpress.XtraLayout.LayoutControlItem()
Me.SimpleLabelItem2 = New DevExpress.XtraLayout.SimpleLabelItem() Me.SimpleLabelItem2 = New DevExpress.XtraLayout.SimpleLabelItem()
Me.SimpleLabelItem3 = New DevExpress.XtraLayout.SimpleLabelItem() Me.SimpleLabelItem3 = New DevExpress.XtraLayout.SimpleLabelItem()
Me.GridOverview = New DigitalData.GUIs.ClientSuite.GridOverview()
CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.NavBarControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainerControl1.SuspendLayout() Me.SplitContainerControl1.SuspendLayout()
CType(Me.GridWorkflowOverview, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.gvOverview, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.GridView1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.GridWorkflowDetails, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.GridWorkflowDetails, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.tvDetails, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.tvDetails, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit()
@ -149,86 +139,30 @@ Partial Class frmWorkflowOverview
Me.RibbonPage2.Name = "RibbonPage2" Me.RibbonPage2.Name = "RibbonPage2"
Me.RibbonPage2.Text = "RibbonPage2" Me.RibbonPage2.Text = "RibbonPage2"
' '
'NavBarControl1
'
Me.NavBarControl1.ActiveGroup = Me.NavBarGroup1
Me.NavBarControl1.Dock = System.Windows.Forms.DockStyle.Left
Me.NavBarControl1.Groups.AddRange(New DevExpress.XtraNavBar.NavBarGroup() {Me.NavBarGroup1})
Me.NavBarControl1.Items.AddRange(New DevExpress.XtraNavBar.NavBarItem() {Me.NavBarItem1, Me.NavBarItem2, Me.NavBarItem3})
Me.NavBarControl1.Location = New System.Drawing.Point(0, 146)
Me.NavBarControl1.Name = "NavBarControl1"
Me.NavBarControl1.OptionsNavPane.ExpandedWidth = 200
Me.NavBarControl1.OptionsNavPane.GroupImageShowMode = DevExpress.XtraNavBar.GroupImageShowMode.InCollapsedState
Me.NavBarControl1.Size = New System.Drawing.Size(200, 556)
Me.NavBarControl1.TabIndex = 2
Me.NavBarControl1.Text = "NavBarControl1"
Me.NavBarControl1.View = New DevExpress.XtraNavBar.ViewInfo.SkinNavigationPaneViewInfoRegistrator()
'
'NavBarGroup1
'
Me.NavBarGroup1.Caption = "Workflows"
Me.NavBarGroup1.Expanded = True
Me.NavBarGroup1.ImageOptions.SmallImage = CType(resources.GetObject("NavBarGroup1.ImageOptions.SmallImage"), System.Drawing.Image)
Me.NavBarGroup1.ItemLinks.AddRange(New DevExpress.XtraNavBar.NavBarItemLink() {New DevExpress.XtraNavBar.NavBarItemLink(Me.NavBarItem1), New DevExpress.XtraNavBar.NavBarItemLink(Me.NavBarItem2), New DevExpress.XtraNavBar.NavBarItemLink(Me.NavBarItem3)})
Me.NavBarGroup1.Name = "NavBarGroup1"
'
'NavBarItem1
'
Me.NavBarItem1.Caption = "Alle Workflows (100)"
Me.NavBarItem1.ImageOptions.SmallImage = CType(resources.GetObject("NavBarItem1.ImageOptions.SmallImage"), System.Drawing.Image)
Me.NavBarItem1.Name = "NavBarItem1"
'
'NavBarItem2
'
Me.NavBarItem2.Caption = "Rechnungseingang (80)"
Me.NavBarItem2.ImageOptions.SmallImage = CType(resources.GetObject("NavBarItem2.ImageOptions.SmallImage"), System.Drawing.Image)
Me.NavBarItem2.Name = "NavBarItem2"
'
'NavBarItem3
'
Me.NavBarItem3.Caption = "Vertragsprüfung (20)"
Me.NavBarItem3.ImageOptions.SmallImage = CType(resources.GetObject("NavBarItem3.ImageOptions.SmallImage"), System.Drawing.Image)
Me.NavBarItem3.Name = "NavBarItem3"
'
'SplitContainerControl1 'SplitContainerControl1
' '
Me.SplitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill Me.SplitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill
Me.SplitContainerControl1.Location = New System.Drawing.Point(200, 146) Me.SplitContainerControl1.Location = New System.Drawing.Point(0, 146)
Me.SplitContainerControl1.Name = "SplitContainerControl1" Me.SplitContainerControl1.Name = "SplitContainerControl1"
Me.SplitContainerControl1.Panel1.Controls.Add(Me.GridWorkflowOverview) Me.SplitContainerControl1.Panel1.Controls.Add(Me.GridOverview)
Me.SplitContainerControl1.Panel1.Controls.Add(Me.NavControlOverview)
Me.SplitContainerControl1.Panel1.Text = "Panel1" Me.SplitContainerControl1.Panel1.Text = "Panel1"
Me.SplitContainerControl1.Panel2.Controls.Add(Me.GridWorkflowDetails) Me.SplitContainerControl1.Panel2.Controls.Add(Me.GridWorkflowDetails)
Me.SplitContainerControl1.Panel2.Controls.Add(Me.LayoutControl1) Me.SplitContainerControl1.Panel2.Controls.Add(Me.LayoutControl1)
Me.SplitContainerControl1.Panel2.Text = "Panel2" Me.SplitContainerControl1.Panel2.Text = "Panel2"
Me.SplitContainerControl1.Size = New System.Drawing.Size(934, 556) Me.SplitContainerControl1.Size = New System.Drawing.Size(1134, 556)
Me.SplitContainerControl1.SplitterPosition = 471 Me.SplitContainerControl1.SplitterPosition = 841
Me.SplitContainerControl1.TabIndex = 5 Me.SplitContainerControl1.TabIndex = 5
Me.SplitContainerControl1.Text = "SplitContainerControl1" Me.SplitContainerControl1.Text = "SplitContainerControl1"
' '
'GridWorkflowOverview 'NavControlOverview
' '
Me.GridWorkflowOverview.Dock = System.Windows.Forms.DockStyle.Fill Me.NavControlOverview.DataSource = Nothing
Me.GridWorkflowOverview.Location = New System.Drawing.Point(0, 0) Me.NavControlOverview.Dock = System.Windows.Forms.DockStyle.Left
Me.GridWorkflowOverview.MainView = Me.gvOverview Me.NavControlOverview.Location = New System.Drawing.Point(0, 0)
Me.GridWorkflowOverview.MenuManager = Me.RibbonControl1 Me.NavControlOverview.Name = "NavControlOverview"
Me.GridWorkflowOverview.Name = "GridWorkflowOverview" Me.NavControlOverview.Size = New System.Drawing.Size(185, 556)
Me.GridWorkflowOverview.Size = New System.Drawing.Size(471, 556) Me.NavControlOverview.TabIndex = 1
Me.GridWorkflowOverview.TabIndex = 0
Me.GridWorkflowOverview.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.gvOverview, Me.GridView1})
'
'gvOverview
'
Me.gvOverview.GridControl = Me.GridWorkflowOverview
Me.gvOverview.Name = "gvOverview"
Me.gvOverview.OptionsFind.AlwaysVisible = True
Me.gvOverview.OptionsView.GroupDrawMode = DevExpress.XtraGrid.Views.Grid.GroupDrawMode.Office
Me.gvOverview.OptionsView.ShowGroupedColumns = True
Me.gvOverview.OptionsView.ShowVerticalLines = DevExpress.Utils.DefaultBoolean.[True]
'
'GridView1
'
Me.GridView1.GridControl = Me.GridWorkflowOverview
Me.GridView1.Name = "GridView1"
' '
'GridWorkflowDetails 'GridWorkflowDetails
' '
@ -237,7 +171,7 @@ Partial Class frmWorkflowOverview
Me.GridWorkflowDetails.MainView = Me.tvDetails Me.GridWorkflowDetails.MainView = Me.tvDetails
Me.GridWorkflowDetails.MenuManager = Me.RibbonControl1 Me.GridWorkflowDetails.MenuManager = Me.RibbonControl1
Me.GridWorkflowDetails.Name = "GridWorkflowDetails" Me.GridWorkflowDetails.Name = "GridWorkflowDetails"
Me.GridWorkflowDetails.Size = New System.Drawing.Size(451, 390) Me.GridWorkflowDetails.Size = New System.Drawing.Size(281, 390)
Me.GridWorkflowDetails.TabIndex = 1 Me.GridWorkflowDetails.TabIndex = 1
Me.GridWorkflowDetails.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.tvDetails}) Me.GridWorkflowDetails.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.tvDetails})
' '
@ -273,19 +207,19 @@ Partial Class frmWorkflowOverview
Me.LayoutControl1.Name = "LayoutControl1" Me.LayoutControl1.Name = "LayoutControl1"
Me.LayoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = New System.Drawing.Rectangle(1186, 56, 650, 400) Me.LayoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = New System.Drawing.Rectangle(1186, 56, 650, 400)
Me.LayoutControl1.Root = Me.LayoutControlGroup1 Me.LayoutControl1.Root = Me.LayoutControlGroup1
Me.LayoutControl1.Size = New System.Drawing.Size(451, 166) Me.LayoutControl1.Size = New System.Drawing.Size(281, 166)
Me.LayoutControl1.TabIndex = 0 Me.LayoutControl1.TabIndex = 0
Me.LayoutControl1.Text = "LayoutControl1" Me.LayoutControl1.Text = "LayoutControl1"
' '
'WindowsUIButtonPanel1 'WindowsUIButtonPanel1
' '
WindowsUIButtonImageOptions3.Image = CType(resources.GetObject("WindowsUIButtonImageOptions3.Image"), System.Drawing.Image) WindowsUIButtonImageOptions1.Image = CType(resources.GetObject("WindowsUIButtonImageOptions1.Image"), System.Drawing.Image)
WindowsUIButtonImageOptions4.Image = CType(resources.GetObject("WindowsUIButtonImageOptions4.Image"), System.Drawing.Image) WindowsUIButtonImageOptions2.Image = CType(resources.GetObject("WindowsUIButtonImageOptions2.Image"), System.Drawing.Image)
Me.WindowsUIButtonPanel1.Buttons.AddRange(New DevExpress.XtraEditors.ButtonPanel.IBaseButton() {New DevExpress.XtraBars.Docking2010.WindowsUIButton("Verlängerung", True, WindowsUIButtonImageOptions3, DevExpress.XtraBars.Docking2010.ButtonStyle.PushButton, "", -1, True, Nothing, True, False, True, Nothing, -1, False), New DevExpress.XtraBars.Docking2010.WindowsUIButton("Kündigung", True, WindowsUIButtonImageOptions4, DevExpress.XtraBars.Docking2010.ButtonStyle.PushButton, "", -1, True, Nothing, True, False, True, Nothing, -1, False)}) Me.WindowsUIButtonPanel1.Buttons.AddRange(New DevExpress.XtraEditors.ButtonPanel.IBaseButton() {New DevExpress.XtraBars.Docking2010.WindowsUIButton("Verlängerung", True, WindowsUIButtonImageOptions1, DevExpress.XtraBars.Docking2010.ButtonStyle.PushButton, "", -1, True, Nothing, True, False, True, Nothing, -1, False), New DevExpress.XtraBars.Docking2010.WindowsUIButton("Kündigung", True, WindowsUIButtonImageOptions2, DevExpress.XtraBars.Docking2010.ButtonStyle.PushButton, "", -1, True, Nothing, True, False, True, Nothing, -1, False)})
Me.WindowsUIButtonPanel1.ContentAlignment = System.Drawing.ContentAlignment.MiddleLeft Me.WindowsUIButtonPanel1.ContentAlignment = System.Drawing.ContentAlignment.MiddleLeft
Me.WindowsUIButtonPanel1.Location = New System.Drawing.Point(12, 96) Me.WindowsUIButtonPanel1.Location = New System.Drawing.Point(12, 96)
Me.WindowsUIButtonPanel1.Name = "WindowsUIButtonPanel1" Me.WindowsUIButtonPanel1.Name = "WindowsUIButtonPanel1"
Me.WindowsUIButtonPanel1.Size = New System.Drawing.Size(427, 55) Me.WindowsUIButtonPanel1.Size = New System.Drawing.Size(257, 55)
Me.WindowsUIButtonPanel1.TabIndex = 0 Me.WindowsUIButtonPanel1.TabIndex = 0
Me.WindowsUIButtonPanel1.Text = "WindowsUIButtonPanel1" Me.WindowsUIButtonPanel1.Text = "WindowsUIButtonPanel1"
' '
@ -295,7 +229,7 @@ Partial Class frmWorkflowOverview
Me.LayoutControlGroup1.GroupBordersVisible = False Me.LayoutControlGroup1.GroupBordersVisible = False
Me.LayoutControlGroup1.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.SimpleLabelItem1, Me.LayoutControlItem2, Me.SimpleLabelItem2, Me.SimpleLabelItem3}) Me.LayoutControlGroup1.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.SimpleLabelItem1, Me.LayoutControlItem2, Me.SimpleLabelItem2, Me.SimpleLabelItem3})
Me.LayoutControlGroup1.Name = "Root" Me.LayoutControlGroup1.Name = "Root"
Me.LayoutControlGroup1.Size = New System.Drawing.Size(451, 166) Me.LayoutControlGroup1.Size = New System.Drawing.Size(281, 166)
Me.LayoutControlGroup1.TextVisible = False Me.LayoutControlGroup1.TextVisible = False
' '
'SimpleLabelItem1 'SimpleLabelItem1
@ -307,7 +241,7 @@ Partial Class frmWorkflowOverview
Me.SimpleLabelItem1.AppearanceItemCaption.Options.UseForeColor = True Me.SimpleLabelItem1.AppearanceItemCaption.Options.UseForeColor = True
Me.SimpleLabelItem1.Location = New System.Drawing.Point(0, 0) Me.SimpleLabelItem1.Location = New System.Drawing.Point(0, 0)
Me.SimpleLabelItem1.Name = "SimpleLabelItem1" Me.SimpleLabelItem1.Name = "SimpleLabelItem1"
Me.SimpleLabelItem1.Size = New System.Drawing.Size(431, 34) Me.SimpleLabelItem1.Size = New System.Drawing.Size(261, 34)
Me.SimpleLabelItem1.Text = "Vertragsnr. 4711" Me.SimpleLabelItem1.Text = "Vertragsnr. 4711"
Me.SimpleLabelItem1.TextSize = New System.Drawing.Size(151, 30) Me.SimpleLabelItem1.TextSize = New System.Drawing.Size(151, 30)
' '
@ -316,7 +250,7 @@ Partial Class frmWorkflowOverview
Me.LayoutControlItem2.Control = Me.WindowsUIButtonPanel1 Me.LayoutControlItem2.Control = Me.WindowsUIButtonPanel1
Me.LayoutControlItem2.Location = New System.Drawing.Point(0, 84) Me.LayoutControlItem2.Location = New System.Drawing.Point(0, 84)
Me.LayoutControlItem2.Name = "LayoutControlItem2" Me.LayoutControlItem2.Name = "LayoutControlItem2"
Me.LayoutControlItem2.Size = New System.Drawing.Size(431, 62) Me.LayoutControlItem2.Size = New System.Drawing.Size(261, 62)
Me.LayoutControlItem2.TextSize = New System.Drawing.Size(0, 0) Me.LayoutControlItem2.TextSize = New System.Drawing.Size(0, 0)
Me.LayoutControlItem2.TextVisible = False Me.LayoutControlItem2.TextVisible = False
' '
@ -327,7 +261,7 @@ Partial Class frmWorkflowOverview
Me.SimpleLabelItem2.AppearanceItemCaption.Options.UseFont = True Me.SimpleLabelItem2.AppearanceItemCaption.Options.UseFont = True
Me.SimpleLabelItem2.Location = New System.Drawing.Point(0, 59) Me.SimpleLabelItem2.Location = New System.Drawing.Point(0, 59)
Me.SimpleLabelItem2.Name = "SimpleLabelItem2" Me.SimpleLabelItem2.Name = "SimpleLabelItem2"
Me.SimpleLabelItem2.Size = New System.Drawing.Size(431, 25) Me.SimpleLabelItem2.Size = New System.Drawing.Size(261, 25)
Me.SimpleLabelItem2.Text = "Sunshine GmbH" Me.SimpleLabelItem2.Text = "Sunshine GmbH"
Me.SimpleLabelItem2.TextSize = New System.Drawing.Size(151, 21) Me.SimpleLabelItem2.TextSize = New System.Drawing.Size(151, 21)
' '
@ -338,17 +272,24 @@ Partial Class frmWorkflowOverview
Me.SimpleLabelItem3.AppearanceItemCaption.Options.UseFont = True Me.SimpleLabelItem3.AppearanceItemCaption.Options.UseFont = True
Me.SimpleLabelItem3.Location = New System.Drawing.Point(0, 34) Me.SimpleLabelItem3.Location = New System.Drawing.Point(0, 34)
Me.SimpleLabelItem3.Name = "SimpleLabelItem3" Me.SimpleLabelItem3.Name = "SimpleLabelItem3"
Me.SimpleLabelItem3.Size = New System.Drawing.Size(431, 25) Me.SimpleLabelItem3.Size = New System.Drawing.Size(261, 25)
Me.SimpleLabelItem3.Text = "Objekt: Haus Nr. 9" Me.SimpleLabelItem3.Text = "Objekt: Haus Nr. 9"
Me.SimpleLabelItem3.TextSize = New System.Drawing.Size(151, 21) Me.SimpleLabelItem3.TextSize = New System.Drawing.Size(151, 21)
' '
'GridOverview1
'
Me.GridOverview.Dock = System.Windows.Forms.DockStyle.Fill
Me.GridOverview.Location = New System.Drawing.Point(185, 0)
Me.GridOverview.Name = "GridOverview1"
Me.GridOverview.Size = New System.Drawing.Size(656, 556)
Me.GridOverview.TabIndex = 2
'
'frmWorkflowOverview 'frmWorkflowOverview
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(1134, 723) Me.ClientSize = New System.Drawing.Size(1134, 723)
Me.Controls.Add(Me.SplitContainerControl1) Me.Controls.Add(Me.SplitContainerControl1)
Me.Controls.Add(Me.NavBarControl1)
Me.Controls.Add(Me.RibbonStatusBar1) Me.Controls.Add(Me.RibbonStatusBar1)
Me.Controls.Add(Me.RibbonControl1) Me.Controls.Add(Me.RibbonControl1)
Me.Name = "frmWorkflowOverview" Me.Name = "frmWorkflowOverview"
@ -356,12 +297,8 @@ Partial Class frmWorkflowOverview
Me.StatusBar = Me.RibbonStatusBar1 Me.StatusBar = Me.RibbonStatusBar1
Me.Text = "Workflow Übersicht" Me.Text = "Workflow Übersicht"
CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.NavBarControl1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.SplitContainerControl1.ResumeLayout(False) Me.SplitContainerControl1.ResumeLayout(False)
CType(Me.GridWorkflowOverview, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.gvOverview, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.GridView1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.GridWorkflowDetails, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.GridWorkflowDetails, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.tvDetails, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.tvDetails, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).EndInit()
@ -379,11 +316,6 @@ Partial Class frmWorkflowOverview
Friend WithEvents RibbonControl1 As DevExpress.XtraBars.Ribbon.RibbonControl Friend WithEvents RibbonControl1 As DevExpress.XtraBars.Ribbon.RibbonControl
Friend WithEvents RibbonStatusBar1 As DevExpress.XtraBars.Ribbon.RibbonStatusBar Friend WithEvents RibbonStatusBar1 As DevExpress.XtraBars.Ribbon.RibbonStatusBar
Friend WithEvents RibbonPage2 As DevExpress.XtraBars.Ribbon.RibbonPage Friend WithEvents RibbonPage2 As DevExpress.XtraBars.Ribbon.RibbonPage
Friend WithEvents NavBarControl1 As DevExpress.XtraNavBar.NavBarControl
Friend WithEvents NavBarGroup1 As DevExpress.XtraNavBar.NavBarGroup
Friend WithEvents NavBarItem1 As DevExpress.XtraNavBar.NavBarItem
Friend WithEvents NavBarItem2 As DevExpress.XtraNavBar.NavBarItem
Friend WithEvents NavBarItem3 As DevExpress.XtraNavBar.NavBarItem
Friend WithEvents RibbonPageCategory1 As DevExpress.XtraBars.Ribbon.RibbonPageCategory Friend WithEvents RibbonPageCategory1 As DevExpress.XtraBars.Ribbon.RibbonPageCategory
Friend WithEvents RibbonPage3 As DevExpress.XtraBars.Ribbon.RibbonPage Friend WithEvents RibbonPage3 As DevExpress.XtraBars.Ribbon.RibbonPage
Friend WithEvents RibbonPageGroup3 As DevExpress.XtraBars.Ribbon.RibbonPageGroup Friend WithEvents RibbonPageGroup3 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
@ -400,7 +332,6 @@ Partial Class frmWorkflowOverview
Friend WithEvents SimpleLabelItem2 As DevExpress.XtraLayout.SimpleLabelItem Friend WithEvents SimpleLabelItem2 As DevExpress.XtraLayout.SimpleLabelItem
Friend WithEvents SimpleLabelItem3 As DevExpress.XtraLayout.SimpleLabelItem Friend WithEvents SimpleLabelItem3 As DevExpress.XtraLayout.SimpleLabelItem
Friend WithEvents tvDetails As DevExpress.XtraGrid.Views.Tile.TileView Friend WithEvents tvDetails As DevExpress.XtraGrid.Views.Tile.TileView
Friend WithEvents GridWorkflowOverview As DevExpress.XtraGrid.GridControl Friend WithEvents NavControlOverview As NavControlOverview
Friend WithEvents gvOverview As DevExpress.XtraGrid.Views.Grid.GridView Friend WithEvents GridOverview As GridOverview
Friend WithEvents GridView1 As DevExpress.XtraGrid.Views.Grid.GridView
End Class End Class

View File

@ -202,45 +202,7 @@
W58VxiTarZhsp2KynYrJ9ml1/AZUr3hglRjmdgAAAABJRU5ErkJggg== W58VxiTarZhsp2KynYrJ9ml1/AZUr3hglRjmdgAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<data name="NavBarGroup1.ImageOptions.SmallImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="WindowsUIButtonImageOptions1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAsdEVYdFRpdGxlAERvY3VtZW50O01hcDtTY2hlbWU7
RGlhZ3JhbTtIaWVyYXI7TmV0Tg8qRAAAAHVJREFUOE/NzMENgDAMQ9EuyDoMwBKMwLXHbhf0JUBtYqCo
Fw5PCNdOMrMhMpyWYorvIQRQY/geQgA1hu8hBFBj+B5CADWG7yEEUGP4HkJQyznbQb6j+akGbx4P8D1d
A5e1B+ZttRqFnuz2wJfsJwdGyLCfpR37LNV02NfAHQAAAABJRU5ErkJggg==
</value>
</data>
<data name="NavBarItem1.ImageOptions.SmallImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAWdEVYdFRpdGxlAFByb2R1Y3Q7Qm94O0l0ZW0O9Rpk
AAAAR0lEQVQ4T2P4//8/RRhMvDtS9J8cPIgMoASDCaiJ39DwSyB+DsVvoWLIGKgVjxdA4sgYlxraGUAM
HjWAmgZQgrEKEo//MwAAv2IUTk4dsmsAAAAASUVORK5CYII=
</value>
</data>
<data name="NavBarItem2.ImageOptions.SmallImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAsdEVYdFRpdGxlAEFkZDtJdGVtO0FkZEl0ZW07QmFy
cztSaWJib247SXRlbTtQbHVzTjLvgQAAAG5JREFUOE/VjNEJgDAMBbOTc7iU5LvzuIyL+GFMpJXX0laD
iHhwNLTNkYg88hyYWTpu8Rxw2cwCPew9hLCUEVdAWcuIK4AqvgDy08A4zYeG/dX5w4BxK5CWWiovBxBY
pKRe54GWxmWgJn5WKwGhHZsDINkhyk7EAAAAAElFTkSuQmCC
</value>
</data>
<data name="NavBarItem3.ImageOptions.SmallImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAPdEVYdFRpdGxlAFNob3c7RXllO0njByUAAAE3SURB
VDhPpZKxSsRQEEXzG5ba+QHCYuMX+Df6AxIIWKQMiGBSprEQLBYbixSRFNkopNDeRgxaCAsmYZzzyJO3
MeKqAwfe3Ll3svsST0T+xaT4G74Ivu/vKqdRFEkQBAbtH9CYjf1ucFO5SpJEFouFNE0jXdcZOKMxw4N3
ZYEKe8pLnufairwtW7m+e5TDsxvTu4UHLxltPcLbymtd18ZA+Pj8VvaP5oapwkuGLAvmRVEMIzFPtuHv
FlBkyLJg2bbtIIv52essIEP2xwUu7p24Cy7s5VHjv+DCzJbmDsiyYEt5rqrKDMaXaEFjRuElQ9a+xp0w
DCXLMmNwXyNwtmE86n8io+3Kh7SRpqnEcSxlWZqPp+97A2c09eTKJV6b+1xg0eFMOVHulfcBzmizsX+l
+QuT4vqI9wEq0AjdmqGMVgAAAABJRU5ErkJggg==
</value>
</data>
<data name="WindowsUIButtonImageOptions3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAARdEVYdFRpdGxlAFJlc2V0O1VuZG87E4EW/wAAAYJJ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAARdEVYdFRpdGxlAFJlc2V0O1VuZG87E4EW/wAAAYJJ
@ -253,7 +215,7 @@
K9kcZZfSFoz19a7lS5A6K0mdlaTOOsbVD4kgpriFBNvrAAAAAElFTkSuQmCC K9kcZZfSFoz19a7lS5A6K0mdlaTOOsbVD4kgpriFBNvrAAAAAElFTkSuQmCC
</value> </value>
</data> </data>
<data name="WindowsUIButtonImageOptions4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="WindowsUIButtonImageOptions2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAApdEVYdFRpdGxlAFJlbW92ZTtEZWxldGU7QmFycztS dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAApdEVYdFRpdGxlAFJlbW92ZTtEZWxldGU7QmFycztS

View File

@ -5,45 +5,42 @@ Public Class frmWorkflowOverview
Private WorkflowItems As BindingList(Of WorkflowItem) Private WorkflowItems As BindingList(Of WorkflowItem)
Private WorkflowDetails As BindingList(Of WorkflowDetail) Private WorkflowDetails As BindingList(Of WorkflowDetail)
Private Sub frmWorkflowOverview_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Async Sub frmWorkflowOverview_Load(sender As Object, e As EventArgs) Handles MyBase.Load
WorkflowItems = New BindingList(Of WorkflowItem) From { Dim oDatatable As DataTable
New WorkflowItem() With { Dim oWorkflows As New List(Of WorkflowItem)
.Title = "Eingangsrechnung XYZ",
.State = WorkflowItem.ItemState.Danger,
.WorkflowName = "Rechnungseingang",
.CreatedAt = DateTime.Now.AddDays(-3)
},
New WorkflowItem() With {
.Title = "Eingangsrechnung ABC",
.State = WorkflowItem.ItemState.Normal,
.WorkflowName = "Rechnungseingang",
.CreatedAt = DateTime.Now
},
New WorkflowItem() With {
.Title = "Mietvertrag XYZ läuft aus",
.State = WorkflowItem.ItemState.Warning,
.WorkflowName = "Vertragsprüfung",
.CreatedAt = DateTime.Now.AddDays(-1)
}
}
WorkflowDetails = New BindingList(Of WorkflowDetail) From { Try
New WorkflowDetail() With { oDatatable = Await My.Common.Views.VWIDB_GUI_WF_OVERVIEW(70, 104)
.Title = "foooo!"
}
}
GridWorkflowOverview.DataSource = WorkflowItems For Each oRow As DataRow In oDatatable.Rows
GridWorkflowDetails.DataSource = WorkflowDetails oWorkflows.Add(New WorkflowItem() With {
.Title = oRow.Item("REQUEST_TITLE"),
.State = oRow.Item("STATETITLE"),
.Process = oRow.Item("PROCESS_NAME")
})
Next
Catch ex As Exception
ShowErrorMessage(ex)
End Try
gvOverview.GroupFormat = "[#image]{1} {2}" GridOverview.DataSource = oWorkflows
NavControlOverview.DataSource = oWorkflows
With gvOverview.Columns.Item("CreatedAt")
.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.DateAlt
.GroupInterval = DevExpress.XtraGrid.ColumnGroupInterval.DateRange
.SortOrder = DevExpress.Data.ColumnSortOrder.Descending
.Group() 'gvOverview.GroupFormat = "[#image]{1} {2}"
End With 'With gvOverview.Columns.Item("CreatedAt")
' .OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.DateAlt
' .GroupInterval = DevExpress.XtraGrid.ColumnGroupInterval.DateRange
' .SortOrder = DevExpress.Data.ColumnSortOrder.Descending
' .Group()
'End With
End Sub End Sub
Private Sub frmWorkflowOverview_Shown(sender As Object, e As EventArgs) Handles Me.Shown
RibbonControl1.SelectPage(RibbonPage3)
End Sub
End Class End Class

View File

@ -124,7 +124,9 @@ Public Class ConfigManager(Of T)
Dim oType As Type = GetType(T) Dim oType As Type = GetType(T)
Dim oExcludedAttributeTypes = IIf(IsNothing(ExcludedAttributeTypes), New List(Of Type), ExcludedAttributeTypes) Dim oExcludedAttributeTypes = IIf(IsNothing(ExcludedAttributeTypes), New List(Of Type), ExcludedAttributeTypes)
Dim oProperties = oType.GetProperties(). Dim oProperties = oType.GetProperties().
Where(Function(p) p.CanRead And p.CanWrite). Where(Function(p)
Return p.CanRead And p.CanWrite
End Function).
Where(Function(p) Where(Function(p)
For Each oAttributeType As Type In oExcludedAttributeTypes For Each oAttributeType As Type In oExcludedAttributeTypes
If Attribute.IsDefined(p, oAttributeType) Then If Attribute.IsDefined(p, oAttributeType) Then