V7.0 マイグレーション・ツールで行われる変更

EGL V7.0 マイグレーション・ツールは、このトピックにリストされている変更を行います。マイグレーション・ツール設定を設定することにより、これらの変更の一部を制御できます。詳しくは、『EGL マイグレーション・ツール設定の設定』を参照してください。

V7.0 マイグレーション・ツールで行われる変更について詳しくは、以下のセクションを参照してください。

一般的な変更

プロジェクトへの変更
マイグレーション・ツールをプロジェクト全体に対して実行し、そのプロジェクトにサービス・パーツまたはサービス・バインディング・ライブラリーが含まれている場合、マイグレーション・ツールは、そのプロジェクトに EGL デプロイメント記述子ファイルを追加します。 詳しくは、このトピックの『サービス』を参照してください。

Java™ ファイルを削除する設定が有効になっている場合、マイグレーション・ツールはプロジェクトから Java ファイルを削除して、Java ファイルを EGL ソースから再生成できるようにします。この変更は、マイグレーション中の EGL コードと同じプロジェクトにある Java ファイルにのみ影響します。 EGL コードを異なるプロジェクトに生成している場合には、これらの Java ファイルを手動で削除してください。

マイグレーション・ツールは、JAR ファイルの新しい名前とロケーションを反映するようにプロジェクトのクラスパスを更新します。この更新には、使用されなくなった JAR ファイルの削除を含みます。

新しい予約語
設定に従って、マイグレーション・ツールは、新しい予約語と競合する既存の名前に、接頭部または接尾部を追加します。

プロパティー

既存のプロパティーへの変更
引用符付きストリングではなくなったプロパティーの値を変更します。 この変更には、pcbParms プロパティーが含まれます。 このプロパティーの場合、マイグレーション・ツールは、空ストリング ("") を NULL に変更します。

ステレオタイプ relativeRecord を持つレコード上の keyItem プロパティーから recordNumItem プロパティーへの変更。

isNullable プロパティーから isSQLNullable への変更。

テキスト UI 書式フィールドの protect プロパティーおよび outline プロパティーの値を ProtectKindOutlineKind の列挙型に変更。 outline プロパティーは配列になったため、マイグレーション・ツールは outline の値を大括弧で囲みます。 マイグレーション・ツールは、ConsoleForm レコードのフィールド上の protect の値は変更しません。
表 1. テキスト UI 書式フィールドの protectoutline プロパティーへの変更
古いプロパティーと値 新しいプロパティーと値
protect = yes protect = ProtectKind.protect
protect = no protect = ProtectKind.noProtect
protect = skip protect = ProtectKind.skipProtect
outline = box outline = [OutlineKind.box]
outline = noOutline outline = [OutlineKind.noOutline]
例外互換性
マイグレーション・ツールは、以下の論理パーツに対して、v60ExceptionCompatibility を YES に設定します。
  • プログラム
  • ライブラリー
  • ハンドラー
  • サービス
テキスト・リテラル
以前のバージョンでの動作を保持するために、マイグレーション・ツールは、設定に応じて、以下のパーツに対してコード textLiteralDefaultIsString = NO を追加します。
  • プログラム
  • ライブラリー
  • ハンドラー
  • サービス
  • レコード

ビルド記述子オプション

wrapperCompatibility
ご使用の .eglbld ファイルに wrapperCompatibility ビルド記述子オプションが含まれていない場合、マイグレーション・プロセスは、enableJavaWrapperGen ビルド記述子オプションの値を検査します。 enableJavaWrapperGen が YES または ONLY に設定されている場合、マイグレーションで、wrapperCompatibility ビルド記述子オプションを追加して、そのオプションを V6 に設定します。
wrapperCompatibility について詳しくは 、『wrapperCompatibility』を参照してください。

変数

