|
|
|
|
@@ -2,28 +2,25 @@
|
|
|
|
|
Imports WINDREAMLib.WMCOMEvent
|
|
|
|
|
Imports WINDREAMLib.WMEntity
|
|
|
|
|
Imports WINDREAMLib.WMObjectEditMode
|
|
|
|
|
|
|
|
|
|
Imports WINDREAMLib.WMSearchOperator
|
|
|
|
|
Imports WINDREAMLib.WMSearchRelation
|
|
|
|
|
Imports WMOBRWSLib
|
|
|
|
|
Imports WMOSRCHLib
|
|
|
|
|
Imports WMCNNCTDLLLib
|
|
|
|
|
Imports WMOTOOLLib
|
|
|
|
|
Imports NLog
|
|
|
|
|
Imports System.IO
|
|
|
|
|
Imports DigitalData.Modules.Logging
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
|
|
|
''' MODULE: Windream
|
|
|
|
|
'''
|
|
|
|
|
''' VERSION: 0.0.0.1
|
|
|
|
|
''' VERSION: 0.0.0.2
|
|
|
|
|
'''
|
|
|
|
|
''' DATE: 27.08.2018
|
|
|
|
|
''' DATE: 08.10.2018
|
|
|
|
|
'''
|
|
|
|
|
''' DESCRIPTION:
|
|
|
|
|
'''
|
|
|
|
|
''' DEPENDENCIES: NLog, >= 4.5.8
|
|
|
|
|
'''
|
|
|
|
|
''' PARAMETERS: LogFactory, NLog.LogFactory
|
|
|
|
|
''' PARAMETERS: LogConfig, DigitalData.Modules.Logging.LogConfig
|
|
|
|
|
''' The LogFactory containing the current log config. Used to instanciate the class logger for this and any dependent class
|
|
|
|
|
'''
|
|
|
|
|
''' ClientDriveLetter, String
|
|
|
|
|
@@ -60,10 +57,9 @@ Imports System.IO
|
|
|
|
|
''' REMARKS: This class should not be instanciated directly. Instead, ConnectionBuilder should be used.
|
|
|
|
|
''' </summary>
|
|
|
|
|
Public Class Windream2
|
|
|
|
|
Const WMObjectStreamOpenModeReadWrite = 2
|
|
|
|
|
#Region "Private Properties"
|
|
|
|
|
Private ReadOnly _logger As Logger
|
|
|
|
|
Private ReadOnly _loggerFactory As LogFactory
|
|
|
|
|
Private ReadOnly _logConfig As LogConfig
|
|
|
|
|
|
|
|
|
|
Private ReadOnly Property _sessionDomain As String
|
|
|
|
|
Private ReadOnly Property _sessionPassword As String
|
|
|
|
|
@@ -97,7 +93,7 @@ Public Class Windream2
|
|
|
|
|
''' <summary>
|
|
|
|
|
''' Creates a new Windream object and connects to a server with the provided options and credentials
|
|
|
|
|
''' </summary>
|
|
|
|
|
''' <param name="LogFactory"></param>
|
|
|
|
|
''' <param name="LogConfig"></param>
|
|
|
|
|
''' <param name="SessionReconnect"></param>
|
|
|
|
|
''' <param name="ClientDriveLetter"></param>
|
|
|
|
|
''' <param name="ClientSupport64Bit"></param>
|
|
|
|
|
@@ -106,10 +102,10 @@ Public Class Windream2
|
|
|
|
|
''' <param name="SessionPassword"></param>
|
|
|
|
|
''' <param name="SessionDomain"></param>
|
|
|
|
|
''' <exception cref="Exceptions.SessionException"></exception>
|
|
|
|
|
Public Sub New(LogFactory As LogFactory, SessionReconnect As Boolean, ClientDriveLetter As String, ClientSupport64Bit As Boolean, SessionServerName As String, SessionUserName As String, SessionPassword As String, SessionDomain As String)
|
|
|
|
|
Public Sub New(LogConfig As LogConfig, SessionReconnect As Boolean, ClientDriveLetter As String, ClientSupport64Bit As Boolean, SessionServerName As String, SessionUserName As String, SessionPassword As String, SessionDomain As String)
|
|
|
|
|
' Create logger and save LogFactory for dependent classes
|
|
|
|
|
_logger = LogFactory.GetCurrentClassLogger()
|
|
|
|
|
_loggerFactory = LogFactory
|
|
|
|
|
_logger = LogConfig.GetLogger()
|
|
|
|
|
_logConfig = LogConfig
|
|
|
|
|
|
|
|
|
|
' Create a session
|
|
|
|
|
Dim oSession As IWMSession2 = NewSession(SessionServerName, SessionUserName, SessionPassword, SessionDomain)
|
|
|
|
|
@@ -268,107 +264,170 @@ Public Class Windream2
|
|
|
|
|
End Try
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Public Function NewStream_File(ByVal FilenameSource As String, ByVal filenameTarget As String)
|
|
|
|
|
Public Function NewFileStream(ByVal FilenameSource As String, ByVal FilenameTarget As String) As Boolean
|
|
|
|
|
'Try
|
|
|
|
|
Dim oExtension As String = Path.GetExtension(FilenameSource)
|
|
|
|
|
_logger.Debug("Stream_File was started...")
|
|
|
|
|
If Not TestSessionLoggedIn() Then
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
Dim oTargetDrive As String = Path.GetDirectoryName(FilenameTarget)
|
|
|
|
|
FilenameTarget = GetNormalizedPath(FilenameTarget)
|
|
|
|
|
|
|
|
|
|
_logger.Debug($"Streaming file from {FilenameSource} to {FilenameTarget}")
|
|
|
|
|
|
|
|
|
|
Dim oWMObject As IWMObject6 = Nothing
|
|
|
|
|
Dim oFileIO As WMFileIO
|
|
|
|
|
Dim oWMStream As WMStream
|
|
|
|
|
|
|
|
|
|
'_logger.Debug("Try to access file and lock it...")
|
|
|
|
|
'Err.Clear()
|
|
|
|
|
|
|
|
|
|
'Indexierungsdialog der Session unterdrücken
|
|
|
|
|
Session.SwitchEvents(Constants.COM_EVENT_SESSION_NEED_INDEX, False)
|
|
|
|
|
|
|
|
|
|
'==================================================================
|
|
|
|
|
' create an object
|
|
|
|
|
'==================================================================
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
Dim oExtension As String = Path.GetExtension(FilenameSource)
|
|
|
|
|
_logger.Debug("Stream_File was started...")
|
|
|
|
|
If Not TestSessionLoggedIn() Then
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
Dim oTargetDrive As String = Path.GetDirectoryName(filenameTarget)
|
|
|
|
|
filenameTarget = GetNormalizedPath(filenameTarget)
|
|
|
|
|
Const STREAM_BinaryObject = "BinaryObject"
|
|
|
|
|
|
|
|
|
|
_logger.Debug($"Import file from {FilenameSource } to {filenameTarget}")
|
|
|
|
|
|
|
|
|
|
Dim WMObject
|
|
|
|
|
Dim aFileIO
|
|
|
|
|
Dim aWMStream
|
|
|
|
|
|
|
|
|
|
aFileIO = New WMOTOOLLib.WMFileIO
|
|
|
|
|
_logger.Debug("Try to access file and lock it...")
|
|
|
|
|
Err.Clear()
|
|
|
|
|
Const WMCOMEventWMSessionNeedIndex = 1
|
|
|
|
|
|
|
|
|
|
'Indexierungsdialog der Session unterdrücken
|
|
|
|
|
Session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
|
|
|
|
|
'clsWindream.MY_WDSESSION.switchEvents(WMCOMEventWMSessionNeedIndex, False)
|
|
|
|
|
'==================================================================
|
|
|
|
|
' create an object
|
|
|
|
|
'==================================================================
|
|
|
|
|
WMObject = Session.GetNewWMObjectFS(WMEntity.WMEntityDocument, filenameTarget, WMObjectEditModeObject)
|
|
|
|
|
If Err.Number > 0 Then
|
|
|
|
|
_logger.Warn($"WMObject could not be created - Error: ' {Err.Description}'")
|
|
|
|
|
End If
|
|
|
|
|
If WMObject IsNot Nothing Then
|
|
|
|
|
' lock object for file system access (to change the file itself)
|
|
|
|
|
LockObject(WMObject)
|
|
|
|
|
' set fileIO the local source file
|
|
|
|
|
aFileIO.bstrOriginalFileName = FilenameSource
|
|
|
|
|
If Err.Number > 0 Then
|
|
|
|
|
'MsgBox(Err.Number.ToString)
|
|
|
|
|
_logger.Warn($"fileIO could not be set - Error: '{Err.Description}'")
|
|
|
|
|
If UnlockObject(WMObject) Then RemoveFile(filenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
' open the windream object's file stream for writing
|
|
|
|
|
aWMStream = WMObject.OpenStream(STREAM_BinaryObject, WMObjectStreamOpenModeReadWrite)
|
|
|
|
|
If Err.Number > 0 Then
|
|
|
|
|
_logger.Warn($"Error whhile creating stream - Error: '{Err.Description}'")
|
|
|
|
|
If UnlockObject(WMObject) Then RemoveFile(filenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
_logger.Debug("oWMStream created!")
|
|
|
|
|
' give fileIO helper object the windream stream
|
|
|
|
|
aFileIO.aWMStream = aWMStream
|
|
|
|
|
If Err.Number > 0 Then
|
|
|
|
|
_logger.Warn($"Error while adding aWMStream to aFileIO - Error: '{Err.Description}'")
|
|
|
|
|
If UnlockObject(WMObject) Then RemoveFile(filenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
' let fileIO object import the original file into windream
|
|
|
|
|
aFileIO.ImportOriginal(True)
|
|
|
|
|
If Err.Number > 0 Then
|
|
|
|
|
_logger.Warn($"Error while FileIO.ImportOriginal(True) Error: '{Err.Description}'")
|
|
|
|
|
If UnlockObject(WMObject) Then RemoveFile(filenameTarget)
|
|
|
|
|
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
_logger.Debug("Content of file was transferred!")
|
|
|
|
|
' close the windream file stream
|
|
|
|
|
aWMStream.Close()
|
|
|
|
|
If Err.Number > 0 Then
|
|
|
|
|
_logger.Warn($"Error in aWMStream.Close() - Error: '{Err.Description}'")
|
|
|
|
|
If UnlockObject(WMObject) Then RemoveFile(filenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
'MsgBox(Err.Description)
|
|
|
|
|
End If
|
|
|
|
|
' save new windream object
|
|
|
|
|
WMObject.save()
|
|
|
|
|
If Err.Number > 0 Then
|
|
|
|
|
_logger.Warn($"Error while WMObject.save() - Error: '{Err.Description}'")
|
|
|
|
|
If UnlockObject(WMObject) Then RemoveFile(filenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
'MsgBox(Err.Description)
|
|
|
|
|
End If
|
|
|
|
|
_logger.Debug("File was saved correctly.")
|
|
|
|
|
' unlock the windream object
|
|
|
|
|
If WMObject.unlock() = False Then
|
|
|
|
|
RemoveFile(filenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
_logger.Info($"File '{filenameTarget}' was imported.")
|
|
|
|
|
Return True
|
|
|
|
|
Else
|
|
|
|
|
_logger.Warn($"WMObject could not be created!")
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
_logger.Debug("Creating WMObject for file {0}", FilenameTarget)
|
|
|
|
|
oWMObject = Session.GetNewWMObjectFS(WMEntityDocument, FilenameTarget, WMObjectEditModeObject)
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
_logger.Warn("Unexpected Error in NewStream_File:")
|
|
|
|
|
_logger.Error(ex)
|
|
|
|
|
_logger.Error(ex, "WMObject could not be created")
|
|
|
|
|
Return False
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
If oWMObject Is Nothing Then
|
|
|
|
|
_logger.Warn("Document {0} could not be found", FilenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
_logger.Debug("Locking object for {0}", FilenameTarget)
|
|
|
|
|
If LockObject(oWMObject) = False Then
|
|
|
|
|
_logger.Warn("Document {0} could not be locked", FilenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
_logger.Debug("Opening stream for {0}", FilenameTarget)
|
|
|
|
|
oWMStream = oWMObject.OpenStream(Constants.STREAM_BINARY_OBJECT, Constants.STREAM_OPEN_MODE_READ_WRITE)
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
_logger.Error(ex)
|
|
|
|
|
If UnlockObject(oWMObject) Then RemoveFile(FilenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
_logger.Debug("Creating FileIO", FilenameTarget)
|
|
|
|
|
|
|
|
|
|
oFileIO = New WMFileIO With {
|
|
|
|
|
.bstrOriginalFileName = FilenameSource,
|
|
|
|
|
.aWMStream = oWMStream
|
|
|
|
|
}
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
If UnlockObject(oWMObject) Then RemoveFile(FilenameTarget)
|
|
|
|
|
_logger.Error(ex, "Error while creating FileIO object")
|
|
|
|
|
Return False
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
_logger.Debug("Streaming file...")
|
|
|
|
|
oFileIO.ImportOriginal(True)
|
|
|
|
|
_logger.Debug("Content of file was transferred!")
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
If UnlockObject(oWMObject) Then RemoveFile(FilenameTarget)
|
|
|
|
|
_logger.Error(ex, "Error while streaming file")
|
|
|
|
|
Return False
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
_logger.Debug("Closing Stream")
|
|
|
|
|
oWMStream.Close()
|
|
|
|
|
_logger.Debug("Saving new object")
|
|
|
|
|
oWMObject.Save()
|
|
|
|
|
_logger.Debug("Unlocking new object")
|
|
|
|
|
oWMObject.unlock()
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
RemoveFile(FilenameTarget)
|
|
|
|
|
Return False
|
|
|
|
|
End Try
|
|
|
|
|
|
|
|
|
|
_logger.Info($"File '{FilenameTarget}' was imported.")
|
|
|
|
|
Return True
|
|
|
|
|
|
|
|
|
|
'If Err.Number > 0 Then
|
|
|
|
|
' _logger.Warn($"WMObject could not be created - Error: ' {Err.Description}'")
|
|
|
|
|
'End If
|
|
|
|
|
' If oWMObject IsNot Nothing Then
|
|
|
|
|
' ' lock object for file system access (to change the file itself)
|
|
|
|
|
' LockObject(oWMObject)
|
|
|
|
|
' ' set fileIO the local source file
|
|
|
|
|
' oFileIO.bstrOriginalFileName = FilenameSource
|
|
|
|
|
' If Err.Number > 0 Then
|
|
|
|
|
' 'MsgBox(Err.Number.ToString)
|
|
|
|
|
' _logger.Warn($"fileIO could not be set - Error: '{Err.Description}'")
|
|
|
|
|
' If UnlockObject(oWMObject) Then RemoveFile(FilenameTarget)
|
|
|
|
|
' Return False
|
|
|
|
|
' End If
|
|
|
|
|
' ' open the windream object's file stream for writing
|
|
|
|
|
' oWMStream = oWMObject.OpenStream(Constants.STREAM_BINARY_OBJECT, Constants.STREAM_OPEN_MODE_READ_WRITE)
|
|
|
|
|
' If Err.Number > 0 Then
|
|
|
|
|
' _logger.Warn($"Error whhile creating stream - Error: '{Err.Description}'")
|
|
|
|
|
' If UnlockObject(oWMObject) Then RemoveFile(FilenameTarget)
|
|
|
|
|
' Return False
|
|
|
|
|
' End If
|
|
|
|
|
' _logger.Debug("oWMStream created!")
|
|
|
|
|
' ' give fileIO helper object the windream stream
|
|
|
|
|
' oFileIO.aWMStream = oWMStream
|
|
|
|
|
' If Err.Number > 0 Then
|
|
|
|
|
' _logger.Warn($"Error while adding aWMStream to aFileIO - Error: '{Err.Description}'")
|
|
|
|
|
' If UnlockObject(oWMObject) Then RemoveFile(FilenameTarget)
|
|
|
|
|
' Return False
|
|
|
|
|
' End If
|
|
|
|
|
' ' let fileIO object import the original file into windream
|
|
|
|
|
' oFileIO.ImportOriginal(True)
|
|
|
|
|
' If Err.Number > 0 Then
|
|
|
|
|
' _logger.Warn($"Error while FileIO.ImportOriginal(True) Error: '{Err.Description}'")
|
|
|
|
|
' If UnlockObject(oWMObject) Then RemoveFile(FilenameTarget)
|
|
|
|
|
|
|
|
|
|
' Return False
|
|
|
|
|
' End If
|
|
|
|
|
' _logger.Debug("Content of file was transferred!")
|
|
|
|
|
' ' close the windream file stream
|
|
|
|
|
' oWMStream.Close()
|
|
|
|
|
' If Err.Number > 0 Then
|
|
|
|
|
' _logger.Warn($"Error in aWMStream.Close() - Error: '{Err.Description}'")
|
|
|
|
|
' If UnlockObject(oWMObject) Then RemoveFile(FilenameTarget)
|
|
|
|
|
' Return False
|
|
|
|
|
' 'MsgBox(Err.Description)
|
|
|
|
|
' End If
|
|
|
|
|
' ' save new windream object
|
|
|
|
|
' oWMObject.Save()
|
|
|
|
|
' If Err.Number > 0 Then
|
|
|
|
|
' _logger.Warn($"Error while WMObject.save() - Error: '{Err.Description}'")
|
|
|
|
|
' If UnlockObject(oWMObject) Then RemoveFile(FilenameTarget)
|
|
|
|
|
' Return False
|
|
|
|
|
' 'MsgBox(Err.Description)
|
|
|
|
|
' End If
|
|
|
|
|
' _logger.Debug("File was saved correctly.")
|
|
|
|
|
' ' unlock the windream object
|
|
|
|
|
' If oWMObject.unlock() = False Then
|
|
|
|
|
' RemoveFile(FilenameTarget)
|
|
|
|
|
' Return False
|
|
|
|
|
' End If
|
|
|
|
|
' _logger.Info($"File '{FilenameTarget}' was imported.")
|
|
|
|
|
' Return True
|
|
|
|
|
' Else
|
|
|
|
|
' _logger.Warn($"WMObject could not be created!")
|
|
|
|
|
' Return False
|
|
|
|
|
' End If
|
|
|
|
|
'Catch ex As Exception
|
|
|
|
|
' _logger.Warn("Unexpected Error in NewStream_File:")
|
|
|
|
|
' _logger.Error(ex)
|
|
|
|
|
' Return False
|
|
|
|
|
'End Try
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Public Function LockObject(WMObject As WMObject, Optional EditMode As WMObjectEditMode = WMObjectEditModeNoEdit) As Boolean
|
|
|
|
|
@@ -391,15 +450,17 @@ Public Class Windream2
|
|
|
|
|
End Try
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Public Function GetSearchDocuments(SearchFilePath As String, DocIdIndexName As String) As Dictionary(Of Integer, String)
|
|
|
|
|
Dim oResult As New Dictionary(Of Integer, String)
|
|
|
|
|
Public Function GetSearchDocuments(SearchFilePath As String, DocIdIndexName As String) As DataTable
|
|
|
|
|
Dim oDatatable As New DataTable
|
|
|
|
|
oDatatable.Columns.Add("PATH", GetType(String))
|
|
|
|
|
oDatatable.Columns.Add("DOCID", GetType(Integer))
|
|
|
|
|
|
|
|
|
|
If TestSessionLoggedIn() = False Then
|
|
|
|
|
Return oResult
|
|
|
|
|
Return oDatatable
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
If TestFileExists(SearchFilePath) = False Then
|
|
|
|
|
Return oResult
|
|
|
|
|
Return oDatatable
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
@@ -450,27 +511,27 @@ Public Class Windream2
|
|
|
|
|
oSearch = oObjecttypeSearch.GetSearch()
|
|
|
|
|
Case Else
|
|
|
|
|
_logger.Warn("{0} is not a valid search type", oSearchType)
|
|
|
|
|
Return oResult
|
|
|
|
|
Return oDatatable
|
|
|
|
|
End Select
|
|
|
|
|
|
|
|
|
|
Dim oSearchResults As WMObjects = oSearch.Execute()
|
|
|
|
|
|
|
|
|
|
If oSearchResults.Count = 0 Then
|
|
|
|
|
Return oResult
|
|
|
|
|
Return oDatatable
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
For Each oSearchResult As WMObject In oSearchResults
|
|
|
|
|
Dim path As String = oSearchResult.aPath
|
|
|
|
|
Dim docId As Integer = oSearchResult.GetVariableValue(DocIdIndexName)
|
|
|
|
|
|
|
|
|
|
oResult.Add(docId, path)
|
|
|
|
|
oDatatable.Rows.Add(path, docId)
|
|
|
|
|
Next
|
|
|
|
|
oDatatable.AcceptChanges()
|
|
|
|
|
|
|
|
|
|
Return oResult
|
|
|
|
|
|
|
|
|
|
Return oDatatable
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
_logger.Error(ex)
|
|
|
|
|
Return oResult
|
|
|
|
|
Return oDatatable
|
|
|
|
|
End Try
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
@@ -507,8 +568,7 @@ Public Class Windream2
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
Dim oTempSession As IWMSession2 = DirectCast(Session, IWMSession2)
|
|
|
|
|
oChoicelist = oTempSession.GetWMObjectByName(WMEntityChoiceList, ChoiceListName)
|
|
|
|
|
oChoicelist = Session.GetWMObjectByName(WMEntityChoiceList, ChoiceListName)
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
_logger.Error(ex, "Could not get choice list")
|
|
|
|
|
Return oItems
|
|
|
|
|
@@ -586,8 +646,7 @@ Public Class Windream2
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
Dim oTempSession As IWMSession2 = DirectCast(Session, IWMSession2)
|
|
|
|
|
Dim oAttribute = oTempSession.GetWMObjectByName(WMEntityAttribute, IndexName)
|
|
|
|
|
Dim oAttribute = Session.GetWMObjectByName(WMEntityAttribute, IndexName)
|
|
|
|
|
Dim oType = oAttribute.GetVariableValue("dwAttrType")
|
|
|
|
|
Return oType
|
|
|
|
|
Catch ex As Exception
|
|
|
|
|
|