CodeGen准备存储库
CodeGen準(zhǔn)備存儲(chǔ)庫(kù)
CodeGen幾乎總是與提供用于生成源文件的元數(shù)據(jù)的存儲(chǔ)庫(kù)結(jié)構(gòu)一起使用,并且許多令牌需要使用存儲(chǔ)庫(kù)結(jié)構(gòu)。
基本要求是有一個(gè)結(jié)構(gòu)定義,并且該結(jié)構(gòu)定義包含一個(gè)或多個(gè)字段定義。有些標(biāo)記還要求定義鍵,有些則需要具有結(jié)構(gòu)賦值的文件定義。
如果還沒(méi)有存儲(chǔ)庫(kù),則可以通過(guò)將現(xiàn)有的記錄布局文件讀入存儲(chǔ)庫(kù)結(jié)構(gòu)來(lái)加載所需的大部分信息。
存儲(chǔ)庫(kù)結(jié)構(gòu)限制
為了成功地與CodeGen一起使用,存儲(chǔ)庫(kù)結(jié)構(gòu)必須滿(mǎn)足以下要求。
?CodeGen當(dāng)前不支持枚舉、二進(jìn)制和結(jié)構(gòu)字段。
?允許覆蓋字段,但通常會(huì)被CodeGen忽略。
?所有密鑰必須正確定義,以便與適當(dāng)?shù)腎SAM文件完全匹配。
?只允許一個(gè)標(biāo)簽,且該標(biāo)簽必須是字段均衡值類(lèi)型。
?使用某些令牌需要將正在處理的結(jié)構(gòu)分配給文件定義,而有些則需要定義密鑰。
?必須按照正確的順序定義鍵。CodeGen根據(jù)密鑰在存儲(chǔ)庫(kù)結(jié)構(gòu)中的定義順序來(lái)確定密鑰編號(hào)。以正確的順序定義訪(fǎng)問(wèn)鍵,并在所有訪(fǎng)問(wèn)鍵定義之后定義外鍵。
?如果打算為Synergy以外的語(yǔ)言生成源代碼,則應(yīng)避免給出可能是相關(guān)語(yǔ)言中保留字的字段名稱(chēng)。
?如果希望阻止CodeGen處理結(jié)構(gòu),則可以將文本@NOCODEGEN添加到structures用戶(hù)文本字段或長(zhǎng)描述中。
?要指定結(jié)構(gòu)中的字段是結(jié)構(gòu)“顯示字段”,可以將文本@CODEGEN_display_field添加到字段的用戶(hù)文本字符串或長(zhǎng)描述中。有關(guān)詳細(xì)信息,請(qǐng)參閱<DISPLAY_FIELD>標(biāo)記。
數(shù)組字段
CodeGen支持?jǐn)?shù)組字段,但這些數(shù)組被“展平”為多個(gè)非數(shù)組字段。換言之,遇到的每個(gè)數(shù)組字段將被多個(gè)與數(shù)組字段具有相同數(shù)據(jù)類(lèi)型和大小的字段替換。
當(dāng)一個(gè)數(shù)組擴(kuò)展到多個(gè)單獨(dú)的字段時(shí),每個(gè)字段的名稱(chēng)都會(huì)被修改以包含數(shù)組元素定義。例如,字段MYFIELD,A10將展開(kāi)為兩個(gè)單獨(dú)的字段,分別名為MYFIELD和MYFIELD。 分組字段
CodeGen支持組,包括組數(shù)組。當(dāng)由CodeGen處理時(shí),組被“扁平化”。換句話(huà)說(shuō),組中的字段將成為主結(jié)構(gòu)中的字段,并且組字段將被刪除。
默認(rèn)情況下,組成員字段名的前綴是父組字段的名稱(chēng),后跟一個(gè)句點(diǎn),但可以使用–g f命令行選項(xiàng)覆蓋此行為。例如,如果名為ADDRESS的組包含名為STREET的字段,則CodeGen使用的字段的名稱(chēng)將為:
ADDRESS.STREET
但如果要使用–g f命令行選項(xiàng),則字段的名稱(chēng)將為:
STREET
顯然,在這種情況下,需要確保名稱(chēng)與同一結(jié)構(gòu)中的任何其他標(biāo)識(shí)符不沖突。
如果存儲(chǔ)庫(kù)組定義包含“成員前綴”“member prefix”,則此前綴將添加到組中每個(gè)字段的名稱(chēng)中,但可以使用–g r命令行選項(xiàng)覆蓋此行為。
例如,如果一個(gè)名為ADDRESS的組包含一個(gè)名為STREET的字段,并且group字段定義了成員前綴HOME_,則CodeGen使用的字段的名稱(chēng)將為:
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
如果一個(gè)組成員字段被聲明為數(shù)組,那么它將被視為前面在數(shù)組字段下討論過(guò)的。
加載Include文件
在將包含文件中的字段加載到存儲(chǔ)庫(kù)結(jié)構(gòu)之前,通常最好先制作包含文件的副本,然后在將其加載到存儲(chǔ)庫(kù)結(jié)構(gòu)之前在文件中執(zhí)行一些簡(jiǎn)單的“清理”:
?存儲(chǔ)庫(kù)可以將包含文件中單個(gè)記錄(或公共記錄)中的字段加載到存儲(chǔ)庫(kù)結(jié)構(gòu)中,因此,如果包含文件定義了多個(gè)記錄,則首先確定要加載的記錄。
?存儲(chǔ)庫(kù)將使用字段定義之后的任何注釋作為字段的說(shuō)明,因此請(qǐng)清理注釋。如果字段注釋包括位置信息之類(lèi)的內(nèi)容,那么可能需要?jiǎng)h除它們。請(qǐng)注意,如果這些位置是用特定的可識(shí)別字符分隔的(例如,如果它們?cè)诶ㄌ?hào)內(nèi)),則可以在將字段加載到存儲(chǔ)庫(kù)中時(shí)指定這些字符,因此在這種情況下,不需要手動(dòng)編輯它們。
?存儲(chǔ)庫(kù)將加載在要加載的記錄中定義的任何覆蓋,但如果有要保留的覆蓋圖,這些覆蓋被定義為單獨(dú)的覆蓋記錄(使用record,X),那么可能需要考慮將這些覆蓋字段移到實(shí)際的記錄定義中。
?請(qǐng)記住,一般情況下CodeGen會(huì)忽略覆蓋字段,因此請(qǐng)檢查所有覆蓋,并確保最希望在生成的代碼中使用的字段是“真實(shí)”字段,而不太可能有用的字段是覆蓋字段。例如,如果有日期字段,其中實(shí)際字段是單獨(dú)的年、月和日,并且有完整的日期覆蓋。在生成代碼時(shí),很可能希望訪(fǎng)問(wèn)完整的日期,而不是單個(gè)字段,因此切換字段和覆蓋可能是最好的選擇。
?如果有完整的覆蓋層記錄(一個(gè)記錄后跟一個(gè)或多個(gè)記錄,X’s),那么可能需要將每個(gè)覆蓋層加載到單獨(dú)的存儲(chǔ)庫(kù)結(jié)構(gòu)中。
清理完include文件后,就可以將該文件加載到新的存儲(chǔ)庫(kù)結(jié)構(gòu)中。程序如下:
?啟動(dòng)存儲(chǔ)庫(kù)并選擇“修改”>“結(jié)構(gòu)”。
?單擊“添加”按鈕(或按“插入”鍵)添加新結(jié)構(gòu)。
?提供結(jié)構(gòu)的名稱(chēng)。通常最好使用原始記錄名作為結(jié)構(gòu)名。
?設(shè)置文件類(lèi)型。大多數(shù)結(jié)構(gòu)應(yīng)設(shè)置為“DBL ISAM”。
?對(duì)結(jié)構(gòu)進(jìn)行有意義的描述,如“客戶(hù)主記錄”。
?如果要將結(jié)構(gòu)與數(shù)據(jù)文件中具有多個(gè)記錄布局的文件相關(guān)聯(lián),請(qǐng)?jiān)O(shè)置標(biāo)記以告知存儲(chǔ)庫(kù)和其他工具如何檢測(cè)文件中的此特定記錄布局。如果不是這樣,請(qǐng)選擇“無(wú)”。
?單擊“確定”按鈕創(chuàng)建新結(jié)構(gòu)。
?單擊屬性按鈕(或按F3鍵)
?從菜單中,選擇屬性>字段。
?從菜單中,選擇字段功能>加載字段(或按F9)。
?輸入包含文件的名稱(chēng)(或使用文件瀏覽器查找)。
?如果包含文件有多個(gè)記錄,請(qǐng)輸入要讀取的記錄編號(hào)。
?如果要從字段說(shuō)明中刪除信息(例如括號(hào)之間的位置),請(qǐng)輸入分隔要?jiǎng)h除的信息的字符。
?單擊“確定”按鈕將字段加載到結(jié)構(gòu)中。
?按F4鍵退出字段列表。
?再次按F4鍵退出結(jié)構(gòu),并保存更改。
?繼續(xù)按F4退出存儲(chǔ)庫(kù)程序。
總結(jié)
以上是生活随笔為你收集整理的CodeGen准备存储库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CodeGen按钮循环
- 下一篇: 如何在TVM上集成Codegen(上)