データテーブルにおけるカラム値の自動設定

[OS]ALL
[リリース] 6.11以降
[キーワード] af, frame, datatable, add, row

[質問]

FRAMEエントリのデータテーブルオブジェクトは、実行時[行の追加]ができます。
行が追加された時、特定のカラム値を自動的にインクリメントするようにプログラムを作成したいのですが、どのように記述すればよいでしょうか。

[回答]

データテーブルで、[MODEL SCL] に以下のプログラムを記述すれば、このようなカラム値の自動的な計算ができます。

[MODEL SCL] にプログラムを記述する手順を以下に説明します。

  1. データテーブルの [オブジェクト属性] で [SCLエントリ] 名 を設定する
  2. データテーブルオブジェクトをマウス右ボタンで選択し、[テーブル]を選択する
  3. [SCLの編集]を選択する
  4. 表示されるプログラム画面に、以下のプログラムを記述する
  5. プログラムをコンパイルする

(プログラム)

dfinit: /* すべての行を表示する前の初期化 */
infolist=makelist();
rc=insertc(infolist,' ',-1,'new');
dsid=open('work.test','i'); /* 設定するデータセット名 */
return;

init:  /* 各行を表示する前の初期化 */
  call send(_self_,'_get_record_info_',infolist);
  newrow=getnitemc(infolist,'new');
  /* 新しい行の場合 */
  if newrow= 'Y' then
  do;
     rc=varstat(dsid,'col1','max',initval); /* 最大値を入手 */
     initval+1;
     col1=initval; /* COL1 は設定するカラム名 */
  end;
  return;

dfterm: /* オブジェクト終了時の処理 */
  if infolist then infolist=dellist(infolist);
  if dsid then dsid=close(dsid);
return;