ドキュメントの読み込みは、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 ドキュメントの読み込み操作が改善され、すべての計算が完了した場合のみ、ドキュメントを印刷・保存・処理することが簡単になりました。
