vbscript 检测瘦客户端验证期间是否需要OLL。在6.1.0.10之前的KTM环境中是必需的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vbscript 检测瘦客户端验证期间是否需要OLL。在6.1.0.10之前的KTM环境中是必需的相关的知识,希望对你有一定的参考价值。

' Class Level Routines

Private Sub OLL_AutomaticLearning(ByVal pxdoc As CASCADELib.CscXDocument)
   On Error GoTo ErrorHandler
   OutputDebugString "KfxKTM_OLL_AutomaticLearning: Start"

   Dim i As Integer
   Dim asFieldList() As String
   Dim bDocTrainingNeeded As Boolean

   bDocTrainingNeeded = False

   ' First, is automatic learning enabled for the project?
   If Project.OLAutomaticTrainingEnabled  = False Then
      OutputDebugString "KfxKTM_OLL_AutomaticLearning: Automatic Learning Disabled; exiting"
      Exit Sub
   End If
   OutputDebugString "KfxKTM_OLL_AutomaticLearning: Automatic Learning Enabled"

   ' Get the list of fields that are monitored for automatic OLL
   OutputDebugString "KfxKTM_OLL_AutomaticLearning: Getting Field List"
   asFieldList() = OLL_GetMonitoredFields(pxdoc)

   ' Loop through each field and determine if field training is needed. If so, set document xValue
   OutputDebugString "KfxKTM_OLL_AutomaticLearning: Looping fields, checking if fields require training"
   For i = 0 To UBound(asFieldList)
      If OLL_IsFieldTrainingNeeded(pxdoc, asFieldList(i)) = True Then
         OutputDebugString "KfxKTM_OLL_AutomaticLearning: Training needed for field=" & CStr(asFieldList(i))
         bDocTrainingNeeded = True
      End If
   Next

   ' Determine how many fields require training and determine if to trigger OLL file creation
   If bDocTrainingNeeded = True Then
      OLL_WriteFile(pxdoc, CStr(pxdoc.CDoc.Pages(0).SourceFileName))
   End If


   OutputDebugString "KfxKTM_OLL_AutomaticLearning: Finish"
Exit Sub
ErrorHandler:
   General_Error_Handler("OLL_AutomaticLearning", LOG_ERROR, DISPLAY_TO_USER)
End Sub

Private Function OLL_GetMonitoredFields(ByVal pxdoc As CASCADELib.CscXDocument) As String()
   On Error GoTo ErrorHandler
   OutputDebugString "KfxKTM_OLL_GetMonitoredFields: Start"

   Dim i As Integer
   Dim sFieldList As String, asFieldList() As String

   ' Which fields are monitored for learning
   OutputDebugString "KfxKTM_OLL_GetMonitoredFields: Looping class " & CStr(BASE_CLASS) & " looking for fields set for automatic learning..."
   For i = 0 To Project.ClassByName(BASE_CLASS).Fields.Count - 1
      If Project.ClassByName(BASE_CLASS).Fields.ItemByIndex(i).AutomaticTraining = True Then
         sFieldList = sFieldList & IIf(sFieldList = "",Project.ClassByName(BASE_CLASS).Fields.ItemByIndex(i).Name,"|" & Project.ClassByName(BASE_CLASS).Fields.ItemByIndex(i).Name)
      End If
   Next
   OutputDebugString "KfxKTM_OLL_GetMonitoredFields: Monitored Fields=" & CStr(sFieldList)
   OLL_GetMonitoredFields = Split(sFieldList, "|")
   OutputDebugString "KfxKTM_OLL_GetMonitoredFields: Finish"

Exit Function
ErrorHandler:
   General_Error_Handler("OLL_GetMonitoredFields", LOG_ERROR, DISPLAY_TO_USER)
End Function