コード・ブロック内での変数スコープ
変数は、宣言の前ではなく後でスコープ内になるようになりました。 詳しくは、『V7.0 マイグレーション・ツールで行われる変更』の『関数内の変数のスコープ』を参照してください。マイグレーション・ツールは、すべてのローカル変数宣言をコード・ブロックの先頭に移動させます。 その変数が初期化されている場合、マイグレーション・ツールはそのイニシャライザーを assignment ステートメントに変換し、変数宣言の元の場所に、その assignment ステートメントを残します。 その変数が既にコード・ブロックの先頭にあった場合、マイグレーション・ツールはそのイニシャライザーを assignment ステートメントに移し、その assignment ステートメントを変数宣言の最後に置きます。
INTERVAL 変数のデフォルトの指定子
マイグレーション・ツールは、フォーマットが指定されていない INTERVAL 変数に対して、デフォルトのフォーマット指定子を追加します。
表 2. INTERVAL 変数宣言への変更
古いコード マイグレーションされたコード
intval1 interval; intval1 interval("yyyyMM");

システム関数とシステム変数

一般的な変更
  • マイグレーション・ツールは、名前の変更されたシステム関数とシステム変数の使用を変更します。
  • マイグレーション・ツールは、次の例のように、sysLib.convert() システム関数の使用を変更し、ConvertDirection 列挙型を使用するようにします。
    sysLib.convert(myOrderRec, ConvertDirection.local, myConvTable);
    L」および「R」の値は、それぞれ「ConvertDirection.local」および 「ConvertDirection.remote」に変更されます。
  • SqlLib.Connect (以前は SysLib.Connect) システム関数の 4 番目のパラメーターの commitScope は必要なくなったので、マイグレーション・ツールはこれを削除します。
  • 以下の引数が指定されていなければ、マイグレーション・ツールは以下のように指定します。
    表 3. SqlLib.Connect の呼び出しへの変更
    古いコード マイグレーションされたコード
    isolationLevel serializableTransaction
    disconnectOption 明示的
  • 以下の表は、SqlLib.Connect の呼び出しをマイグレーション・ツールが処理する方法の例を示します。
    表 4. SqlLib.Connect の呼び出しへの変更
    古いコード マイグレーションされたコード
    SysLib.connect( a, b, c );
    SQLLib.connect( a, b, c, 
        explicit, 
        serializableTransaction );
    SysLib.connect( a, b, c, d );
    SQLLib.connect( a, b, c, 
        explicit, 
        serializableTransaction );
    SysLib.connect( a, b, c, d, e );
    SQLLib.connect( a, b, c, e, 
        serializableTransaction );
    SysLib.connect( a, b, c, d, e, f );
    SQLLib.connect( a, b, c, e, f );
    SysLib.connect( a, b, c, d, e, f, g );
    SQLLib.connect( a, b, c, e, f, g );
  • 以前のバージョンでの丸め規則との互換性を維持するために、MathLib.round() を引数 1 つだけで使用している場合は、MathLib.assign() を使用するように変更されます。MathLib.round() を引数 2 つで使用している場合は、変更されません。
    表 5. MathLib.round() の使用への変更
    古いコード マイグレーションされたコード
    result = round(x); assign(x, result);
    result = round(x, powerOfTen); 変更なし。
    さらに、以前のバージョンでの丸め規則との互換性を維持するために、マイグレーション・ツールは、MathLib の関数への呼び出しを、MathLib.assign() 内にラップします。
    表 6. MathLib の関数の使用への変更
    古いコード マイグレーションされたコード
    result = abs(x); assign(abs(x), result);
    result = pow(x, y); assign(pow(x, y), result);
    この変更によって、以下の関数が影響を受けます。
    • MathLib.abs()
    • MathLib.acos()
    • MathLib.asin()
    • MathLib.atan()
    • MathLib.atan2()
    • MathLib.cos()
    • MathLib.cosh()
    • MathLib.exp()
    • VGLib.floatingDifference()
    • VGLib.floatingMod()
    • VGLib.floatingProduct()
    • VGLib.floatingQuotient()
    • VGLib.floatingSum()
    • MathLib.frexp()
    • MathLib.ldexp()
    • MathLib.log()
    • MathLib.log10()
    • MathLib.max()
    • MathLib.min()
    • MathLib.modf()
    • MathLib.pow()
    • MathLib.sin()
    • MathLib.sinh()
    • MathLib.sqrt()
    • MathLib.tan()
    • MathLib.tanh()
