EZDML配置文件说明
——20191027 BY HUZ
请注意:HTML文档较旧,仅适用于Win32版,适用最新EZDML for mac64/linux64/win64版的文档请下载PDF。
本章节比较枯燥乏味,就是告诉大家有哪些文件是做什么用的,大家可大概扫描一下,大致了解下可以做哪些坏事,具体内容则可在用到时再看。没问题就不要细看了。
EZDML的配置文件比较多,包括:
l ezdml.INI——配置文件,作用当然是程序的主要配置了
l dict.txt——词典文件,这个是用于自动大小写识别的,一般不需要改
l MyDict.txt——自定义词典文件,这个也是用于自动大小写识别,是供用户自定义添加自己的词用的,优先级比dict.txt高
l Templates\reserved_words.txt——保留关键字字典文件,你可以根据需要修改它。如果你的表名或字段名有跟这里的冲突,则生成SQL时会产生警告: 表名/字段名可能非法
l Templates\new_table.txt——新建表的配置文件,新建表要包含哪些字段,就在这里配置了
l Templates\add_system_fields.txt——表字段列表右键菜单添加系统字段的配置
l GlobalScript.ps_——全局事件脚本,你可以在这接管生成SQL、弹出窗口等事件
l Templates\CustomTableDef.js_/.ps_——自定义表属性界面脚本
l Templates\CustomFieldDef.js_/.ps_——自定义字段属性界面脚本
l Templates\ export_doc_html.js_/.ps_——导出WORD、HTML脚本
l CustomTools\*——自定义工具
l Templates\*.js/*.pas——自定义生成脚本
因为配置文件较多,因此,不建议将EZDML安装在受保护的系统盘。
位于主目录下。正常程序配置都会做个界面,不过既然都是程序员我就偷懒了,改INI也很方便。执行菜单命令“工具/修改INI配置”即可打开INI文件进行编辑。
目前INI可配置的项目如下:
[DefaultFieldTypes]
1=String:VARSTR(2000)
2=Integer:DECIMAL
[CustFieldTypes]
1=BigInt
2=Decimal
3=TestUnk
[CustDataTypeReplaces]
1=VARCHAR2:NVARCHAR2
2=NUMBER(10):DECIMAL
3=%TEXT%:NCLOB
[Options]
AutoSaveMinutes=5
SaveTempFileOnExit=1
FieldNameMaxDrawSize=64
FieldTypeMaxDrawSize=48
TableFieldMaxDrawCount=50
MaxRowCountForTableData=25
LogicNamesForTableData=0
CreateSeqForOracle=1
OCIDLL=D:\oracle\ora112\instantclient\oci.dll
QuotReservedNames=1
BackupBeforeAlterColumn=0
WriteConstraintToDescribeStr=1
AddColCommentToCreateTbSql=1
EnableCustomPropUI=0
[TbNamePrefixDefs]
1=CT_
2=IMS_
解释一下INI配置:
[DefaultFieldTypes] ——修改缺省数据类型对应的物理类型
1=String:VARSTR(2000) ——修改逻辑类型名为String的物理类型名为VARSTR,默认长度为2000
2=Integer:DECIMAL ——修改逻辑类型名为Integer的物理类型名为DECIMAL,无默认长度
[CustFieldTypes] ——添加额外的数据类型到类型下拉列表
1=BigInt
2=Decimal
3=TestUnk:VARCHAR(500) ——自定义数据类型TestUnk,对应的物理数据类型为VARCHAR,默认长度为500
[CustDataTypeReplaces] ——指定替换字段类型
1=VARCHAR2:NVARCHAR2 ——将VARCHAR2替换为NVARCHAR2(全字匹配)
2=NUMBER(10):DECIMAL ——将NUMBER(10)替换为DECIMAL(全字匹配)
3=%TEXT%:NCLOB ——将TEXT替换为NCLOB(模糊匹配,类似SQL中的like操作)
4=%RAW:BLOB ——将RAW替换为BLOB(左边模糊匹配,右边精确匹配,类似SQL中的like操作)
[Options]选项,示例值为默认值
AutoSaveMinutes=5 ——定时每5分钟自动保存,保存为用户临时目录.~dmh文件,并且会保留历史文件(无修改时不会保留历史文件),为0则不保存
SaveTempFileOnExit=1 ——退出时是否自动保存临时文件(.~dmh0),为0时每次退出会提示用户是否保存
FieldNameMaxDrawSize=64 ——在模型图上允许显示的最大字段名长度
FieldTypeMaxDrawSize=48 ——在模型图上允许显示的最大字段类型长度
TableFieldMaxDrawCount=50 ——在模型图上单个表允许显示的最大字段数量
MaxRowCountForTableData=25 ——表属性页中查看表数据的最大记录数量
LogicNamesForTableData=0 ——表属性页中查看表数据时是否使用逻辑名
CreateSeqForOracle=1 ——是否为ORACLE表整形主键生成序列号
OCIDLL=D:\oracle\ora112\instantclient\oci.dll ——指定OCI.dll的路径(用于instant client或装了多个ORACLE home时,请注意一定要是32位的OCI,数据库服务默认的很可能是64位,是不行的)。修改此设置需要重启程序
QuotReservedNames=1 ——是否为系统保留字名称加上引号(ORACLE)或中括号(SQLSERVER)
BackupBeforeAlterColumn=0 ——字段类型有变化时,是否要生成备份字段的SQL
WriteConstraintToDescribeStr=1 ——是否将约束输出到描述字
AddColCommentToCreateTbSql=1 ——是否将注释输出到创建表的SQL中
EnableCustomPropUI=0 ——是否启用自定义的表和字段属性页
[TbNamePrefixDefs] ——已知表名前缀列表。生成索引名称时,如果发现表名带已知前缀,会去掉前缀,以减短索引名称
1=CT_
2=IMS_
这个是用于自动大小写识别的,里面就是一堆的常见单词,一行一个,全小写(大写也会自动转成小写),看了下有4千多个,我也不记得是从哪里抄来的了。你可以自行增删编辑此文件。
分词的处理过程,大概就是从左到右尽量分出长的单词。
这个也是用于自动大小写识别,是供用户自定义添加自己的词用的,优先级比dict.txt高,而且它跟dict.txt有区别,它可以大小写混合,它不参与分词处理,而是直接查找替换,只要名字中匹配到相应的单词,则直接替换。格式的话也是一行一个。
假设有一个字段USER_REALNAME,正常大小写识别结果是User_RealName;这时我们在MyDict.txt中加一行:USer_realN,则最终识别结果变为USer_realName,里面的大小写格式全保留。
位于Templates目录下。保留关键字字典文件,你可以根据需要修改它。如果你的表名或字段名有跟这里的冲突,则生成SQL时会产生警告: 表名/字段名可能非法。
这个文件的内容是从网上找了所有数据库的关键词列表拼一块再去重后形成的。
位于Templates目录下。新建表的配置文件,新建表要包含哪些字段,就在这里配置了。格式就是我们的描述字,默认内容如下:
Id(编号) PKInteger
Pid(父编号) Integer
Rid(关联编号) FKInteger
Name(名称) String(255)
Memo(注释) String
TypeName(类名) String
CreatorId(创建人编号) Integer //<<非空,普通索引>>当前用户ID
CreatorName(创建人姓名) String
CreateDate(创建日期) Date //<<Default:sysdate>>默认为当前时间
DataLevel(数据级别) Enum //0正常 1审核中 2被否决 -1已删除 -2草稿
OrderNo(排序号) Float
注:英文版将只使用括号前的物理名称。
位于Templates目录下。表字段列表右键菜单添加系统字段的配置。跟新建表的配置差不多,只不过它是用在添加字段的时候。
位于主程序目录下。你可以在这接管生成SQL、弹出窗口等事件。该脚本仅支持PASCAL,不支持JAVASCRIPT。
//EZDML Global Event Scripts (Only support Pascal-Script) Ver20191006
//EZDML全局事件脚本(注:只支持Pascal脚本)
//Generate SQL for a single Table. defRes is the default result.
//生成单个表的SQL,传入表对象、是否生成创建表SQL、是否生成创建约束SQL、默认生成的SQL结果、数据库类型、选项,返回自定义结果SQL
function OnEzdmlGenTbSqlEvent(tb: TCtMetaTable; bCreateTb, bCreateConstrains: Boolean; defRes, dbType, options: String): string;
begin
Result := defRes;
end;
//Generate upgrade SQL for an exists Table in a database. defRes is the default result.
//生成数据库的更新SQL,传入新旧表对象、默认生成的SQL结果、数据库类型、选项,返回自定义结果SQL
function OnEzdmlGenDbSqlEvent(designTb, dbTable: TCtMetaTable; defRes, dbType, options: String): string;
begin
Result := defRes;
end;
//Generate SQL for a single Field. defRes is the default result.
//生成单个字段的类型(varchar(255) nullable),传入表对象、字段对象、默认生成的结果、数据库类型、选项,返回自定义结果
function OnEzdmlGenFieldTypeDescEvent(tb: TCtMetaTable; fd: TCtMetaField; defRes, dbType, options: String): string;
begin
Result := defRes;
end;
//Generate upgrade SQL for an exists database-Field of a Table. defRes is the default result.
//生成增删改单个字段的SQL(alter table add xxx),传入要执行的操作(alter/add/drop)、表对象、新旧字段对象、默认生成的结果、数据库类型、选项,返回自定义结果
function OnEzdmlGenAlterFieldEvent(action: String; tb: TCtMetaTable; designField, dbField: TCtMetaField; defRes, dbType, options: String): string;
begin
Result := defRes;
end;
//Reserved custom events
//自定义命令事件
function OnEzdmlCmdEvent(cmd, param1, param2: String; parobj1, parobj2: TObject): string;
begin
Result := '';
end;
begin
end.
位于Templates目录下。在INI中设置EnableCustomPropUI=1后,表属性会多一页自定义,自定义的界面由脚本生成。脚本的具体配置参见《EZDML脚本配置》。
位于Templates目录下。在INI中设置EnableCustomPropUI=1后,字段属性会多一页自定义,自定义的界面由脚本生成。脚本的具体配置参见《EZDML脚本配置》。
位于Templates目录下。EZDML的导出WORD、HTML、MHT功能,其实都是导出HTML,都是由这个脚本生成(脚本可以是js_或ps_,JS优先)。脚本的具体配置参见《EZDML脚本配置》。
WORD是先导出MHT再由WORD打开,打开时WORD会尝试转换,你需要自己再保存一下。
此文件夹下的每个文件都会生成一个工具菜单。点击时会直接打开相应的文件;如果是PAS或JS文件,则尝试加载为脚本执行。脚本的具体配置参见《EZDML脚本配置》。
位于Templates目录下。生成代码及各种内容的模板文件。此目录下的JS和PAS(JS优先)会直接在表属性的“生成”页中显示,可直接以当前表加载脚本生成内容。脚本的具体配置参见《EZDML脚本配置》。
执行菜单命令“模型|生成代码”,也会使用这些文件。如果有子目录,则子目录将作为一个项目来生成。
对子目录生成代码时,程序会读取_dml_config.INI这个生成配置文件,此文件告诉程序要如何执行生成操作,示例如下:
[start.html]——对于start.html这个文件的配置
run_as_script=pas——该文件其实是一个PAS脚本文件,要作为PAS脚本加载执行,生成最终结果
[index_top.html] ——对于index_top.html这个文件的配置
rename=#curmodel_name#_index_top.html——该文件生成时要重命名,前面加当前模型名
run_as_script=pas——该文件其实是一个PAS脚本文件,要作为PAS脚本加载执行,生成最终结果
[table_ui] ——对于table_ui这个目录的配置
rename=ui_#curtable_name#——该目录生成时要重命名
loop_each_table=1——该目录下的文件、脚本需要对每一个表都执行一遍生成过程,该子目录下应该也要有一个_dml_config.INI来控制生成过程
[dml_settings]
auto_open_on_finished=start.html——生成结束时打开这个文件