Uniface10:コンポーネント変数の新しい定義方法

※参考記事(英語):https://www.uniface.info/display/IW/2016/09/02/Uniface+10%3A+The+new+procedural+declaration+of+component+variables

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