すべてのカスタム関数へのすべての呼び出しを含む式があります。
IIF(FVAL(DES_CODE)=1039 OR FVAL(DES_CODE)=1040 OR FVAL(DES_CODE)=1034,0,TBLEVA(PTAX, FVAL(HOPO_GRS)))
この式を評価しようとすると、NCalc
エンジンがエラーを生成しています。理由がわかりません。式で宣言されたすべての関数は、式のEvalFunction
イベントで処理されました。では、なぜこのエラーが発生するのでしょうか?
mismatched input 'OR' expecting ')' at line 1:24 missing EOF at 'OR' at line 1:47
コード -
ここで式エンジンを初期化しています。
Dim exp As New Expression(vbCode, EvaluateOptions.IgnoreCase)
AddHandler exp.EvaluateParameter, AddressOf EvalParameters
AddHandler exp.EvaluateFunction, AddressOf EvalFunction
xReturn = Convert.ToDecimal(exp.Evaluate())
これらは式のイベントです。
Public Sub EvalFunction(ByVal name As String, ByVal args As FunctionArgs)
Select Case name.ToUpper.Trim
Case "FVAL"
Dim xobj = args.EvaluateParameters()
args.Result = fc.Fval(xobj(0))
Case "ORIGINALVAL"
Dim xobj = args.EvaluateParameters()
args.Result = fc.ORIGINALVAL(xobj(0))
Case "IIF"
Dim xobj = args.EvaluateParameters()
args.Result = fc.IIF(xobj(0), xobj(1), xobj(2))
Case "LOANDEDUCT"
Dim xobj = args.EvaluateParameters()
args.Result = fc.LOANDEDUCT(xobj(0))
Case "TBLEVA"
Dim xobj = args.EvaluateParameters()
args.Result = fc.TBLEVA(xobj(0), xobj(1))
Case "PERIODMONTH"
args.Result = fc.PERIODMONTH()
Case "PERIODSTART"
args.Result = fc.PERIODSTART()
Case "AGE"
Dim xobj = args.EvaluateParameters()
args.Result = fc.Age(xobj(0))
Case "INT"
Dim xobj = args.EvaluateParameters()
args.Result = fc.Age(xobj(0))
End Select
End Sub
Public Sub EvalParameters(ByVal name As String, ByVal args As ParameterArgs)
args.Result = name
End Sub