Spread.Sheets
非同期関数の使用
Spread.Sheets > 開発者の手引き > ユーザーインタフェースの管理 > 数式の使用 > 非同期関数の使用

AsyncFunctionおよびAsyncEvaluateContextクラスを使用して、関数のサーバー側評価を行えます。

コードの使用

次のサンプルコードは、AsyncFunctionクラスを拡張するカスタム関数を定義し、その関数でタイムアウトを使用してサーバー側評価をシミュレーションします。

JavaScript
コードのコピー
var asum = function () {}
//AsyncFunctionを拡張する"ASUM"クラスを定義します。
asum.prototype = new GC.Spread.CalcEngine.Functions.AsyncFunction("ASUM", 1, 255);
//デフォルト値として、"Loading..."を設定します。
asum.prototype.defaultValue = function () { return "Loading..."; };
//evaluateAsync関数をオーバーライドします。
asum.prototype.evaluateAsync = function (context) {
var args = arguments;
//サーバー側評価をシミュレートするには、タイムアウトを使用します。または、ajaxポストを使用します。
    setTimeout(function () {
//評価ロジック
        var result = 0;
        for (var i = 0; i < args.length; i++) {
            result += args[i];
        }
        result *= 2;
//非同期関数の評価結果をCalcEngineに設定します。
        context.setAsyncResult(result);
    }, 2000);
}
//または、Ajaxポストを使用します。
/$.ajax({
    //url: '@Url.Action("ASUM", "Home")',
    //type: "POST",
    //data: JSON.stringify(args),
    //contentType: "application/json,charset=UTF-8",
    //success: function (data) {
    //context.SetAsyncResult(data.result);
    //}
//});
//ASUM関数をSpreadに追加して、数式を設定します。
activeSheet.addCustomFunction(new asum());
activeSheet.setValue(0, 0, 5);
activeSheet.setValue(0, 1, 15);
activeSheet.setFormula(1, 1, "ASUM(A1,B1)");
関連トピック