Private Function OLL_IsFieldTrainingNeeded(ByVal pxdoc As CASCADELib.CscXDocument, sFieldName As String) As Boolean
   On Error GoTo ErrorHandler
   OutputDebugString "KfxKTM_OLL_IsFieldTrainingNeeded: Start"
   OutputDebugString "KfxKTM_OLL_IsFieldTrainingNeeded: Checking Field=" & CStr(sFieldName)
   OLL_IsFieldTrainingNeeded = False

   Dim oField As CscXDocField
   Set oField = pxdoc.Fields.ItemByName(sFieldName)

   ' If the Top and Left positions have changed, assume field training is needed
   If oField.OriginalTop <> oField.Top And oField.OriginalLeft <> oField.Left Then
      OutputDebugString "KfxKTM_OLL_IsFieldTrainingNeeded: OriginalTop=" & CStr(oField.OriginalTop) & "/" & "ValidatedTop=" & CStr(oField.Top)
      OutputDebugString "KfxKTM_OLL_IsFieldTrainingNeeded: OriginalLeft=" & CStr(oField.OriginalLeft) & "/" & "ValidatedLeft=" & CStr(oField.Left)
      SetDocXValue(pxdoc, "OLL_TrainingNeeded_" & CStr(sFieldName), "True")
      OLL_IsFieldTrainingNeeded = True
      Else
         OutputDebugString "KfxKTM_OLL_IsFieldTrainingNeeded: Training not required for field"
   End If

   OutputDebugString "KfxKTM_OLL_IsFieldTrainingNeeded: Finish"
Exit Function
ErrorHandler:
   General_Error_Handler("OLL_IsFieldTrainingNeeded", LOG_ERROR, DISPLAY_TO_USER)
End Function

Private Sub OLL_WriteFile(ByVal pxdoc As CASCADELib.CscXDocument, sFullPath As String)
   Dim sBaseFolderPath As String
   Dim sBaseFileName As String
   Dim sOllFullPath As String
   Dim sOperatorUserID As String
   Dim FSO As Object
   Dim iFreeFile As Integer

   OutputDebugString "KfxKTM_OLL_WriteFile: Start"

   On Error Resume Next

   OutputDebugString "KfxKTM_OLL_WriteFile: Start"
   OutputDebugString "KfxKTM_SourceFileName=" & CStr(sFullPath)
   OutputDebugString "KfxKTM_SourceFileName=" & CStr(sFullPath)


   Set FSO = CreateObject("Scripting.FileSystemObject")

   sBaseFolderPath   = FSO.GetParentFolderName(sFullPath)
   sBaseFileName     = FSO.GetBaseName(sFullPath)
   'sBaseFilePath = Left(sDocumentPath, InStrRev(sDocumentPath, "\"))
   sOllFullPath = FSO.BuildPath(sBaseFolderPath, sBaseFileName) & ".oll"

   Select Case Project.ScriptExecutionMode
      Case CscScriptModeServer, CscScriptModeValidation
            sOperatorUserID = pxdoc.ParentFolder.XValues.ItemByName("AC_BATCH_OPERATORUSERID").Value
      Case CscScriptModeServerDesign, CscScriptModeValidationDesign
            sOperatorUserID = "Project Builder"
   End Select

   OutputDebugString "KfxKTM_FolderPath=" & CStr(sBaseFolderPath)
   OutputDebugString "KfxKTM_FileName=" & CStr(sBaseFileName)
   OutputDebugString "KfxKTM_OllFullPath=" & CStr(sOllFullPath)
   OutputDebugString "KfxKTM_OperatorUserID=" & CStr(sOperatorUserID)


   OutputDebugString "KfxKTM_Checking if Oll file already exists..."
   If FSO.FileExists(sOllFullPath) = True Then
      OutputDebugString "KfxKTM_Oll File exists, Deleting..."
      FSO.DeleteFile(sOllFullPath, True)
      OutputDebugString "KfxKTM_Oll File deleted, Checking..."
      If FSO.FileExists(sOllFullPath) = True Then
         OutputDebugString "KfxKTM_Could not delete, aborting OLL creation"
         Exit Sub
      End If
      OutputDebugString "KfxKTM_Delete Confirmed"
   End If

   iFreeFile = FreeFile
   Open sOllFullPath For Append As #iFreeFile
   OutputDebugString "KfxKTM_Opened File for append"
   OutputDebugString "KfxKTM_Writing Oll values"

   Print #iFreeFile, "NTUser=" & CStr(sOperatorUserID)
   Print #iFreeFile, "NTStation=" & CStr((Environ("COMPUTERNAME")))
   Print #iFreeFile, "Classification=0"
   Print #iFreeFile, "Extraction=0"
   Print #iFreeFile, "Specific=1"
   Print #iFreeFile, "Comment="

   Close #iFreeFile
   OutputDebugString "KfxKTM_Closed file"
   OutputDebugString "KfxKTM_OLL_WriteFile: Finish"

