SpreadJS製品ヘルプ
AsyncFunction コンストラクタ
GC.Spread.CalcEngine.Functions 名前空間 > AsyncFunction タイプ : AsyncFunction コンストラクタ
関数の名前。
関数の引数の最小数。
関数の引数の最大数。
関数の記述。
非同期関数を定義するための抽象基本クラスを表します。
シンタックス
var instance = new GC.Spread.CalcEngine.Functions.AsyncFunction(name, minArgs, maxArgs, description);
function AsyncFunction( 
   name : string,
   minArgs : number,
   maxArgs : number,
   description : Object
) : AsyncFunction;

パラメータ

name
関数の名前。
minArgs
関数の引数の最小数。
maxArgs
関数の引数の最大数。
description
関数の記述。
使用例
次のサンプルコードは、AsyncFunctionクラスを拡張するカスタム関数を定義し、その関数でタイムアウトを使用してサーバー側評価をシミュレーションします。
var asum = function () {}
//Define a class "ASUM" that extends AsyncFunction
asum.prototype = new GC.Spread.CalcEngine.Functions.AsyncFunction("ASUM", 1, 255);
//Set default value to "Loading..."
asum.prototype.defaultValue = function () { return "Loading..."; };
//Override the evaluateAsync function
asum.prototype.evaluateAsync = function (context) {
var args = arguments;
//Use a timeout to simulate the server side evaluate or use an ajax post
    setTimeout(function () {
//Evaluation logic
        var result = 0;
        for (var i = 0; i < args.length; i++) {
            result += args[i];
        }
        result *= 2;
//Set the async evaluate result to CalcEngine
        context.setAsyncResult(result);
    }, 2000);
}
//Or use Ajax post
$.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);
    //}
//});
//Add the ASUM function to spread and set the formula
activeSheet.addCustomFunction(new asum());
activeSheet.setValue(0, 0, 5);
activeSheet.setValue(0, 1, 15);
activeSheet.setFormula(1, 1, "ASUM(A1,B1)");
var asum = function () {}
//Define a class "ASUM" that extends AsyncFunction
asum.prototype = new GC.Spread.CalcEngine.Functions.AsyncFunction("ASUM", 1, 255);
//Set default value to "Loading..."
asum.prototype.defaultValue = function () { return "Loading..."; };
//Override the evaluateAsync function
asum.prototype.evaluateAsync = function (context) {
var args = arguments;
//Use a timeout to simulate the server side evaluate or use an ajax post
    setTimeout(function () {
//Evaluation logic
        var result = 0;
        for (var i = 0; i < args.length; i++) {
            result += args[i];
        }
        result *= 2;
//Set the async evaluate result to CalcEngine
        context.setAsyncResult(result);
    }, 2000);
}
//Or use Ajax post
$.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);
    //}
//});
//Add the ASUM function to spread and set the formula
activeSheet.addCustomFunction(new asum());
activeSheet.setValue(0, 0, 5);
activeSheet.setValue(0, 1, 15);
activeSheet.setFormula(1, 1, "ASUM(A1,B1)");
関連トピック

参照

AsyncFunction タイプ