JavaLib システム・ライブラリーを使用したキャスト
以前のバージョンでは、特定の JavaLib 関数の特定の引数で、括弧内のキャスト演算子を受け入れていました。 マイグレーション・ツールは、このキャストを構文 variable as "type" を使用するように変更します。
表 7. JavaLib 関数でのキャストへの変更
古いコード マイグレーションされたコード
(byte)myVar myVar as "java:byte"
(objId)myVar myVar as "objId:java"
(null)"java.lang.Integer" null as "java.lang.Integer"
不要な変換関数
マイグレーション・ツールは、削除された変換関数を修正します。変換関数が数式の一部の場合、マイグレーション・ツールは必要に応じてキャストを追加します。
表 8. マイグレーションされる変換関数
古いコード マイグレーションされたコード
result = stringAsInt(x); result = x;
result = stringAsInt(x) + 5; result = x as Int + 5;
result = stringAsFloat(x); result = x;
result = stringAsFloat(x) + 5; result = x as Float + 5;
result = stringAsDecimal(x); result = x;
result = stringAsDecimal(x) + 5; result = x as Decimal() + 5;
stringAsDecimal の場合は、結果の DECIMAL 型の長さを手動で入力する必要があります。

参照型

参照型の初期化
マイグレーション・ツールは、新規配列に初期サイズを追加します。
表 9. 配列イニシャライザーへの変更
古いコード マイグレーションされたコード
newArray string[]; newArray string[0];
マイグレーション・ツールは、イニシャライザーの指定されていない参照変数宣言に、イニシャライザーの追加も行います。
表 10. コンソール書式のイニシャライザーへの変更
古いコード マイグレーションされたコード
newForm consoleFormType; newForm consoleFormType{};
マイグレーション・ツールは、以下の参照変数をこのように初期化します。
  • ArrayDictionary
  • BLOB
  • CLOB
  • ステレオタイプ consoleForm を持つレコード・パーツ
  • Dictionary
マイグレーション・ツールは、out 修飾子を持つ配列を含む関数定義内で、関数の最初の行に new ステートメントを追加して、配列を初期化します。 例えば、次の関数を定義しているとします。
function doSomething (myParam int[] out)
  ...
end
マイグレーション・ツールは、この関数定義を次の定義に変更します。
function doSomething (myParam int[] out)
  myParam = new int[];
  ...
end
マイグレーション・ツールは、out 修飾子を持つ配列にのみ、この変更を行います。
参照型の assignment ステートメント
ある参照変数が別の変数に代入されているとき、マイグレーション・ツールはその assignment ステートメントを move ステートメントに変更して、以前のバージョンとの動作の整合性を維持します。 次の例では、変数 array1 および array2 は配列です。
表 11. 参照型の assignment ステートメントへの変更
古いコード マイグレーションされたコード
array1 = array2;
move array2 to array1;
マイグレーション・ツールはこの変更を、以下の型の変数に対して行います。
  • Array
  • Dictionary
  • ArrayDictionary
  • すべてのタイプ
  • ConsoleForm ステレオタイプを持つレコード・パーツ
独立型関数パーツ (論理パーツに含まれていない関数) 内の assignment ステートメントの場合、マイグレーション・ツールは以下の条件で、assignment ステートメントを move ステートメントに変更しようとします。
  • マイグレーション・ツールは、assignment ステートメントの両側を解決できる (つまり、assignment ステートメントの両側の変数が、参照型から作成されたと判断できる) 場合、他の関数での場合と同様に assignment ステートメントを move ステートメントに変更します。
  • マイグレーション・ツールが assignment ステートメントの両側を解決できない場合、関連のあるマイグレーション設定が適用されます。この場合、マイグレーション設定が有効になっていると、マイグレーション・ツールは上記のように、assignment ステートメントを move ステートメントに変更します。 マイグレーション設定が無効になっている場合、マイグレーション・ツールは assignment ステートメントを変更しません。

