Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


アプリ変数を使用してグリッドの列見出しを動的に変更する

(※このトピックスは、Valence開発元(米CNX社)のブログ記事を翻訳・再編集したものとなります。原文記事は、コチラとなります。)

Valence App Builder で開発するグリッドアプリケーションでは、ほとんどの場合、変更する必要のない静的なカラムを使用します。つまり、「顧客番号」カラムには常に顧客番号または顧客 ID を、「商品番号」カラムには常に商品番号または SKU を保持する、などです。

しかし、場合によっては、レンダリングされるデータの種類に応じて異なる列見出しを持つことが理想的なグリッドの列を持つことがあります。

例えば、最近の期間または月の売上高を保存するファイルがあるとします。静的カラムの場合、見出しは「当月」、「前月」、「前々月」など、一般的なものにしなければなりません。

幸い、Valence ビルド 6.0.20210818.1 からは、[アプリ変数]を使用して列の見出しを上書きできるようになりました。これにより、静的な列の見出しを、表示される基本データをより正確に表すラベルに置き換えることができます(例:「8月」、「7月」、「6月」、など)。

この「最近の期間の売上グリッド」のシナリオを例として説明するために、当月から始まる過去4ヶ月間の架空の売上データを保持する簡単なテーブルを作成しましょう。まず、STRSQLに入り、テーブルを定義します。

create table qgpl/sales_data
             (product character(15),
              sales_p0 decimal(11,2),
              sales_p1 decimal(11,2),
              sales_p2 decimal(11,2),
              sales_p3 decimal(11,2))

次に、サンプルの商品マスターファイルDEMOPMASTを使って、ランダムな販売データを差し込みます。

insert into qgpl/sales_data
(select prdno, price*onhand*0.9,
               price*onhand*1.1,
               price*onhand*0.7,
               price*onhand*1.2
   from valence6/demopmast)

その結果、以下のようなファイルや商品別/期間別の最近の販売数が作成されます。

List of Recent Sales

これで、アプリを構築する準備が整いました。まず、SALES_DATA ファイルにSQL ベースのデータソースを作成して、製品の最近の 4 期分の売上と DEMOPMAST からの補助的なデータを取り込みます。SQLステートメントは非常にシンプルです。

select product, descp, type, class,
       sales_p0, sales_p1, sales_p2, sales_p3,
  from qgpl/sales_data
       inner join demopmast on prdno=product
 order by product

次に、このデータソースをシンプルなグリッド・ウィジェットに組み込み、[カラム]タブで若干の調整を加えて、次のようなリストを作成します(売上の列の見出しは、今のところ一般的なフィールド名のままであることに注意してください)。

Recent sales grid

ウィジェットを保存した後、アプリの作成に移りますが、ここで列見出しの上書きロジックが使用されます。新しく作成したウィジェットをアプリに追加して、最初のステップは、列見出しの上書き用に新しい[アプリ変数]を作成することです。わかりやすくするために、関連する列と同様の変数名(SalesP0Heading、SalesP1Heading、SalesP2Heading、SalesP3Heading)を作成します(下図を参照)。

App variables for Recent Sales app

ここで、これらの[アプリ変数]を対応するカラムにリンクする必要があります。そこで、グリッド・ウィジェットの歯車アイコンをクリックし、ここに示されているように、「アプリ変数にリンク」ボタンをクリックします。

Linking App Variables to grid widget

最後のステップは、アプリが起動されるたびにこれらの列見出し[アプリ変数]を上書きするために、アプリ起動時に呼び出される簡単なRPGスタートアップ・プログラムを作成することです。EXNABSTARTソース・コードをテンプレートとして使用します。sales_p0 は現在の期間または月を反映し、sales_p1 は前月、sales_p2 は 2 か月前など、RPG プログラムはいくつかの埋め込み SQL を使用して列見出し名を適宜に設定します。

** ------------------------------------------------------------------------------
p Process         b
d                 pi
d P0heading       s             15a
d P1heading       s             15a
d P2heading       s             15a
d P3heading       s             15a
 
  exec sql set :P0heading = monthName(current_date),
               :P1heading = monthName(current_date - 1 month),
               :P2heading = monthName(current_date - 2 months),
               :P3heading = monthName(current_date - 3 months);
  setAppVar('SalesP0Heading':P0heading);
  setAppVar('SalesP1Heading':P1heading);
  setAppVar('SalesP2Heading':P2heading);
  setAppVar('SalesP3Heading':P3heading);
p                 e

(もちろん、SQL以外のロジックを使うことも可能です)。

ソースメンバーを固有の名前で保存し、コンパイルした後、最後のステップは、App Builderにスタートアッププログラムの名前を伝えることです。これは、アプリの[セキュリティ]タブで行います(ここではEXCOLHOVRと名付けました)。

Specifying a Start Up program

アプリを保存して起動すると、一般的な期間の列の見出しが上書きされ、ユーザーにとって分かりやすい見出しになっていることが分かります。

Recent Sales grid app in action

この列見出し上書きのコンセプトは、他の方法にも適用することができます。例えば、アプリにボタンを追加して、グリッドを少し異なるデータで再読み込みし、必要に応じてアプリ変数を上書きするプログラム(EXNABBTN をモデルとしている)を呼び出すことができます。