CodeGen准备存储库

CodeGen准备存储库

CodeGen几乎总是与提供用于生成源文件的元数据的存储库结构一起使用,并且许多令牌需要使用存储库结构。             

基本要求是有一个结构定义,并且该结构定义包含一个或多个字段定义。有些标记还要求定义键,有些则需要具有结构赋值的文件定义。             

如果还没有存储库,则可以通过将现有的记录布局文件读入存储库结构来加载所需的大部分信息。             

存储库结构限制             

为了成功地与CodeGen一起使用,存储库结构必须满足以下要求。             

•CodeGen当前不支持枚举、二进制和结构字段。             

•允许覆盖字段,但通常会被CodeGen忽略。             

•所有密钥必须正确定义,以便与适当的ISAM文件完全匹配。             

•只允许一个标签,且该标签必须是字段均衡值类型。             

•使用某些令牌需要将正在处理的结构分配给文件定义,而有些则需要定义密钥。             

•必须按照正确的顺序定义键。CodeGen根据密钥在存储库结构中的定义顺序来确定密钥编号。以正确的顺序定义访问键,并在所有访问键定义之后定义外键。             

•如果打算为Synergy以外的语言生成源代码,则应避免给出可能是相关语言中保留字的字段名称。             

•如果希望阻止CodeGen处理结构,则可以将文本@NOCODEGEN添加到structures用户文本字段或长描述中。              

•要指定结构中的字段是结构“显示字段”,可以将文本@CODEGEN_display_field添加到字段的用户文本字符串或长描述中。有关详细信息,请参阅<DISPLAY_FIELD>标记。             

数组字段

CodeGen支持数组字段,但这些数组被“展平”为多个非数组字段。换言之,遇到的每个数组字段将被多个与数组字段具有相同数据类型和大小的字段替换。             

当一个数组扩展到多个单独的字段时,每个字段的名称都会被修改以包含数组元素定义。例如,字段MYFIELD,A10将展开为两个单独的字段,分别名为MYFIELD和MYFIELD。             

分组字段             

CodeGen支持组,包括组数组。当由CodeGen处理时,组被“扁平化”。换句话说,组中的字段将成为主结构中的字段,并且组字段将被删除。             

默认情况下,组成员字段名的前缀是父组字段的名称,后跟一个句点,但可以使用–g f命令行选项覆盖此行为。例如,如果名为ADDRESS的组包含名为STREET的字段,则CodeGen使用的字段的名称将为:

ADDRESS.STREET

但如果要使用–g f命令行选项,则字段的名称将为:             

STREET             

显然,在这种情况下,需要确保名称与同一结构中的任何其他标识符不冲突。             

如果存储库组定义包含“成员前缀”“member prefix”,则此前缀将添加到组中每个字段的名称中,但可以使用–g r命令行选项覆盖此行为。             

例如,如果一个名为ADDRESS的组包含一个名为STREET的字段,并且group字段定义了成员前缀HOME_,则CodeGen使用的字段的名称将为:

ADDRESS.HOME_STREET

With the –g f command line option the name would be:

HOME_STREET

With the –g r command line option the name would be:

ADDRESS.STREET

And with the –g f r command line options the name would be:

STREET

如果一个组成员字段被声明为数组,那么它将被视为前面在数组字段下讨论过的。             

加载Include文件             

在将包含文件中的字段加载到存储库结构之前,通常最好先制作包含文件的副本,然后在将其加载到存储库结构之前在文件中执行一些简单的“清理”:             

•存储库可以将包含文件中单个记录(或公共记录)中的字段加载到存储库结构中,因此,如果包含文件定义了多个记录,则首先确定要加载的记录。             

•存储库将使用字段定义之后的任何注释作为字段的说明,因此请清理注释。如果字段注释包括位置信息之类的内容,那么可能需要删除它们。请注意,如果这些位置是用特定的可识别字符分隔的(例如,如果它们在括号内),则可以在将字段加载到存储库中时指定这些字符,因此在这种情况下,不需要手动编辑它们。             

•存储库将加载在要加载的记录中定义的任何覆盖,但如果有要保留的覆盖图,这些覆盖被定义为单独的覆盖记录(使用record,X),那么可能需要考虑将这些覆盖字段移到实际的记录定义中。             

•请记住,一般情况下CodeGen会忽略覆盖字段,因此请检查所有覆盖,并确保最希望在生成的代码中使用的字段是“真实”字段,而不太可能有用的字段是覆盖字段。例如,如果有日期字段,其中实际字段是单独的年、月和日,并且有完整的日期覆盖。在生成代码时,很可能希望访问完整的日期,而不是单个字段,因此切换字段和覆盖可能是最好的选择。             

•如果有完整的覆盖层记录(一个记录后跟一个或多个记录,X's),那么可能需要将每个覆盖层加载到单独的存储库结构中。             

清理完include文件后,就可以将该文件加载到新的存储库结构中。程序如下:             

•启动存储库并选择“修改”>“结构”。             

•单击“添加”按钮(或按“插入”键)添加新结构。             

•提供结构的名称。通常最好使用原始记录名作为结构名。             

•设置文件类型。大多数结构应设置为“DBL ISAM”。             

•对结构进行有意义的描述,如“客户主记录”。              

•如果要将结构与数据文件中具有多个记录布局的文件相关联,请设置标记以告知存储库和其他工具如何检测文件中的此特定记录布局。如果不是这样,请选择“无”。             

•单击“确定”按钮创建新结构。             

•单击属性按钮(或按F3键)             

•从菜单中,选择属性>字段。             

•从菜单中,选择字段功能>加载字段(或按F9)。             

•输入包含文件的名称(或使用文件浏览器查找)。             

•如果包含文件有多个记录,请输入要读取的记录编号。             

•如果要从字段说明中删除信息(例如括号之间的位置),请输入分隔要删除的信息的字符。             

•单击“确定”按钮将字段加载到结构中。             

•按F4键退出字段列表。             

•再次按F4键退出结构,并保存更改。             

•继续按F4退出存储库程序。

posted @ 2020-12-15 09:04  吴建明wujianming  阅读(101)  评论(0编辑  收藏  举报