JCL_method_Generate

フィールド定義「fields」とテンプレートメソッドフォルダの内容を読み込んで、テンプレートメソッドからフォーム01とフォーム02用のメソッド群を生成する。フォーム01とフォーム02について、また生成するメソッドについて、詳しくは「4Dアプリ開発ガイド」を参照。

「4Dアプリ開発ガイド」では手作業でリストフォーム(フォーム01)と入力フォーム(フォーム02)のメソッド群を作成していく手順を示した。この手順に従えば、アプリ開発の最初は、テーブルの数だけ両フォーム用のパターン化されたメソッド群を作成していくことになる。この作業をテンプレートファイルを使って自動化した。テンプレートファイルに記述された特殊なタグ文字をテーブル名などに置き換えてながら所定のメソッドを自動作成する仕組み。

使い方
メソッドエディタを開いて実行ボタンをクリック。

fieldsのテキストファイルを選択するところはJCL_table_Generateと同じ。そのあとで、生成するメソッドの雛形となるテンプレートフォルダを指定する。つまり、このコマンドを実行すると、最初にファイル選択ダイアログが表示されて「fields.txt」を選択。次にフォルダ選択ダイアログが表示されて、テンプレートメソッド「JCL4Dv15_tpl_01&02」フォルダを選択する。これで「JCL4Dv15_tpl_01&02」に含まれているテンプレートメソッドのテーブル名やフィールド名、テーブル接頭辞がfieldsの内容におきかわって、実際のメソッドが生成される。

引数なし

  //JCL_method_Generate
  //20130318 yabe
  //外部テキストファイルのフィールド定義を読み込んでメソッド作成
  //メソッドが既にある場合削除しない。
  //20150826 yabe フォーム作成フラグ追加

C_LONGINT($dlg_ok)
C_BLOB($fileBlob)  //読み込んだファイルの内容
C_TEXT($fileText)  //読み込んだファイル
ARRAY TEXT($aryTableName;0)  //テーブル名の配列
ARRAY LONGINT($aryStartLineNr;0)  //テーブル定義始まりの行番号の配列
ARRAY TEXT($aryPrefix;0)  //フィールド名のプリフィックスの配列
ARRAY TEXT($aryFormsFlag;0)  //20150826 フォームを作るかどうかのフラグの配列「フォーム作る」なら作成
C_LONGINT($i;$numOfTables)
C_TEXT($dir)
ARRAY TEXT($aryFileName;0)  //の配列
ARRAY TEXT($aryFileContents;0)  //の配列
C_TEXT($buf)
C_BLOB($blob)
C_LONGINT($tableCount)
$tableCount:=0

  //定義ファイル「fields」を選択
  //ファイルオープンダイアログ
$dlg_ok:=JCL_file_SelectFileDlg (->$fileBlob)

If ($dlg_ok=1)
	
	  //読み込んだファイルの内容を4Dの文字セットにエンコード
	$fileText:=Convert to text($fileBlob;"UTF-8")
	
	  //改行コードをCRに統一する 20130318 add yabe
	$fileText:=Replace string($fileText;Char(Line feed);Char(Carriage return))  //ラインフィードをキャリッジリターンに置き換える
	$fileText:=Replace string($fileText;Char(Carriage return)+Char(Carriage return);Char(Carriage return))  //2つのキャリッジリターンを1つのキャリッジリターンに置き換える
	
	  //テンプレートファイルフォルダを選択 20181226 不可視ファイルを除く
	$dir:=Select folder("")
	DOCUMENT LIST($dir;$aryFileName;Ignore invisible)
	For ($i;1;Size of array($aryFileName))
		
		  //v14
		DOCUMENT TO BLOB($dir+$aryFileName{$i};$blob)
		$buf:=BLOB to text($blob;UTF8 text without length)
		
		APPEND TO ARRAY($aryFileContents;$buf)
		
	End for 
	
	  //テーブル名の配列を得る
	$numOfTables:=JCL_tbl_Names_fromFile ($fileText;->$aryTableName;->$aryStartLineNr;->$aryPrefix;->$aryFormsFlag)
	
	For ($i;1;$numOfTables)
		If ($aryFormsFlag{$i}#"NoForm")  // フォーム作らない, NoForm 
			  //If ($aryFormsFlag{$i}="フォーム作る")
			  //メソッドを作成
			JCL_method_GenerateOne ($fileText;$aryTableName{$i};$aryStartLineNr{$i};$aryPrefix{$i};->$aryFileName;->$aryFileContents)
		End if 
	End for 
	
	  //2回メソッドを作成することで、4Dの自動認識機能をオンにする。
	For ($i;1;$numOfTables)
		If ($aryFormsFlag{$i}#"NoForm")
			  //If ($aryFormsFlag{$i}="フォーム作る")
			$tableCount:=$tableCount+1
			  //メソッドを作成
			JCL_method_GenerateOne ($fileText;$aryTableName{$i};$aryStartLineNr{$i};$aryPrefix{$i};->$aryFileName;->$aryFileContents)
		End if 
	End for 
	
	C_TEXT($msg)
	$msg:="完了"+Char(Carriage return)
	$msg:=$msg+String($tableCount)+"/"+String($numOfTables)+"個のテーブル分のメソッドを作成しました。"
	ALERT($msg)
	
End if 

関連メソッド:JCL_method_GenerateOne