Axapta 如何计算X+;中作为字符串给出的布尔表达式+;[AX 2012]

Axapta 如何计算X+;中作为字符串给出的布尔表达式+;[AX 2012],axapta,dynamics-ax-2012,boolean-expression,boolean-operations,Axapta,Dynamics Ax 2012,Boolean Expression,Boolean Operations,我有一个场景,在这个场景中,我想计算一个作为字符串给出的布尔表达式 比如说,, 当传递给某个函数时,“1==4”的计算结果为/返回FALSE 同样地, “1==1”在传递给同一个函数时将计算为TRUE 如果可以做到这一点,那么我肯定需要某种方法来计算动态布尔表达式。 例如 “workHours==4”是字符串表达式的参数,workHours是一个变量 如果您知道任何解决方案,请告诉我。 谢谢。有一些方法可以通过.NET(例如,使用XLNT框架)和X++中的一些内在函数从文本计算X++表达式。但是

我有一个场景,在这个场景中,我想计算一个作为字符串给出的布尔表达式

比如说,, 当传递给某个函数时,“1==4”的计算结果为/返回FALSE

同样地, “1==1”在传递给同一个函数时将计算为TRUE

如果可以做到这一点,那么我肯定需要某种方法来计算动态布尔表达式。 例如 “workHours==4”是字符串表达式的参数,workHours是一个变量

如果您知道任何解决方案,请告诉我。
谢谢。

有一些方法可以通过.NET(例如,使用XLNT框架)和X++中的一些内在函数从文本计算X++表达式。但是我很确定你可以用更干净的方法得到同样的解决方案。例如,您可以将一个容器传递给一个函数,然后比较它们的值,或者类似的事情

如果您仍然想这样做,请查看X++中的
runbuf
函数


自学答案:

这是代码示例,您可以如何做到这一点

static void Job22(Args _args)
{

 str expr = 'ab==2';
 str method = @'boolean eval(int ab){return ' + expr + ';}';
 boolean result;
 ;
 result = runBuf(method, 5);
 info (strfmt("Calculation result is %1", result));

}

这可能是一个更好的示例,您可以轻松地更改
表达式

static void RunBufExample()
{
    str                 expression = '2==1';
    str                 func = 'boolean myFunc() {return ' + expression + ';}';
    boolean             retVal;       
    new ExecutePermission().assert();
    retVal = runBuf(func);
    CodeAccessPermission::revertAssert();
    info(strFmt("%1", retVal));
}
请改用evalBuf()函数


@jan-关于编辑,我只是盲目地修改了MSDN示例。这就是为什么第二组对代码的关注总是有帮助的!