Added two new extraction rules to clsConditionExtractor: - azxs (安装形式): Extract installation form code from InstallForm field - bkxs (表壳形式): Extract shell form code from ShellForm field Examples: - azxs: A0 (径向无边), Z0 (中轴向无边) - bkxs: 532 (53=304外壳+安装式, 2=外卡式) These new conditions can now be used in material selection expressions. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
243 lines
7.8 KiB
OpenEdge ABL
243 lines
7.8 KiB
OpenEdge ABL
' ========================================
|
||
' 类模块: clsConditionExtractor
|
||
' 用途: 从型号解析器中提取物料选择条件
|
||
' ========================================
|
||
Option Explicit
|
||
|
||
' ========================================
|
||
' 私有成员变量
|
||
' ========================================
|
||
Private m_Conditions As Object ' Dictionary: 变量名 -> 条件值
|
||
Private m_ExtractionRules As Object ' Dictionary: 提取规则配置
|
||
|
||
' ========================================
|
||
' 类初始化
|
||
' ========================================
|
||
Private Sub Class_Initialize()
|
||
Set m_Conditions = CreateObject("Scripting.Dictionary")
|
||
Set m_ExtractionRules = CreateObject("Scripting.Dictionary")
|
||
|
||
' 初始化提取规则
|
||
InitializeRules
|
||
End Sub
|
||
|
||
' ========================================
|
||
' InitializeRules 方法 (私有)
|
||
' 功能: 初始化条件提取规则
|
||
' 说明: 这里配置所有需要提取的条件及其提取方法
|
||
' ========================================
|
||
Private Sub InitializeRules()
|
||
' 规则格式: Dictionary(变量名) = Array(源字段, 提取方法)
|
||
|
||
' 规则1: 过程连接 (gclj)
|
||
' 从 ConnectionCode 中提取,去掉最后一位数字
|
||
m_ExtractionRules("gclj") = Array("ConnectionCode", "RemoveLastDigit")
|
||
|
||
' 规则2: 接液材质 (jycz)
|
||
' 从 ConnectionCode 中提取,取最后一位数字
|
||
m_ExtractionRules("jycz") = Array("ConnectionCode", "GetLastDigit")
|
||
|
||
' 规则3: 量程范围 (lcfw)
|
||
' 从 RangeCode 中直接提取
|
||
m_ExtractionRules("lcfw") = Array("RangeCode", "Direct")
|
||
|
||
' 规则4: 安装形式 (azxs)
|
||
' 从 InstallForm 中直接提取(例如:A0=径向无边, Z0=中轴向无边)
|
||
m_ExtractionRules("azxs") = Array("InstallForm", "Direct")
|
||
|
||
' 规则5: 表壳形式 (bkxs)
|
||
' 从 ShellForm 中直接提取(3位代码:前2位表壳类型+后1位罩壳类型)
|
||
' 例如:532 = 53(304外壳、安装式) + 2(外卡式)
|
||
m_ExtractionRules("bkxs") = Array("ShellForm", "Direct")
|
||
|
||
' 未来可以在这里添加更多提取规则...
|
||
' 例如:
|
||
' m_ExtractionRules("bplx") = Array("DialCode", "Direct") ' 表盘类型
|
||
End Sub
|
||
|
||
' ========================================
|
||
' ExtractConditions 方法
|
||
' 功能: 从型号解析器中提取所有条件
|
||
' 参数: parser - clsModelParser对象
|
||
' 返回: Dictionary对象,包含所有提取的条件
|
||
' ========================================
|
||
Public Function ExtractConditions(parser As clsModelParser) As Object
|
||
' 清空现有条件
|
||
Set m_Conditions = CreateObject("Scripting.Dictionary")
|
||
|
||
' 验证解析器有效性
|
||
If Not parser.IsValid Then
|
||
Set ExtractConditions = m_Conditions
|
||
Exit Function
|
||
End If
|
||
|
||
' 遍历所有提取规则
|
||
Dim varName As Variant
|
||
For Each varName In m_ExtractionRules.Keys
|
||
Dim ruleInfo As Variant
|
||
ruleInfo = m_ExtractionRules(varName)
|
||
|
||
Dim sourceField As String
|
||
Dim extractMethod As String
|
||
sourceField = ruleInfo(0)
|
||
extractMethod = ruleInfo(1)
|
||
|
||
' 提取条件值
|
||
Dim conditionValue As String
|
||
conditionValue = ExtractValue(parser, sourceField, extractMethod)
|
||
|
||
' 添加到条件字典
|
||
If conditionValue <> "" Then
|
||
m_Conditions(CStr(varName)) = conditionValue
|
||
End If
|
||
Next varName
|
||
|
||
Set ExtractConditions = m_Conditions
|
||
End Function
|
||
|
||
' ========================================
|
||
' ExtractValue 方法 (私有)
|
||
' 功能: 根据规则从解析器中提取单个值
|
||
' 参数:
|
||
' parser - clsModelParser对象
|
||
' sourceField - 源字段名称
|
||
' extractMethod - 提取方法名称
|
||
' 返回: 提取的条件值
|
||
' ========================================
|
||
Private Function ExtractValue(parser As clsModelParser, _
|
||
sourceField As String, _
|
||
extractMethod As String) As String
|
||
Dim sourceValue As String
|
||
|
||
' 获取源字段值
|
||
Select Case sourceField
|
||
Case "ConnectionCode"
|
||
sourceValue = parser.ConnectionCode
|
||
Case "RangeCode"
|
||
sourceValue = parser.RangeCode
|
||
Case "ModelType"
|
||
sourceValue = parser.ModelType
|
||
Case "Diameter"
|
||
sourceValue = parser.Diameter
|
||
Case "InstallForm"
|
||
sourceValue = parser.InstallForm
|
||
Case "ShellForm"
|
||
sourceValue = parser.ShellForm
|
||
Case "Characteristics"
|
||
sourceValue = parser.Characteristics
|
||
Case Else
|
||
sourceValue = ""
|
||
End Select
|
||
|
||
' 应用提取方法
|
||
Select Case extractMethod
|
||
Case "Direct"
|
||
' 直接使用
|
||
ExtractValue = sourceValue
|
||
|
||
Case "RemoveLastDigit"
|
||
' 去掉最后一位字符
|
||
If Len(sourceValue) > 1 Then
|
||
ExtractValue = Left(sourceValue, Len(sourceValue) - 1)
|
||
Else
|
||
ExtractValue = sourceValue
|
||
End If
|
||
|
||
Case "GetLastDigit"
|
||
' 取最后一位字符
|
||
If Len(sourceValue) > 0 Then
|
||
ExtractValue = Right(sourceValue, 1)
|
||
Else
|
||
ExtractValue = ""
|
||
End If
|
||
|
||
Case "GetFirstChar"
|
||
' 取第一个字符
|
||
If Len(sourceValue) > 0 Then
|
||
ExtractValue = Left(sourceValue, 1)
|
||
Else
|
||
ExtractValue = ""
|
||
End If
|
||
|
||
Case Else
|
||
' 未知方法,返回空
|
||
ExtractValue = ""
|
||
End Select
|
||
End Function
|
||
|
||
' ========================================
|
||
' GetConditionValue 方法
|
||
' 功能: 获取单个条件值
|
||
' 参数: varName - 变量名
|
||
' 返回: 条件值,如果不存在返回空字符串
|
||
' ========================================
|
||
Public Function GetConditionValue(varName As String) As String
|
||
If m_Conditions.Exists(varName) Then
|
||
GetConditionValue = m_Conditions(varName)
|
||
Else
|
||
GetConditionValue = ""
|
||
End If
|
||
End Function
|
||
|
||
' ========================================
|
||
' AddCondition 方法
|
||
' 功能: 手动添加条件 (用于特殊情况)
|
||
' 参数:
|
||
' varName - 变量名
|
||
' value - 条件值
|
||
' ========================================
|
||
Public Sub AddCondition(varName As String, value As String)
|
||
m_Conditions(varName) = value
|
||
End Sub
|
||
|
||
' ========================================
|
||
' GetConditions 属性
|
||
' 功能: 获取所有条件的Dictionary对象
|
||
' ========================================
|
||
Public Property Get conditions() As Object
|
||
Set conditions = m_Conditions
|
||
End Property
|
||
|
||
' ========================================
|
||
' ToString 方法
|
||
' 功能: 返回条件的字符串表示 (用于调试)
|
||
' ========================================
|
||
Public Function ToString() As String
|
||
Dim result As String
|
||
result = "【提取的条件】" & vbCrLf
|
||
|
||
If m_Conditions.Count = 0 Then
|
||
result = result & " (无条件)" & vbCrLf
|
||
Else
|
||
Dim key As Variant
|
||
For Each key In m_Conditions.Keys
|
||
result = result & " " & key & " = " & m_Conditions(key) & vbCrLf
|
||
Next key
|
||
End If
|
||
|
||
ToString = result
|
||
End Function
|
||
|
||
' ========================================
|
||
' AddExtractionRule 方法
|
||
' 功能: 动态添加新的提取规则 (用于扩展)
|
||
' 参数:
|
||
' varName - 变量名
|
||
' sourceField - 源字段名称
|
||
' extractMethod - 提取方法名称
|
||
' 示例: extractor.AddExtractionRule "bplx", "DialCode", "Direct"
|
||
' ========================================
|
||
Public Sub AddExtractionRule(varName As String, _
|
||
sourceField As String, _
|
||
extractMethod As String)
|
||
m_ExtractionRules(varName) = Array(sourceField, extractMethod)
|
||
End Sub
|
||
|
||
' ========================================
|
||
' GetExtractionRules 方法
|
||
' 功能: 获取当前所有提取规则 (用于调试)
|
||
' 返回: Dictionary对象
|
||
' ========================================
|
||
Public Function GetExtractionRules() As Object
|
||
Set GetExtractionRules = m_ExtractionRules
|
||
End Function |