NULL 可能変数

NULL 値を含む式
マイグレーション・ツールは、NULL 値を含む式を、新しい NULL 可能性規則に変更します。『EGL V7.0 でのシステム・ライブラリーとシステム変数の変更点』を参照してください。
表 12. NULL 値を含む式のマイグレーション
古いコード マイグレーションされたコード
set myVar NULL; myVar = NULL;
myVar is NULL myVar == NULL
nullable 修飾子
マイグレーション・ツールは、関数パラメーターで使用する修飾子を nullable から sqlNullable に変更します。
itemsNullable ビルド記述子オプション
設定に従って、マイグレーション・ツールは I4GLItemsNullable プロパティーを以下のパーツに追加して、itemsNullable ビルド記述子オプションを置き換えます。
  • プログラム
  • ハンドラー
  • ライブラリー
  • レコード

その他のステートメント

move ステートメント
以前のバージョンでの move ステートメントのデフォルト動作を維持するために、マイグレーション・ツールは byName オプションを 2 つのレコード変数またはフォーム変数間の move ステートメントに追加します。
独立型関数内のステートメントの場合、マイグレーション・ツールは変更を行う前に、move ステートメントの両側の変数を解決します。
  • マイグレーション・ツールは、move ステートメントの両側を解決できる (つまり、ステートメントの両側の変数がレコードまたはフォームと判断できる) 場合、他の関数での場合と同様に byName を追加します。
  • マイグレーション・ツールが move ステートメントの両側を解決できない場合、 withV60Compat を追加して、以前のバージョンとの互換性を維持します。
マイグレーション・ツールでは、次の 2 つの場合に限りこの変更を実行できます。
  • assignment ステートメントの両側を解決できる
  • 関連するマイグレーション設定が有効
calltransfer、および show の構文の変更点
マイグレーション・ツールは、これらのステートメントの使用を、新しい構文に準拠するように変更します。
表 13. call および transfer への変更
古いコード マイグレーションされたコード
call xxx 1, 2 
    norefresh 
    externallyDefined;
call "xxx" (1, 2) 
   {IsNoRefresh = yes,
    IsExternal = yes};
transfer to program xxx 
    passing yyy 
    externallyDefined;
transfer to program "xxx" 
    passing yyy 
   {IsExternal = yes};
マイグレーション・ツールは、show ステートメントにも同様の変更を行います。
in 配列式
マイグレーション・ツールは、配列に in を使用しているステートメントを、from を使用するように変換します。
表 14. 配列での in への変更
古いコード マイグレーションされたコード
if ( a in myArray[4] ) if ( a in myArray from 4 )
exit ステートメントの変更
プログラムと独立型関数以外の論理パーツ内で、マイグレーション・ツールは exit program ステートメントを exit rununit に変更します。 マイグレーション・ツールはプログラムまたは独立型関数内の exit ステートメントへの変更は行いません。

サービス

@WSDL プロパティーと @XSD プロパティー
マイグレーション・ツールは、@WSDL プロパティーを @XML プロパティーに変換し、@XSD プロパティーを削除します。 マイグレーション・ツールはこの処理で、@WSDL プロパティーの elementName プロパティー・フィールドを、@XML プロパティーの name プロパティー・フィールドに変換します。 @WSDL プロパティーの isLastParamReturnValue プロパティー・フィールドは廃棄されます。
サービスとサービス・バインディング・ライブラリー
マイグレーション・ツールは、ライブラリー・パーツから serviceBindingLibrary ステレオタイプを削除します。

