Как да оценя булев израз, даден като низ в X++ [AX 2012]

Имам сценарий, в който искам да оценя булев израз, даден като низ.

Например, "1==4", когато бъде предадено на някаква функция, ще оцени-към/върне FALSE.

По същия начин, "1==1", когато бъде предадено на същата функция, ще се изчисли като TRUE.

Ако това може да се направи, тогава определено бих искал някакъв начин, по който мога да оценя динамичен булев израз. Например "workHours==4" е низовият израз, а workHours е променлива.

Уведомете ме за някакво решение, ако знаете. Благодаря.


person SHAKIR SHABBIR    schedule 22.04.2014    source източник


Отговори (4)


Има начини за оценка на X++ изрази от текст чрез .NET (с XLNT Framework, например) и чрез някои вътрешни функции в X++. Но съм почти сигурен, че можете да стигнете до същото решение с по-чист подход. Например, можете да подадете контейнер към функция и след това да сравните техните стойности или нещо подобно.

Ако все пак искате да отидете по този начин, погледнете функцията runbuf в X++.

http://msdn.microsoft.com/en-us/library/aa656300.aspx

person j.a.estevan    schedule 22.04.2014

Сам научих отговора:

Ето примерния код, как можете да го направите.

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));

}
person SHAKIR SHABBIR    schedule 23.04.2014

Това може да е по-добър пример за ваша употреба, където можете лесно просто да промените expression.

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));
}
person Alex Kwitny    schedule 23.04.2014
comment
@jan - По отношение на редакцията, току-що модифицирах примера на MSDN сляпо. Ето защо вторият набор от очи върху кода винаги помага! - person Alex Kwitny; 24.04.2014

Вместо това използвайте функцията evalBuf().

http://dynamicsaxinsight.wordpress.com/2014/08/15/ax-2012-evalbuf-evaluate-string-expression-in-xpp/

person Muhammad Anas Khan    schedule 19.08.2014