Migaro. 技術Tips

                       

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


Valence Tips ローカルデータ機能

2021年6月にValence6.0 20210511.1をリリースしました。
AppBuilderのEditGridウィジェットには、サーバーのデータを直接編集せずにローカル上でデータを編集して任意のタイミング(ボタンクリック)でファイルを更新できる、ローカルデータ機能が追加されました。

ローカルデータ機能とは?

EditGridウィジェットにローカル上でデータを編集できる機能が追加されました。
扱うデータ量が多くない場合には、ワークファイルの代わりに利用できる非常に便利な機能です。

通常のEditGridは、データを追加、データを編集して更新(Update)を実行すると、IBMi側のファイルが即時更新されます。
ローカルデータ機能を使用すると、IBMi側のファイルを更新せず、クライアント側で取得したデータソース(JSONデータ)のみ更新します。

ローカルデータ機能を使用している場合には、アプリケーションにボタンを作成して、IBMiのファイルをRPG呼び出しから更新します。

クライアント側で更新したデータソース(JSONデータ)は、App Builderのボタン押下処理から呼び出されるEXTNABBTNベースのRPGプログラム実行時にパラメータとして渡されます。

そのため、RPG側では、パラメータとして受け取ったデータソースの内容を利用してIBMi側のファイルを更新可能です。

通常であれば、レコードを追加した瞬間にIBMi側のファイルにもレコードが追加されますが、ローカルデータ機能を利用することで、ボタン押下のタイミングでIBMi側のファイルを書き込むことが可能となるため、例えば、受注明細の新規登録や編集登録にローカルデータ機能を活用できます。

ローカルデータ機能を使用するための設定

ローカルデータ機能をEditGridで有効にするには、Widgetの編集画面で設定を選択します。

設定を選択後、右側のページング項目にある、アクティブのチェックを外します。
次に、右側のデータ項目を選択すると、ローカルのチェックが表示されますので、チェックを設定してください。

この簡単な設定のみでローカルデータ機能が有効になります。

更新処理の例

App Builderのアプリケーションにて異なるWidgetからRPGが呼び出された場合には、SetWidgetを利用して、使用するWidgetを切り替えてRPG処理を記述することが可能です。

SetWidgetとは?

SetWidgetはValenceのEXNABBTNベース(ボタンクリック等 RPG呼び出し)のRPGプログラム内にて、App Builderアプリケーションに追加されている、全てのウィジェットにアクセスするために追加されたAPIです。

SetWidgetを利用するには、各ウィジェットにあらかじめ名前を設定する必要があります。

ウィジェットに名前を設定する方法

アプリケーションの編集画面でウィジェットの歯車アイコンをクリックしてください。
表示される左側パネルの名前フィールドで名前が設定できます。

例では、FormウィジェットにCForm、EditGridウィジェットにCGridと設定しています。

RPGの更新例

ボタン押下時に呼び出すRPGプログラムでは、GetSelectionChar 、GetSelectionNum を利用してEditGridウィジェットの入力値を取得することができます。 
また、gSelectionCnt にはEditGridウィジェットの総レコード件数が格納されます。
このフィールドの値でループすることで、入力したレコードを一括処理できます。

ヘッダー情報となるFormウィジェットのオーダー番号を取得して、EditGridウィジェットに入力された明細のレコードを書き込む場合は以下のようになります。

      /copy qcpylesrc,vvHspec
     FDMCRDDM_D UF A E             DISK    USROPN
     ** --------------------------------------------------------------
      /include qcpylesrc,vvNabBtn
     ** --------------------------------------------------------------
     ** program start
     ** --------------------------------------------------------------
      /free
       Initialize();
       // place your code within the Process procedure...
       //
       Process();
       CleanUp();
       *inlr=*on;
      /end-free
     ** --------------------------------------------------------------
     p Process         b
     d                 pi
     d gIndex          S              4S 0
     d lCRSHCD         S              8A
     d lCRHNSU         S              5S 0
     d lHDNUM          S              8S 0
     C                   OPEN      DMCRDDM_D
      /free
       // Formウィジェットを参照
                         SetWidget('CForm');
       // オーダー番号を取得
                         lHDNUM = GetFormNum('ODRNUM');
       // EditGridウィジェットを参照                  
                         SetWidget('CGrid');
      /end-free
     C                   DO        gSelectionCnt gIndex
      /free
       // EditGridウィジェットの商品CDと販売数を取得
                         lCRSHCD = GetSelectionChar(gIndex:'F1_CRSHCD');
                         lCRHNSU = GetSelectionNum(gIndex:'F1_CRHNSU');
      /end-free
     C                   Z-ADD     lHDNUM        CRUNCD
     C                   Z-ADD     gIndex        CRLINE
     C                   MOVEL(P)  lCRSHCD       CRSHCD
     C                   Z-ADD     lCRHNSU       CRHNSU
     C                   WRITE     DMCRDDM_DR
     C                   ENDDO
     C                   CLOSE     DMCRDDM_D
       // レスポンスを返却...
      /free
       SetResponse('success':'true');
       SetResponse('info':'処理が完了しました');
      /end-free
     p                 e
      /include qcpylesrc,vvNabBtn

ValenceのAppBuilderは今後も新しい機能が追加されていきますので是非ご期待ください。