- Add new mBOMRepository.bas module for data access layer with LoadAll/SaveAll/InsertNewBOMRow functions - Refactor cBOMRow.cls property methods for better readability and formatting - Add comprehensive unit tests for BOM repository functionality in mTestEngine Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
163 lines
6.5 KiB
OpenEdge ABL
163 lines
6.5 KiB
OpenEdge ABL
' ==============================================================================
|
||
' 模块名称: cBOMRow
|
||
' 模块类别: 类模块 (Class Module)
|
||
' 所属项目: BOMForge
|
||
' 模块职责: 封装单行 BOM 数据,提供属性访问,并内置状态跟踪 (脏标记) 机制
|
||
' ==============================================================================
|
||
Option Explicit
|
||
|
||
' 内部变量:映射 Excel 数据列
|
||
Private pExcelRowIndex As Long ' 记录该对象对应 Excel 表中的物理行号,保存时定位用
|
||
Private pRowNo As Long ' 行号 (如 10, 20)
|
||
Private pModuleType As String ' 模块 (如 表壳, 罩壳, 接头)
|
||
Private pCode As String ' 代号
|
||
Private pItemName As String ' 名称 (使用 ItemName 避免与内部 Name 关键字冲突)
|
||
Private pQuantity As Double ' 数量
|
||
Private pCondition As String ' 选择条件 (核心修改字段)
|
||
Private pRemark As String ' 备注
|
||
Private pCategory As String ' 类别
|
||
Private pParentCategory As String ' 上层类别
|
||
Private pCategoryCondition As String ' 类别选用条件
|
||
Private pCode66 As String ' 66代码
|
||
Private pBIPBaseRowNo As String ' BIP行号基数
|
||
|
||
' 内部变量:状态追踪
|
||
Private pIsDirty As Boolean ' 脏标记:True 表示对象数据被修改过,需要写回 Excel
|
||
|
||
' 初始化对象时,默认状态为干净 (未修改)
|
||
Private Sub Class_Initialize()
|
||
pIsDirty = False
|
||
End Sub
|
||
|
||
' ------------------------------------------------------------------------------
|
||
' 属性: ExcelRowIndex (物理行号)
|
||
' ------------------------------------------------------------------------------
|
||
Public Property Get ExcelRowIndex() As Long: ExcelRowIndex = pExcelRowIndex: End Property
|
||
Public Property Let ExcelRowIndex(ByVal vNewValue As Long): pExcelRowIndex = vNewValue: End Property
|
||
|
||
' ------------------------------------------------------------------------------
|
||
' 属性: RowNo (BOM行号)
|
||
' ------------------------------------------------------------------------------
|
||
Public Property Get RowNo() As Long: RowNo = pRowNo: End Property
|
||
Public Property Let RowNo(ByVal vNewValue As Long)
|
||
If pRowNo <> vNewValue Then pRowNo = vNewValue: pIsDirty = True
|
||
End Property
|
||
|
||
' ------------------------------------------------------------------------------
|
||
' 属性: ModuleType (模块)
|
||
' ------------------------------------------------------------------------------
|
||
Public Property Get ModuleType() As String: ModuleType = pModuleType: End Property
|
||
Public Property Let ModuleType(ByVal vNewValue As String)
|
||
If pModuleType <> vNewValue Then pModuleType = vNewValue: pIsDirty = True
|
||
End Property
|
||
|
||
' ------------------------------------------------------------------------------
|
||
' 属性: Code (代号)
|
||
' ------------------------------------------------------------------------------
|
||
Public Property Get Code() As String: Code = pCode: End Property
|
||
Public Property Let Code(ByVal vNewValue As String)
|
||
If pCode <> vNewValue Then pCode = vNewValue: pIsDirty = True
|
||
End Property
|
||
|
||
' ------------------------------------------------------------------------------
|
||
' 属性: ItemName (名称)
|
||
' ------------------------------------------------------------------------------
|
||
Public Property Get ItemName() As String: ItemName = pItemName: End Property
|
||
Public Property Let ItemName(ByVal vNewValue As String)
|
||
If pItemName <> vNewValue Then pItemName = vNewValue: pIsDirty = True
|
||
End Property
|
||
|
||
' ------------------------------------------------------------------------------
|
||
' 属性: Quantity (数量)
|
||
' ------------------------------------------------------------------------------
|
||
Public Property Get Quantity() As Double: Quantity = pQuantity: End Property
|
||
Public Property Let Quantity(ByVal vNewValue As Double)
|
||
If pQuantity <> vNewValue Then pQuantity = vNewValue: pIsDirty = True
|
||
End Property
|
||
|
||
' ------------------------------------------------------------------------------
|
||
' 属性: Condition (选择条件) - 这是本工具最核心要修改的字段
|
||
' ------------------------------------------------------------------------------
|
||
Public Property Get Condition() As String: Condition = pCondition: End Property
|
||
Public Property Let Condition(ByVal vNewValue As String)
|
||
' 只有当新写入的值和原有的值不一样时,才判定为被修改,打上脏标记
|
||
If pCondition <> vNewValue Then
|
||
pCondition = vNewValue
|
||
pIsDirty = True
|
||
End If
|
||
End Property
|
||
|
||
' ------------------------------------------------------------------------------
|
||
' 其他次要属性的 Get/Let
|
||
' ------------------------------------------------------------------------------
|
||
Public Property Get Remark() As String
|
||
Remark = pRemark
|
||
End Property
|
||
Public Property Let Remark(ByVal vNewValue As String)
|
||
If pRemark <> vNewValue Then
|
||
pRemark = vNewValue
|
||
pIsDirty = True
|
||
End If
|
||
End Property
|
||
|
||
Public Property Get Category() As String
|
||
Category = pCategory
|
||
End Property
|
||
Public Property Let Category(ByVal vNewValue As String)
|
||
If pCategory <> vNewValue Then
|
||
pCategory = vNewValue
|
||
pIsDirty = True
|
||
End If
|
||
End Property
|
||
|
||
Public Property Get ParentCategory() As String
|
||
ParentCategory = pParentCategory
|
||
End Property
|
||
Public Property Let ParentCategory(ByVal vNewValue As String)
|
||
If pParentCategory <> vNewValue Then
|
||
pParentCategory = vNewValue
|
||
pIsDirty = True
|
||
End If
|
||
End Property
|
||
|
||
Public Property Get CategoryCondition() As String
|
||
CategoryCondition = pCategoryCondition
|
||
End Property
|
||
Public Property Let CategoryCondition(ByVal vNewValue As String)
|
||
If pCategoryCondition <> vNewValue Then
|
||
pCategoryCondition = vNewValue
|
||
pIsDirty = True
|
||
End If
|
||
End Property
|
||
|
||
Public Property Get Code66() As String
|
||
Code66 = pCode66
|
||
End Property
|
||
Public Property Let Code66(ByVal vNewValue As String)
|
||
If pCode66 <> vNewValue Then
|
||
pCode66 = vNewValue
|
||
pIsDirty = True
|
||
End If
|
||
End Property
|
||
|
||
Public Property Get BIPBaseRowNo() As String
|
||
BIPBaseRowNo = pBIPBaseRowNo
|
||
End Property
|
||
Public Property Let BIPBaseRowNo(ByVal vNewValue As String)
|
||
If pBIPBaseRowNo <> vNewValue Then
|
||
pBIPBaseRowNo = vNewValue
|
||
pIsDirty = True
|
||
End If
|
||
End Property
|
||
|
||
' ------------------------------------------------------------------------------
|
||
' 状态追踪:只读的 IsDirty 和重置方法
|
||
' ------------------------------------------------------------------------------
|
||
Public Property Get IsDirty() As Boolean
|
||
IsDirty = pIsDirty
|
||
End Property
|
||
|
||
' 可以在写回 Excel 后,调用此方法将状态重置为干净
|
||
Public Sub ResetDirtyFlag()
|
||
pIsDirty = False
|
||
End Sub |