Reconfigure for GIT

This commit is contained in:
2017-03-26 20:00:03 +02:00
commit 00637826ab
8056 changed files with 535977 additions and 0 deletions
@@ -0,0 +1,113 @@
Imports System
Imports System.ComponentModel
Imports DevExpress.Xpo
Imports DevExpress.Data.Filtering
Imports DevExpress.ExpressApp
Imports DevExpress.Persistent.Base
Imports DevExpress.Persistent.BaseImpl
Imports DevExpress.Persistent.Validation
Imports DevExpress.ExpressApp.ConditionalAppearance
<DefaultClassOptions(), NavigationItem(False), CreatableItem(False)> _
<Appearance("EMailSendQueueHeader - Disable QueueNumber", TargetItems:="QueueNumber", Criteria:="1=1", Enabled:=False, Context:="DetailView")> _
<Appearance("EMailSendQueueHeader - Disable ObjectCreated", TargetItems:="ObjectCreated", Criteria:="1=1", Enabled:=False, Context:="DetailView")> _
<Appearance("EMailSendQueueHeader - Disable UserCreated", TargetItems:="UserCreated", Criteria:="1=1", Enabled:=False, Context:="DetailView")> _
<Appearance("EMailSendQueueHeader - Disable IsExecuted", TargetItems:="IsExecuted", Criteria:="1=1", Enabled:=False, Context:="DetailView")> _
Public Class EMailSendQueueHeader
Inherits BaseObject
Private _QueueNumber As String
Private _ShortName As String 'Csomag megnevezése
Private _EmailSendQueueParameters As EMailSendQueueParameters
Private _UserCreated As User 'Létrehozta
Private _ObjectCreated As Date 'Létrehozva
Private _ScheduleDateTime As Date 'Mikorra ütemezzük
Private _IsExecuted As Boolean 'El lett-e már küldve
Public Sub New(ByVal session As Session)
MyBase.New(session)
End Sub
Public Overrides Sub AfterConstruction()
MyBase.AfterConstruction()
IsExecuted = False
End Sub
Protected Overrides Sub OnSaving()
MyBase.OnSaving()
If String.IsNullOrEmpty(QueueNumber) Then QueueNumber = EmailSendQueueParameters.NumberGenerator.GetNewNumber(EmailSendQueueParameters.NumberGenerator)
If Session.IsNewObject(Me) Then
ObjectCreated = GetSQLTime(Session)
UserCreated = Session.GetObjectByKey(Of User)(Session.GetKeyValue(SecuritySystem.CurrentUser))
End If
End Sub
Property QueueNumber As String
Get
Return _QueueNumber
End Get
Set(value As String)
SetPropertyValue("QueueNumber", _QueueNumber, value)
End Set
End Property
<Size(255)> _
Property ShortName As String
Get
Return _ShortName
End Get
Set(value As String)
SetPropertyValue("ShortName", _ShortName, value)
End Set
End Property
<RuleRequiredField("EMailSendQueueHeader - EmailSendQueueParameters ", DefaultContexts.Save)> _
Property EmailSendQueueParameters As EMailSendQueueParameters
Get
Return _EmailSendQueueParameters
End Get
Set(value As EMailSendQueueParameters)
SetPropertyValue("EmailSendQueueParameters", _EmailSendQueueParameters, value)
End Set
End Property
<NonCloneable> _
Property UserCreated As User
Get
Return _UserCreated
End Get
Set(value As User)
SetPropertyValue("UserCreated", _UserCreated, value)
End Set
End Property
<NonCloneable> _
Property ObjectCreated As Date
Get
Return _ObjectCreated
End Get
Set(value As Date)
SetPropertyValue("ObjectCreated", _ObjectCreated, value)
End Set
End Property
Property ScheduleDateTime As Date
Get
Return _ScheduleDateTime
End Get
Set(value As Date)
SetPropertyValue("ScheduleDateTime", _ScheduleDateTime, value)
End Set
End Property
Property IsExecuted As Boolean
Get
Return _IsExecuted
End Get
Set(value As Boolean)
SetPropertyValue("IsExecuted", _IsExecuted, value)
End Set
End Property
'-------------ReadOnly------------
<Association("EMailSendQueueHeader-EMailSendQueueRows", GetType(EMailSendQueueRows)), VisibleInListView(False)> _
ReadOnly Property EMailSendQueueRows As XPCollection(Of EMailSendQueueRows)
Get
Return GetCollection(Of EMailSendQueueRows)("EMailSendQueueRows")
End Get
End Property
End Class
@@ -0,0 +1,72 @@
Imports System
Imports System.ComponentModel
Imports DevExpress.Xpo
Imports DevExpress.Data.Filtering
Imports DevExpress.ExpressApp
Imports DevExpress.Persistent.Base
Imports DevExpress.Persistent.BaseImpl
Imports DevExpress.Persistent.Validation
<DefaultClassOptions(), NavigationItem(False), CreatableItem(False)> _
Public Class EMailSendQueueParameters
Inherits BaseObject
Private _ShortName As String
Private _NumberGenerator As NumberGenerator
Private _HTMLBody As String 'Alapértelmezett HTML body
Private _Subject As String 'Alapértelmezett tárgy mezõ {0},{1} formátumban
Private _EMailFrom As String
Public Sub New(ByVal session As Session)
MyBase.New(session)
End Sub
Public Overrides Sub AfterConstruction()
MyBase.AfterConstruction()
End Sub
<RuleRequiredField("EMailSendQueueParameters - ShortName ", DefaultContexts.Save)> _
Property ShortName As String
Get
Return _ShortName
End Get
Set(value As String)
SetPropertyValue("ShortName", _ShortName, value)
End Set
End Property
<RuleRequiredField("EMailSendQueueParameters - NumberGenerator ", DefaultContexts.Save)> _
Property NumberGenerator As NumberGenerator
Get
Return _NumberGenerator
End Get
Set(value As NumberGenerator)
SetPropertyValue("NumberGenerator", _NumberGenerator, value)
End Set
End Property
<Size(-1)> _
Property HTMLBody As String
Get
Return _HTMLBody
End Get
Set(value As String)
SetPropertyValue("HTMLBody", _HTMLBody, value)
End Set
End Property
<Size(255)> _
Property Subject As String
Get
Return _Subject
End Get
Set(value As String)
SetPropertyValue("Subject", _Subject, value)
End Set
End Property
Property EMailFrom As String
Get
Return _EMailFrom
End Get
Set(value As String)
SetPropertyValue("EMailFrom", _EMailFrom, value)
End Set
End Property
End Class
@@ -0,0 +1,132 @@
Imports System
Imports System.ComponentModel
Imports DevExpress.Xpo
Imports DevExpress.Data.Filtering
Imports DevExpress.ExpressApp
Imports DevExpress.Persistent.Base
Imports DevExpress.Persistent.BaseImpl
Imports DevExpress.Persistent.Validation
'
<DefaultClassOptions(), NavigationItem(False), CreatableItem(False)> _
Public Class EMailSendQueueRows
Inherits BaseObject
Private _EMailSendQueueHeader As EMailSendQueueHeader
Private _EMailFrom As String '255
Private _EMailTo As String '255
Private _Subject As String '255
Private _HTMLBody As String '-1
Private _FileAttachments1 As FileData
Private _FileAttachments2 As FileData
Private _FileAttachments3 As FileData
Private _ExceptionMessage As String ' -1
Public Sub New(ByVal session As Session)
MyBase.New(session)
End Sub
Public Overrides Sub AfterConstruction()
MyBase.AfterConstruction()
End Sub
Protected Overrides Sub OnDeleting()
MyBase.OnDeleting()
Dim _AssetsHandling As AssetsHandling
Dim _AssetsHandling_Collection As New XPCollection(Of AssetsHandling)(Session, CriteriaOperator.Parse("EMailSendQueueRows=?", Me))
For Each _AssetsHandling In _AssetsHandling_Collection
_AssetsHandling.EMailSendQueueRows = Nothing
Dim _AssetsHandlingStatus As AssetsHandlingStatus = Session.FindObject(Of AssetsHandlingStatus)(CriteriaOperator.Parse("QueueIndex=0"))
If _AssetsHandling.InvoiceHeader IsNot Nothing Then
_AssetsHandling.InvoiceHeader.AssetsHandlingStatus = _AssetsHandlingStatus
End If
Next
End Sub
<Association("EMailSendQueueHeader-EMailSendQueueRows", GetType(EMailSendQueueHeader))> _
Property EMailSendQueueHeader As EMailSendQueueHeader
Get
Return _EMailSendQueueHeader
End Get
Set(value As EMailSendQueueHeader)
SetPropertyValue("EMailSendQueueHeader", _EMailSendQueueHeader, value)
End Set
End Property
<Size(255)> _
Property EMailFrom As String
Get
Return _EMailFrom
End Get
Set(value As String)
SetPropertyValue("EMailFrom", _EMailFrom, value)
End Set
End Property
<Size(255)> _
Property EMailTo As String
Get
Return _EMailTo
End Get
Set(value As String)
SetPropertyValue("EMailTo", _EMailTo, value)
End Set
End Property
<Size(255)> _
Property Subject As String
Get
Return _Subject
End Get
Set(value As String)
SetPropertyValue("Subject", _Subject, value)
End Set
End Property
<Size(-1)> _
Property HTMLBody As String
Get
Return _HTMLBody
End Get
Set(value As String)
SetPropertyValue("HTMLBody", _HTMLBody, value)
End Set
End Property
Property FileAttachments1 As FileData
Get
Return _FileAttachments1
End Get
Set(value As FileData)
SetPropertyValue("FileAttachments1", _FileAttachments1, value)
End Set
End Property
Property FileAttachments2 As FileData
Get
Return _FileAttachments2
End Get
Set(value As FileData)
SetPropertyValue("FileAttachments2", _FileAttachments2, value)
End Set
End Property
Property FileAttachments3 As FileData
Get
Return _FileAttachments3
End Get
Set(value As FileData)
SetPropertyValue("FileAttachments3", _FileAttachments3, value)
End Set
End Property
Property ExceptionMessage As String
Get
Return _ExceptionMessage
End Get
Set(value As String)
SetPropertyValue("ExceptionMessage", _ExceptionMessage, value)
End Set
End Property
'ReadOnly
<Association("EMailSendQueueRows-EMailSendQueueRows_FileAttachment", GetType(EMailSendQueueRows_FileAttachment)), VisibleInListView(False)> _
ReadOnly Property EMailSendQueueRows_FileAttachment As XPCollection(Of EMailSendQueueRows_FileAttachment)
Get
Return GetCollection(Of EMailSendQueueRows_FileAttachment)("EMailSendQueueRows_FileAttachment")
End Get
End Property
End Class
@@ -0,0 +1,43 @@
Imports System
Imports System.ComponentModel
Imports DevExpress.Xpo
Imports DevExpress.Data.Filtering
Imports DevExpress.ExpressApp
Imports DevExpress.Persistent.Base
Imports DevExpress.Persistent.BaseImpl
Imports DevExpress.Persistent.Validation
<DefaultClassOptions()> _
Public Class EMailSendQueueRows_FileAttachment
Inherits BaseObject
Private _EMailSendQueueRows As EMailSendQueueRows
Private _FileAttachments As FileData
Public Sub New(ByVal session As Session)
MyBase.New(session)
End Sub
Public Overrides Sub AfterConstruction()
MyBase.AfterConstruction()
End Sub
<Association("EMailSendQueueRows-EMailSendQueueRows_FileAttachment", GetType(EMailSendQueueRows))> _
Property EMailSendQueueRows As EMailSendQueueRows
Get
Return _EMailSendQueueRows
End Get
Set(value As EMailSendQueueRows)
SetPropertyValue("EMailSendQueueRows", _EMailSendQueueRows, value)
End Set
End Property
Property FileAttachments As FileData
Get
Return _FileAttachments
End Get
Set(value As FileData)
SetPropertyValue("FileAttachments", _FileAttachments, value)
End Set
End Property
End Class
@@ -0,0 +1,50 @@
Partial Class EMailSendQueueVC
<System.Diagnostics.DebuggerNonUserCode()> _
Public Sub New(ByVal Container As System.ComponentModel.IContainer)
MyClass.New()
'Required for Windows.Forms Class Composition Designer support
Container.Add(Me)
End Sub
'Component overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Component Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Component Designer
'It can be modified using the Component Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.aEMailSendQueue_Send = New DevExpress.ExpressApp.Actions.SimpleAction(Me.components)
'
'aEMailSendQueue_Send
'
Me.aEMailSendQueue_Send.Caption = "aEMailSendQueue_Send"
Me.aEMailSendQueue_Send.ConfirmationMessage = Nothing
Me.aEMailSendQueue_Send.Id = "aEMailSendQueue_Send"
Me.aEMailSendQueue_Send.ImageName = Nothing
Me.aEMailSendQueue_Send.SelectionDependencyType = DevExpress.ExpressApp.Actions.SelectionDependencyType.RequireMultipleObjects
Me.aEMailSendQueue_Send.Shortcut = Nothing
Me.aEMailSendQueue_Send.Tag = Nothing
Me.aEMailSendQueue_Send.TargetObjectsCriteria = Nothing
Me.aEMailSendQueue_Send.TargetObjectType = GetType(SISBusiness.[Module].EMailSendQueueHeader)
Me.aEMailSendQueue_Send.TargetViewId = Nothing
Me.aEMailSendQueue_Send.ToolTip = Nothing
Me.aEMailSendQueue_Send.TypeOfView = Nothing
End Sub
Friend WithEvents aEMailSendQueue_Send As DevExpress.ExpressApp.Actions.SimpleAction
End Class
@@ -0,0 +1,126 @@
<?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>
<metadata name="aEMailSendQueue_Send.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>
@@ -0,0 +1,102 @@
Imports System
Imports System.ComponentModel
Imports System.Collections.Generic
Imports System.Diagnostics
Imports System.Text
Imports System.Net.Mail
Imports DevExpress.ExpressApp
Imports DevExpress.ExpressApp.Actions
Imports DevExpress.Persistent.Base
Imports DevExpress.Data.Filtering
Imports System.IO
Imports DevExpress.ExpressApp.Utils
Public Class EMailSendQueueVC
Inherits DevExpress.ExpressApp.ViewController
Public Sub New()
MyBase.New()
InitializeComponent()
RegisterActions(components)
End Sub
Protected Overrides Sub OnActivated()
MyBase.OnActivated()
End Sub
Protected Overrides Sub OnDeactivated()
MyBase.OnDeactivated()
End Sub
Private Sub aEMailSendQueue_Send_Execute(sender As Object, e As SimpleActionExecuteEventArgs) Handles aEMailSendQueue_Send.Execute
Try
Dim _ocur As Xpo.XPObjectSpace = TryCast(View.ObjectSpace, Xpo.XPObjectSpace)
If View.SelectedObjects.Count = 0 Then Throw New Exception("*Nincs kiválasztva egyetlen sor sem! A folyamat megszakadt!")
Dim _WebParameters As WebParameters = _ocur.FindObject(Of WebParameters)(CriteriaOperator.Parse("1=1"))
If String.IsNullOrEmpty(_WebParameters.SMTPHost) Or
String.IsNullOrEmpty(_WebParameters.SMTPPassword) Or
String.IsNullOrEmpty(_WebParameters.SMTPPort) Or
String.IsNullOrEmpty(_WebParameters.SMTPUserName) Then Throw New Exception("*Hiányosak az SMTP Server adatok! Kérem, ellenõrizze!")
For Each _EMailSendQueueHeader As EMailSendQueueHeader In View.SelectedObjects
If _EMailSendQueueHeader.EMailSendQueueRows.Count > 0 Then
Dim _SMTPServer As New SmtpClient
With (_SMTPServer)
.Credentials = New Net.NetworkCredential(_WebParameters.SMTPUserName, _WebParameters.SMTPPassword)
.Port = _WebParameters.SMTPPort
.Host = _WebParameters.SMTPHost
.EnableSsl = _WebParameters.EnableSsl
End With
For Each _EMailSendQueueRows As EMailSendQueueRows In _EMailSendQueueHeader.EMailSendQueueRows
Try
Dim _Mail As New MailMessage
With (_Mail)
.From = New MailAddress(_EMailSendQueueRows.EMailFrom)
.To.Add(_EMailSendQueueRows.EMailTo)
.Subject = _EMailSendQueueRows.Subject
.IsBodyHtml = True
.Body = _EMailSendQueueRows.HTMLBody
If _EMailSendQueueRows.FileAttachments1 IsNot Nothing Then
Dim _MemoryStream As New MemoryStream()
_EMailSendQueueRows.FileAttachments1.SaveToStream(_MemoryStream)
_MemoryStream.Seek(0, System.IO.SeekOrigin.Begin)
Dim _Attachment = New Attachment(_MemoryStream, _EMailSendQueueRows.FileAttachments1.FileName, "application/pdf")
.Attachments.Add(_Attachment)
End If
If _EMailSendQueueRows.FileAttachments2 IsNot Nothing Then
Dim _MemoryStream As New MemoryStream()
_EMailSendQueueRows.FileAttachments2.SaveToStream(_MemoryStream)
_MemoryStream.Seek(0, System.IO.SeekOrigin.Begin)
Dim _Attachment = New Attachment(_MemoryStream, _EMailSendQueueRows.FileAttachments2.FileName, "application/pdf")
.Attachments.Add(_Attachment)
End If
If _EMailSendQueueRows.FileAttachments3 IsNot Nothing Then
Dim _MemoryStream As New MemoryStream()
_EMailSendQueueRows.FileAttachments3.SaveToStream(_MemoryStream)
_MemoryStream.Seek(0, System.IO.SeekOrigin.Begin)
Dim _Attachment = New Attachment(_MemoryStream, _EMailSendQueueRows.FileAttachments3.FileName, "application/pdf")
.Attachments.Add(_Attachment)
End If
For Each _EMailSendQueueRows_FileAttachment As EMailSendQueueRows_FileAttachment In _EMailSendQueueRows.EMailSendQueueRows_FileAttachment
Dim _MemoryStream As New MemoryStream()
_EMailSendQueueRows_FileAttachment.FileAttachments.SaveToStream(_MemoryStream)
_MemoryStream.Seek(0, System.IO.SeekOrigin.Begin)
Dim _Attachment = New Attachment(_MemoryStream, _EMailSendQueueRows_FileAttachment.FileAttachments.FileName, "application/pdf")
.Attachments.Add(_Attachment)
Next
End With
_SMTPServer.Send(_Mail)
_EMailSendQueueRows.ExceptionMessage = ""
Catch ex As Exception
_EMailSendQueueRows.ExceptionMessage = ex.Message
End Try
Next
End If
_EMailSendQueueHeader.IsExecuted = True
Next
_ocur.CommitChanges()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, String.Format(CaptionHelper.GetLocalizedText("Exceptions\SISBusinessExceptions", "MsgBoxCheckItAgain")))
End Try
End Sub
End Class