作成日: 2022/04/01 最終更新日: 2022/04/06
文書種別
不具合
状況
修正済み
詳細
Evaluateメソッドをオーバーライドし、引数が計算に使用されないことがあるカスタム関数を定義します。その状態でカスタム関数を実行すると、引数の値が変更され計算に必要となっても正しい結果を返さない場合があります。
回避方法
Service Pack 9(v12.0.4512.2012)で修正済み。
Service Pack 9を適用せずに対処する方法としては、カスタム関数のEvaluateメソッドで、引数が計算に使用されない場合であっても、カスタム関数の引数のオブジェクトに明示的にアクセスすることで回避可能です。
protected override void Evaluate(GrapeCity.CalcEngine.IArguments arguments, GrapeCity.CalcEngine.IValue result)
{
if (string.IsNullOrEmpty(MustItem))
{
// --- 【回避策】引数のオブジェクトに明示的にアクセス ---
for (int i = 0; i < arguments.Count; i++)
{
GrapeCity.CalcEngine.IValue value = arguments[i];
}
// ----------------------------------------------------------------
result.SetValue("-");
return;
}
GrapeCity.CalcEngine.IEvaluationContext evaluationContext = arguments.EvaluationContext;
StringBuilder sb = new StringBuilder();
sb.AppendLine(MustItem);
for (int i = 0; i < arguments.Count; i++)
{
sb.AppendLine($"{i + 1}.{arguments[i].GetText(evaluationContext)}");
}
result.SetValue(sb.ToString());
}