AsyncFunctionおよびAsyncEvaluateContextクラスを使用して、関数のサーバー側評価を行えます。関数の評価方法を指定するには、AsyncFunctionEvaluateModeクラスを使用します。
次のサンプルコードは、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)"); |
次のサンプルコードは、Refresh数式を使用して式を再計算します。
JavaScript |
コードのコピー
|
---|---|
<!DOCTYPE html> <script type="text/javascript"> var GetNumberFromServer = function () { GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction("GETNUMBERFROMSERVER", new GetNumberFromServer()); var GetTimeFromServer = function () { GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction("GETTIMEFROMSERVER", new GetTimeFromServer()); |