End Sub


Private Sub OLL_LogMonitoredFieldData(ByVal pxdoc As CASCADELib.CscXDocument, sFieldName As String)
   On Error GoTo ErrorHandler
   OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: Start"

   Dim oField As CscXDocField

   If Project.ClassByName(BASE_CLASS).Fields.ItemByName(sFieldName).AutomaticTraining = True Then
      Set oField = pxdoc.Fields.ItemByName(sFieldName)
      OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: Field=" & CStr(oField.Name)
      OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: OriginalHeight=" & CStr(oField.OriginalHeight)
      OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: OriginalLeft=" & CStr(oField.OriginalLeft)
      OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: OriginalPageIndex=" & CStr(oField.OriginalPageIndex)
      OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: OriginalText=" & CStr(oField.OriginalText)
      OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: OriginalTop=" & CStr(oField.OriginalTop)
      OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: OriginalValid=" & CStr(oField.OriginalValid)
      OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: OriginalVerified=" & CStr(oField.OriginalVerified)
      OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: OriginalWidth=" & CStr(oField.OriginalWidth)
   End If

   OutputDebugString "KfxKTM_OLL_LogMonitoredFieldData: Finish"
Exit Sub
ErrorHandler:
   General_Error_Handler("OLL_LogMonitoredFieldData", LOG_ERROR, DISPLAY_TO_USER)
End Sub






' Document Validated entry...

   ' Execute automatic onlinelearning check
   ' Only if running in the thin client
   'If Project.ScriptExecutionMode = CscScriptModeValidation And Project.ScriptExecutionModuleType = CscScriptModuleTypeRichClient Then
   'If Project.ScriptExecutionMode = CscScriptModeValidationDesign Then
   If Project.ScriptExecutionMode = CscScriptModeValidation And Project.ScriptExecutionModuleType = CscScriptModuleTypeThinClient Then
      OutputDebugString "KfxKTM_Thin Client Detected, trigger Automatic Learning check"
      OLL_AutomaticLearning(pxdoc)
   End If
   
  
  
  
  
   
' After Field Confirmed entry....

   ' Attempt to Log monitored field data for fields where OLL monitoring is enabled.
   OLL_LogMonitoredFieldData(pxdoc, pField.Name)







' Document Loaded entry...

   ' Log OLL Monitored Field Data
   Dim j As Integer
   Dim sFieldList As String, asFieldList() As String
   asFieldList() = OLL_GetMonitoredFields(pxdoc)
   For j = 0 To UBound(asFieldList)
      OLL_LogMonitoredFieldData(pxdoc, asFieldList(j))
   Next








以上是关于vbscript 检测瘦客户端验证期间是否需要OLL。在6.1.0.10之前的KTM环境中是必需的的主要内容,如果未能解决你的问题,请参考以下文章

vbscript ol Folderpath

检测 WPF 验证错误

vbscript 8.检测方程是否按顺序编号,是否重复编号

[转]关于胖客户端和瘦客户端的理解

vbscript 检测数字和单位之间是否有空格;单位是否缩写

vbscript 检测是否有子表