4D View Pro: 読み込みのコールバックで、カスタム関数の計算完了を確認する

ドキュメントの読み込みは、4D View Pro で作業する際の一般的なタスクです。しかし、読み込んだドキュメントにカスタム関数が含まれている場合、印刷や保存などのアクションを実行する前に、すべての計算が完了したかを判断するのは難しいことです。これを解決するために、4D 20 R9 では、IMPORTコマンドのコールバックフォーミュラが、すべてのカスタム関数の計算が完了した後にのみ実行されるようになりました。この改善により、読み込まれた 4D View Pro ドキュメントを操作する際の信頼性が向上しました。

HDI: 4D View Pro: 読み込みコールバックの改善

更新された読み込みコマンド

4D 20 R9 より、以下の IMPORTコマンドは、すべてのカスタム関数が計算完了するまでコールバックが実行されないことを保証します:

 

たとえば、多くのカスタム関数を含む大きなドキュメントをオフスクリーンエリアに読み込み、すべての計算が完了するのを待ってから出力する場合、次のようなユーザークラス (この例では OffScreenParameterClass という名称) を設定する必要があります:

property pdfPath : Text
property autoQuit:=False

Class constructor($pdfPath : Text)
   This.pdfPath:=$pdfPath
	
  // この関数はオフスクリーンエリアの各イベントで呼び出されます
Function onEvent
   Case of 
      : (FORM Event.code=On VP Ready)
         var $largeDocument4VP:="c:\\tmp\\mylargedocument.sjs"
			
         // 読み込み完了後にドキュメントを PDF に出力するコールバック
         var $callback:=Formula(VP EXPORT DOCUMENT(This.area;\
            This.pdfPath; {formula: Formula(ACCEPT)}))
			
         // ドキュメントを読み込み、すべてのフォーミュラを再計算します
         VP IMPORT DOCUMENT(This.area; $largeDocument4VP;\
            {formula: $callback; sjsOptions: {fullRecalc: True}})
			
			
      : (FORM Event.code=On URL Loading Error)
         CANCEL		
   End case 

このクラスをオフスクリーンエリアで次のように呼び出します:

// オフスクリーンエリアの初期化で使用する OffScreenParameterClass オブジェクトを作成します
$offScreenParameter:=cs.OffScreenParameterClass.new($pdfPath)

// オフスクリーンエリアを作成します
VP Run offscreen area($offScreenParameter)

VP FLUSH COMMANDS の更新

また、非同期計算の完了を待つメカニズムを VP FLUSH COMMAND にも導入しました。読み込み処理と同じように、計算完了時に呼び出されるフォーミュラを引数として受け渡せるようになりました。

たとえば、カスタム関数の呼び出しをプログラミングによっていくつか追加し、その計算完了を待ってドキュメントを出力するような場合には次のように書けます:

// 非同期計算を追加します
VP SET FORMULA(VP Cell($area; 1; 2); "my4DFunction(1)")
// 計算完了を待って、ドキュメントを出力します
VP FLUSH COMMANDS("ViewProArea"; Formula(VP EXPORT DOCUMENT("ViewProarea"; "c:\\tmp\\vpflush.xlsx")))

まとめ

このアップデートにより、カスタム関数が含まれた 4D View Pro ドキュメントの読み込み操作が改善され、すべての計算が完了した場合のみ、ドキュメントを印刷・保存・処理することが簡単になりました。

 

Fabrice Mainguené
- Product Owner -Fabrice Mainguenéは、2016年11月に4D Programチームに参加しました。プロダクトオーナーとして、彼はユーザーストーリーを書き、それを機能仕様に変換する役割を担っています。CNAMでコンピュータサイエンスの学士号を取得した後、FabriceはWindev開発者として小さなソフトウェア出版社に入社しました。その後、彼は産業および貿易分野のさまざまな企業で、Windev および Web 開発者として、また新機能の技術アドバイザーとして働きました。