INF_Framework は ONnoji さん作成のフリーのライブラリです。
フォームに便利な機能を追加してくれます。

ここでは INF_Framework に含まれる機能の具体的な使用例をご紹介しようと思っています(?、頑張ります)。


まだまだ 桐9s と 桐s(桐10以降)が混在している環境も少なくないかと思いますので、
ここでは INF_Framework を利用して
桐9s で問題なく使用しているファイルを、桐10(以降)へコンバートして使用してもエラーにならないようにする方法の一例をご紹介します。
※桐9s → 桐s(桐10以降) への一方通行になります ♪

更新日:2024年8月27日
0 桐9s で作成して桐s(桐10以降)へ コンバートしたフォームを利用する際、エラーになる主な原因と基本的な対策
 
0-1 通常の基本的な対策例(INF_Frameworkを適用しない場合)

名札 メイン
 if ( #バージョン番号 >= 10 )
  * 桐s(桐10以降)で使用する際の設定
 else
  * 桐9s で使用する際の設定
 end
   
0-2-1 桐s(桐10以降) で全角に変更されたフォーム関係のオブジェクトはコンバートしただけではエラーになります。

フォーム、ワークスペース、フォームヘッダ部、フォーム明細部、フォームフッタ部、フォーム操作バー、グループ操作バー、レコード操作バー、行セレクタ

イベントで操作する場合などには、全角、半角の対策が必要です。
  例:INF_Frameworkを適用している場合

名札 メイン
 変数宣言 局所, 文字列 { &mFormObjectName }
 &mFormObjectName = #半角( "フォーム" )
 条件 ( #変数( "INFmKnjForm" ) ) &mFormObjectName = #全角( &mFormObjectName )

INF_Framework の#変数( "INFmKnjForm" ) が返す値は次の通りです。
・桐9s のフォーム(.wfm)を桐コンバータで桐s(桐10以降)のフォーム(.wfx)へ変換した場合には 未定義値
・桐s(桐10以降)で新規に作成したフォーム(.wfx)場合には 1(イチ)
   
0-2-2
フォームオブジェクト V9から変換したフォーム 桐s(V10以降)で新規作成したフォーム
メソッド ○メソッド呼び出し @フォーム.変数変更( )
×メソッド呼び出し @フォーム.変数変更( )
×メソッド呼び出し @フォーム.変数変更( )
○メソッド呼び出し @フォーム.変数変更( )
オブジェクト操作コマンド
○オブジェクト操作 @フォーム{ フォーム開始 = 1 }
×オブジェクト操作 @フォーム{ フォーム開始 = 1 }
×オブジェクト操作 @フォーム{ フォーム開始 = 1 }
○オブジェクト操作 @フォーム{ フォーム開始 = 1 }
※桐9s → 桐s(桐10以降) へ コンバートした場合、”フォーム” は 半角でもエラーになりません。
 
0-3 桐9s のファイル( wfm , tbl , rpt など )を桐コンバータで 桐s(桐10以降)のファイル(wfx , tbx , rpx など)へ変換しても
桐9s のファイル内に書き込んでいる拡張子はコンバート対象外なので、桐s(桐10以降)で使用するとエラーになります
特にフォームの場合オブジェクトの設定などを確認しないと判らない場合が多いと思われるので、変換部分を探すのが大変になります。

桐9sでは以上のことを踏まえて作成しましょう(※ファイル名などは、変数に代入してその変数を使用します)。
   
0-4 固有変数を保存しているファイル( *.var → *.vax ) に ファイル名が収納されている場合、その拡張子は手作業で変更しなくてはなりません。
※ファイル( *.var → *.vax ) はテキストファイルなので、適当なエディタ(メモ帳など)で編集します。
   

1 cmdStartupClick( ) で変換するサンプル

手続き実行 INFCNVprcVariableListExtensionConv( &VarList ) で一括変換
1-1 フォーム起動時に実行コマンドを設定しておいて、以下の処理を行います。
バージョン番号を確認して、INF_Framework を使ってファイルの拡張子を一括して変更します。



1-1-1 if ( #バージョン番号 >= 10 .and #lc2( #ファイル名( &INFmLibraryName, 4 ) ) = "cmx" )
  ここでは &INFmLibraryName の拡張子も点検しています
   
1-1-2 INFCNVprcVariableListExtensionConv( &VarList )
  &VarList に代入されたファイル(変数)の拡張子を桐s(桐10以降)用に変換します。
フォーム、テーブル、レポートなど混在してかまいません。
   

2 まとめ
 
2-1 全角、半角の対策が必要なオブジェクトは次のように処理(変換)します。
 
  該当のオブジェクト:
フォーム ワークスペース フォームヘッダ部 フォーム明細部 フォームフッタ部 フォーム操作バー グループ操作バー レコード操作バー 行セレクタ
2-1-1 #変数( "INFmKnjForm" ) の値を使って、半角と全角を切り替えます。

INF_Framework の#変数( "INFmKnjForm" ) が返す値は次の通りです。
  桐9s のフォーム(.wfm)を桐コンバータで桐s(桐10以降)のフォーム(.wfx)へ変換した場合には 未定義値
桐s(桐10以降)で新規に作成したフォーム(.wfx)場合には 1(イチ)
2-1-2 変換例)
  変数宣言 局所, 文字列 { &mFormObjectName }
&mFormObjectName = #半角( "フォーム" )
条件 ( #変数( "INFmKnjForm" ) ) &mFormObjectName = #全角( &mFormObjectName )
 
2-2 拡張子の変換:1つのファイル(変数に代入されている)の場合
  手続き実行 INFCNVprcStringExtensionConv( &targetTblName )
を使用します(ファイルの種別は問いません)。引数 ( &targetTblName ) はファイル名を収納している変数に変更してください。
 
2-3 拡張子の変換:複数のファイル(変数に代入されている)の場合
  手続き実行 INFCNVprcVariableListExtensionConv( &VarList )
を使用します。&VarList には変換するファイルを " , (カンマ)" で区切って代入しておきます。
   

3 ランチャー(INF_Framework の機能です) でのサンプル
3-1 サンプル1
バージョン番号を確認して、処理するファイルを変更します。
   
 
   
3-2 サンプル2
INF_Framework を使ってバージョン番号を確認しファイルの拡張子を変更します。

if ( #バージョン番号 >= 10 )
 手続き実行 INFCNVprcStringExtensionConv( &targetTblName )
end

桐s(桐10以降)の場合、引数にしているファイル(ここでは &targetTblName )の拡張子を 桐s(桐10以降)用に変更します。

3-2-1 桐9s でのファイル名を変数に代入しています


3-2-2 コマンドボタンの設定です(ランチャーで開くフォームをセットしています)

サンプル01 です


サンプル02 です


3-2-3 プロシージャです(サンプル01 , サンプル02 ともに同じプロシージャを使用します)

※ &wfm, &tbl はもちろん変数です。ファイル名が代入されています(一瞬 拡張子に見えますよね、念のため)。
   

桐の釣魚大全 ( Topページはこちら ) より 転載

目からウロコのデータベース桐プログラミング入門 パート2  By ONnoji Copyright (C) 2024

13.3 桐コンバータで (.wfm → .wfx)に変換したフォーム
13.3.1 フォームのオブジェクト名をチェックする
桐9sまでの桐と桐10以降の桐では[オブジェクトのリスト]のルート(最上位)のフォームのオブジェクト名が異なります。

すなわち、

 桐9sまでの桐 フォーム   ← 半角のカタカナです

 桐10以降の桐 フォーム ← 全角のカタカナです

です。

しかし、桐コンバータで (.wfm → .wfx)に変換したフォームの場合には、フォームのオブジェクト名が半角のカタカナのままです。
この場合、次の

 フォーム ワークスペース フォームヘッダ部 フォーム明細部 フォームフッタ部
 フォーム操作バー グループ操作バー レコード操作バー 行セレクタ

というオブジェクトを対象にした[オブジェクト操作]コマンドと[メソッド呼び出し]コマンドを用いる際に注意が必要です。
つまり、オブジェクト名を半角のカタカナにしなければエラーになってしまうのです。
そこで[エラー処理]コマンドを使って、[オブジェクトのリスト]のルート(最上位)のフォームのオブジェクト名が半角のカタカナか全角のカタカナかを調べなければなりません。
 
以下の簡単なサンプルを示しますのでご参考にしてください。
■サンプル
〔考え方の解説〕
まず、局所変数:&mFrormObjectName に初期値として #全角( "フォーム" )を代入します。
そして、ポイントは[オブジェクトのリスト]のルート(最上位)の[フォーム]オブジェクトは必ず存在するということです。
ということは、[フォーム開始]イベントも必ず存在するということです。
従って、[オブジェクト操作(取得)]コマンドで[フォーム開始]イベントの属性を自動変数:&eventFormBeginStatus に取得します。

 オブジェクト操作 &formObjectName{ &eventFormBeginStatus = フォーム開始 }
                                 ↑
 ※(重要)オブジェクト名は半角と全角が区別されますが、属性名では半角と全角は区別されません。(^^ok

この時、フォームのオブジェクト名が #全角( "フォーム" )でない場合には、エラーになります。
そうすると[オブジェクト操作]コマンドの直前にセットした エラー処理 手続き名 = "prcOnErrorEventFormBeginGet" によって一般手続き:prcOnErrorEventFormBeginGet( )が呼び出されます。
一般手続き:prcOnErrorEventFormBeginGet( )では、局所変数:&mFrormObjectName に #半角( "フォーム" )を代入します。
一般手続き:prcOnErrorEventFormBeginGet( )から復帰したら、パラメータを指定しない[エラー処理]コマンドを実行して、エラー処理の割り込みを解除します。

名札 メイン

└ prcFormObjectNameCheck ※&mFrormObjectName = #全角( "フォーム" )
  │
  :
 エラー処理 手続き名 = "prcOnErrorEventFormBeginGet"
  :
  └ prcOnErrorEventFormBeginGet ※&mFrormObjectName = #半角( "フォーム" )

名札 メイン
 変数宣言 局所,文字列{ &mFrormObjectName } /* この変数に#全角( "フォーム" )または#半角( "フォーム" )のどちらかの値が代入される */

 手続き実行 prcFormObjectNameCheck( )
 トレース出力 _&mFrormObjectName


手続き定義開始 prcFormObjectNameCheck( )
 変数宣言 自動,文字列{ &icon, &title = "prcFormObjectNameCheck( )", &msg }
 変数宣言 自動,整数 { &eventFormBeginStatus }

 &mFrormObjectName = #全角( "フォーム" ) /* 初期値として #全角( "フォーム" )を代入する */

 条件 ( #バージョン番号 >= 10 ) エラー処理 手続き名 = "prcOnErrorEventFormBeginGet"
 オブジェクト操作 &formObjectName{ &eventFormBeginStatus = フォーム開始 }
 条件 ( #バージョン番号 >= 10 ) エラー処理 /* 解除を忘れずに */

 ** 桐10 では、フォームオブジェクト名が 半角 と 全角 の2種類ある
 ** 桐9 等から変換したフォームでは #半角( "フォーム" )
 ** 桐10で新規作成したフォームでは #全角( "フォーム" )

手続き定義終了

手続き定義開始 prcOnErrorEventFormBeginGet( )
 変数宣言 自動,文字列{ &icon, &title = "prcOnErrorEventFormBeginGet( )", &msg }

 &mFrormObjectName = #半角( "フォーム" ) /* [エラー処理コマンド]が実行されたので #半角( "フォーム" )を代入する */

手続き定義終了

13.3.2 フォーム以外のオブジェクト名をチェックする
   フォームのオブジェクトが分ってしまえば、後は芋ずる式に調べることが可能です。
すなわち、フォーム以外のオブジェクトである以下の

  ワークスペース フォームヘッダ部 フォーム明細部 フォームフッタ部
  フォーム操作バー グループ操作バー レコード操作バー 行セレクタ

は[オブジェクト検査]メソッドを使うことでオブジェクトが存在するか否かを調べられます。
以下の例では、"フォームヘッダ部"が存在するか否かを調べます。

 変数宣言 自動,文字列{ &objectName }
 変数宣言 自動,整数 { &return }
   :
   :
 &objectName = "フォームヘッダ部"
 メソッド呼び出し &mFrormObjectName.オブジェクト検査( &objectName, &isObject )  /* &mFrormObjectName には、#全角( "フォーム" )または#半角( "フォーム" )のどちらかの値が代入される */
 ** &isObject
 ** 値 説明
 ** 1  存在する
 ** 0  存在しない