Web サービス要素をデプロイメント記述子に追加する設定が有効になっている場合、マイグレーション・ツールは EGL デプロイメント記述子をプロジェクトの EGLSource フォルダー内に作成し、サービス・バインディング・ライブラリー内のインターフェースの @EGLBinding および @WebBinding プロパティーを、そのデプロイメント記述子内のサービス・バインディング情報に変換します。 マイグレーション・ツールは、@WebBinding プロパティーに指定された WSDL ファイルを現行プロジェクトの EGLSource フォルダーにコピーします。

デプロイメント記述子をプロジェクトのビルド記述子に追加する設定が有効になっている場合、マイグレーション・ツールは deploymentDescriptor ビルド記述子オプションをその新しいデプロイメント記述子の名前に設定します。この名前は、デフォルトではプロジェクトと同じ名前です。

Web サービス参照を J2EE デプロイメント記述子から削除する設定が有効になっている場合、マイグレーション・ツールはこれらの参照を削除します。

マイグレーション・ツールは、ServiceLib.getWebEndPoint および ServiceLib.setWebEndPoint をそれぞれ ServiceLib.getWebServiceLocation および ServiceLib.setWebServiceLocation に更新します。

PageHandler パーツ

JSFHandler パーツへの変換
  • マイグレーション・ツールは JSFHandler ステレオタイプを使用して pageHandler パーツを Handler パーツに変更します。
  • マイグレーション・ツールは、pageHandler の onPageLoadFunction プロパティーを JSF ハンドラーの onConstructionFunction プロパティーに変換します。
  • マイグレーション・ツールは、cancelOnPageTransition = YES を、このプロパティーが定義されていないすべての pageHandler パーツに追加します。
  • forward to URL ステートメントおよび action プロパティーで、マイグレーション・ツールは、拡張子 .jsp を持つページへのリンクに対して、その拡張子を .faces に変更します。 forward to URL ステートメントで、マイグレーション・ツールによってこの変更が行われるのは、forward to URL ステートメントのターゲットが .jsp で終わる引用符付きストリングの場合のみです。action プロパティーでは、displayUse プロパティーが hyperlink に設定されており、かつ action プロパティーが .jsp で終わる引用符付きストリングの場合にのみ、マイグレーション・ツールによってこの変更が行われます。JSP ファイルのファイル拡張子について詳しくは、『サーバーでの Web ページの実行』を参照してください。以下の表は、これらの変更の例を示します。
    表 15. pageHandler 内のリンクへの変更
    古いコード マイグレーションされたコード
    myLink string
     {displayUse = hyperlink,
      action="myPage.jsp"};
    myLink string
     {displayUse = hyperlink,
      action="myPage.faces"};
    forward to URL "myPage.jsp";
    forward to URL "myPage.faces";
  • マイグレーション・ツールは、value プロパティーを初期化ステートメントに変換します。 変数に value プロパティーと初期化ステートメントの両方がある場合には、マイグレーション・ツールは次の例に示すように、value プロパティーの値を使用します。
    表 16. pageHandler パーツ内の変数の value プロパティーへの変更
    古いコード マイグレーションされたコード
    item1 string 
        { value = "item1ValueProp" } 
        = "item1Initializer";
    item1 string 
        {} = "item1ValueProp";
    item2 string 
        { value = "item3ValueProp" };    
    item2 string 
        {} = "item3ValueProp";
  • 場合によっては、マイグレーション・ツールは変数またはハンドラー名の下線文字を _005f に変換します。
