DA# Macro_v2.13_20221217部署
分发 DA# Macro_v2.13_20221217,纠正两个与反向相关的错误。更正的错误是:
- [修复]反向:修改模板中指定的Attribute属性值(标准化、信息保护、信息保护等级、加密、加扰)
- [Fix] Reverse:修复了未设置信息保护级别值的bug
作为参考,DA#宏介绍(DA# 宏 (1):DA#、DA# API、DA# 宏概述 – 生产力技能 (prodskill.com)) 是基于 v2.12 解释的。
1.Bug现象
1.1.反向:推送模板中指定的Attribute属性的值
这是一个错误,其中模板文件的“列”表中指定的值被一个一个地推回。例如,当在模板文件中输入以下内容时,会重现此错误。
每个属性可以输入的值如下。
- 标准化:只能输入其中一个固定值
- 信息是否受保护:只能输入Y/N之一
- 信息保护级别:字符串
- 加密:只能输入Y/N之一
- 争夺:字符串
由于可以输入的值不一样,所以一一推是不正常设置的。
1.2.反向:未设置信息保护级别值
这是一个错误,即使在上图中输入了“信息安全级别”值,也没有在数据模型中设置该值。由于“信息保护级别”值只能输入 Y/N 之一,因此不输入忽略字符串值。
2.修改
2.1. [修复]反向:修改模板中指定的属性值
modDAConstType模块变化前的代码(部分摘录)如下。
'---------------------------------------------------------------------------------------------------- 'Reverse Attribute property Index Public Const DA_REVATTR_Sequence_IDX As Long = 0 Public Const DA_REVATTR_ModelName_IDX As Long = 1 Public Const DA_REVATTR_EntityName_IDX As Long = 2 Public Const DA_REVATTR_Name_IDX As Long = 3 ... Public Const DA_REVATTR_Inclusive_IDX As Long = 27 Public Const DA_REVATTR_StandardType_IDX As Long = 28 Public Const DA_REVATTR_PrivacyAct_IDX As Long = 29 Public Const DA_REVATTR_PrivacyGrade_IDX As Long = 30 Public Const DA_REVATTR_Encryption_IDX As Long = 31 Public Const DA_REVATTR_EncryptionMethod_IDX As Long = 32
我注释掉了 DA_REVATTR_Inclusive_IDX,然后将常量值减一。该常量值表示反向模板文件“Column”表的列顺序。
'---------------------------------------------------------------------------------------------------- 'Reverse Attribute property Index Public Const DA_REVATTR_Sequence_IDX As Long = 0 Public Const DA_REVATTR_ModelName_IDX As Long = 1 Public Const DA_REVATTR_EntityName_IDX As Long = 2 Public Const DA_REVATTR_Name_IDX As Long = 3 ... 'Public Const DA_REVATTR_Inclusive_IDX As Long = 27 '2022-12-17 주석 처리(Reverse에는 사용하지 않도록 처리함) Public Const DA_REVATTR_StandardType_IDX As Long = 27 Public Const DA_REVATTR_PrivacyAct_IDX As Long = 28 Public Const DA_REVATTR_PrivacyGrade_IDX As Long = 29 Public Const DA_REVATTR_Encryption_IDX As Long = 30 Public Const DA_REVATTR_EncryptionMethod_IDX As Long = 31
2.2. [Fix] Reverse:修复了未设置信息保护级别值的bug
在 CDAAttribute 类的 SetValue 过程中,信息安全级别值被转换为 GetBoolean 函数。信息保护级别不是要设置为Y/N的值,输入字符串应该原样设置,但是没有设置值,因为执行了不必要的GetBoolean函数。
我修改了代码如下。
'DA# Attribute 개체에 값 설정 Public Sub SetValue(ByRef aodAttribute As Modeler5.Attribute) .... '-- 변경 전 코드 arrAttr(Modeler5.ATR_PRIVACYGRADE) = GetBoolean(Me.m_s정보보호등급) '-- 변경 후 코드 arrAttr(Modeler5.ATR_PRIVACYGRADE) = Me.m_s정보보호등급
作为参考,GetBoolean 函数的实现如下。
'Text(Y, N)의 Boolean value 변환(True, False) Public Function GetBoolean(aValue As String) As Boolean GetBoolean = IIf(UCase(Trim(aValue)) = "Y", True, False) 'Y=True, Else=False End Function
3. 下载DA# Macro_v2.13_20221217
已将错误修复版本上传到 github。您可以从下面的 URL 下载它。
https://github.com/DAToolset/DA-Macro/raw/main/DA%23%20Macro_v2.13_20221217.xlsm