Unifaceの古いバージョンから開発に携わっている人であれば、コンポーネント範囲での変数の定義や、表示形式を自由に設定できる[Define Component Variables]フォームに馴染みがあるかと思います。
Unifaceの古いバージョンでは、コンポーネント変数は、メニュー[Go To] > [Component Variables…]から[Define Component Variables]フォームを起動して定義していました。しかしこのやり方よりも、ローカル変数のようにコードで定義したい、という声がありました。
フォームで変数を定義する利点もありますが、変数のスコープを明示するためには、コードで変数を定義するのが基本です。また、変数の定義やその内容を参照する際にも、コードのほうが効率がよいと言えるでしょう。
Uniface10(10.1.03とそれ以上)では、コンポーネント変数はコンポーネントの[Declarations]コンテナにProcScript「variables」ステートメントを用いて定義します。表示形式は定義の中で自由に設定できます。
<コンポーネント変数の定義:構文>
variables DataType {DisplayFormat} VariableName {, VariableName2 ... {, VariableNameN}} endvariables
表示形式は、[Define Component Variables]フォームで設定していたのと同様に「DIS(<format>)」シンタックスを使って設定できます。ご要望のありました[Description]と[Comments]に関しては、変数定義のコード内でコメントを記述してください。
<コンポーネント変数の定義:表示形式設定例>
variables string vCity, vCountry string DIS(Mr./Ms. ??????????) vFormattedName ;- Formatted name for official notifications date DIS($NLS(MEDIUM,DATE)) vStartDate, vEndDate ;- Start/End of contract float DIS(9999999P99 US$) vSalary ;- Net salary in US dollars endvariables
さらに、プリコンパイラディレクティブ(#include、#forなど)を用いて、動的にコンポーネント変数を定義することが可能になりました。
「variables」ブロックをインクルードScriptとして定義すれば、「#include」ディレクティブによって簡単に再利用できます。「#for」ディレクティブを使用すれば、定義の記述量を減らすことができます。複雑な表示形式の記述を回避し、コンポーネント間の整合性を確保するためにご利用ください。新機能のスニペットライブラリを活用すると、定義内容をコードに素早く追加することも可能です。
<コンポーネント変数の定義:プリコンパイラディレクティブ活用例>
variables ;- Predefined variable declaration for error handling: #include MYLIB::ERROR_VARS #for CPTVAR in (NAME,SURNAME,CITY,COUNTRY) string v<CPTVAR> ;- Generate component variables for customer data #endfor string <IBAN_FORMAT> vAccount ;- Predefined printed format for IBAN code (IBAN ???? ???? ???? ???? ????) endvariables