JSP ファイル
マイグレーション・ツールは、pageHandler パーツに関連付けられた JSP ファイルを変更して、JSF ハンドラー内の変数への参照を更新します。 マイグレーション・ツールにより、これらの変更は pageHandler パーツを JSP ファイルと同時にマイグレーションする場合にのみ行われます。 これらの変更は、マイグレーション・ツールが pageHandler パーツを JSF ハンドラーにマイグレーションする際の変更に加えて行われます。
  • <h:selectOneMenu> のような JSF タグ、およびそれらのタグ内の <h:selectItems> または <h:selectItem> タグに対して、マイグレーション・ツールは value 属性を更新して EGL 接頭部、および AsBoolean などの接尾部をすべて削除します。 結果の value 属性が JSF ハンドラー内の変数を正しく参照する場合、マイグレーション・ツールは、その変更を保存します。
    例えば、次のような <h:selectOneMenu> タグを想定します。
    <h:selectOneMenu styleClass="selectOneMenu" id="menu1" 
      value="#{myPage.EGLmyComboBoxValue}">
      <f:selectItems value="#{myPage.EGLmyComboBoxChoicesAsBoolean}"/>
    </h:selectOneMenu>
    マイグレーション・ツールは、このタグを次のように変換します。
    <h:selectOneMenu styleClass="selectOneMenu" id="menu1" 
      value="#{myPage.myComboBoxValue}">
      <f:selectItems value="#{myPage.myComboBoxChoices}"/>
    </h:selectOneMenu>
    マイグレーション・ツールはこの変更を、以下のタグに対して行います。
    • <h:selectManyCheckboxlist>
    • <h:selectManyListbox>
    • <h:selectManyMenu>
    • <h:selectOneListbox>
    • <h:selectOneMenu>
    • <h:selectOneRadio>
    上記のタグ内の <f:selectItems> および <f:selectItem> にも変更を行います。
    マイグレーション・ツールは、以下の接尾部を削除します。
    • AsBoolean
    • AsInteger
    • AsIntegerArray
    • AsReader
    • AsSelectItemsList
    • AsStream
    関連付けられた EGL 変数が配列またはデータ・テーブル列であり、プロパティー selectFromListItem および selectType が設定されている場合、マイグレーション・ツールは value フィールドに対して、以下のような変更を追加します。
    • selectType プロパティーが index に設定されている場合、マイグレーション・ツールは 接尾部 _exeIdx.toArray を追加します。
    • selectType プロパティーが value に設定されている場合、 マイグレーション・ツールは接尾部 .toArray を追加します。
  • 同様に、value 属性が JSF ハンドラー内の EGL 変数の標準的な式の形式である場合 (#{beanName.variableName})、マイグレーション・ツールは、EGL 接頭部、および AsBoolean のような接尾部を、そのページ上の他のタグの value 属性から削除します。 この場合、マイグレーション・ツールは次の値を持つ binding 属性を追加します。
    #{beanName.variableName_Ref}
    ここで、beanName はページ Bean の名前 (デフォルトでは JSF ハンドラーと同じ名前) であり、variableNamevalue 属性で参照されていた変数の名前です。
  • マイグレーション・ツールは、JSF コマンド・ボタンのように、actionListener 属性を持つすべてのタグを更新します。 #{beanName.commandActionListener}#{beanName._commandActionListener} に変更します。
  • #{beanName.variableName} の形式の式を含んでいるその他のすべての JSF 属性に対して、マイグレーション・ツールは EGL 接頭部、および上記のリストにある AsBooleanAsInteger などの接尾部を削除します。

その他のパーツ

ConsoleForm
ConsoleForm パーツは生成可能パーツになったので、マイグレーション・ツールは各 ConsoleForm をチェックして、名前がそのファイルの名前に一致しているかを調べます。ファイル名が一致していなくて、そのファイル名が使用されていない場合には、マイグレーション・ツールはその ConsoleForm の名前を持つ新規ファイルを作成し、その新規ファイルに ConsoleForm パーツを、すべての必要な import ステートメントとともに移します。 そのファイル名が使用されている場合は、マイグレーション・ツールは何も変更しません。したがって、ユーザーが ConsoleForm パーツを修正する必要があります。
インターフェース・パーツ
マイグレーション・ツールは、インターフェース・パーツから BasicInterface ステレオタイプを削除します。 さらに、JavaObject ステレオタイプを持つすべてのインターフェース・パーツを ExternalType パーツに変換します。
VGUIRecord パーツ
マイグレーション・ツールは、以下のように VGUIRecord に関するプロパティーを設定します。
v60ExceptionCompatibility = YES, 
HandleHardIOErrors = NO, 
ThrowNrfEofExceptions = YES